APIを使用したOracle NoSQL Database Cloud Serviceでの表および索引の作成
Java、Python、Go、Node.jsまたはから表および索引を作成する方法について学習します。NETアプリケーション。
この記事には次のトピックが含まれます:
Oracle NoSQL Database SDKドライバについて
Oracle NoSQL Database SDKドライバについて学習します。
Oracle NoSQL Database SDKドライバには、オンプレミスまたはOracle NoSQL Database Cloud ServiceまたはOracle NoSQL Database Cloud Simulatorと対話できるファイルが含まれています。
Oracle NoSQL Database SDK for JavaはMaven Centralリポジトリで使用でき、詳細はここから入手可能です。プロジェクトの主要な場所は GitHubです。
リリースごとにバージョンが変更されます。
<dependency>
<groupId>com.oracle.nosql.sdk</groupId>
<artifactId>nosqldriver</artifactId>
<version>5.2.31</version>
</dependency>
Oracle NoSQL Database SDK for Javaは、すべてのJavaクラス、メソッド、インタフェースおよび例を提供します。ドキュメントは、GitHubまたはJava APIリファレンス・ガイドでjavadocとして使用できます。
次に示すコマンドを使用して、Python Package Indexを通じてPython SDKをインストールできます。
pip3 install borneo
Oracle NoSQL SDK for Pythonは、すべてのPythonクラス、メソッド、インタフェースおよび例を提供します。ドキュメントは、Python APIリファレンス・ガイドで入手できます。
ブラウザで「ダウンロードの実行」ページを開き、オペレーティング・システムに対応するダウンロード・タブをクリックします。ファイルをホーム・フォルダに保存します。
- Windowsシステムでは、ダウンロードしたMSIファイルを開き、プロンプトに従ってGoをインストールします。
- Linuxシステムでは、ダウンロードしたアーカイブを
/usr/local
に抽出して、/usr/local/go
にGoツリーを作成します。PATH環境変数に/usr/local/go/bin
を追加します。
SDKの使用方法およびGoドライバのパッケージ、タイプおよびメソッドを参照するには、オンライン・ゴーカにアクセスします。
npm install oracle-nosqldb
Node.jsクラス、イベントおよびグローバル・オブジェクトを参照するには、Node.js APIリファレンス・ガイドにアクセスします。
- SDKをプロジェクト・リファレンスとして追加:を使用して、SDKのNuGetパッケージをプロジェクトへの参照として追加できます。Net CLI。
または、Visual StudioのNuGet Package Managerを使用して同じ操作を実行できます。cd <your-project-directory> dotnet add package Oracle.NoSQL.SDK
- Independent Install: nuget.exe CLIを使用して、選択したディレクトリにSDKを個別にインストールできます。
nuget.exe install Oracle.NoSQL.SDK -OutputDirectory <your-packages-directory>
NoSQLハンドルの取得
Oracle NoSQL Databaseドライバを使用して表にアクセスする方法を学習します。NoSQLハンドルを作成することにより、アプリケーションの開発を開始します。NoSQLHandleを使用して表にアクセスし、すべての操作を実行します。
NoSQLHandleで表される接続を作成するには、NoSQLHandleFactory.createNoSQLHandle
メソッドとNoSQLHandleConfig
クラスを使用してハンドルを取得します。NoSQLHandleConfig
クラスを使用すると、アプリケーションでハンドル構成を指定できます。詳細は、Java APIリファレンス・ガイドを参照してください。
/* Configure a handle for the desired Region and AuthorizationProvider.
* By default this SignatureProvider constructor reads authorization
* information from ~/.oci/config and uses the default user profile and
* private key for request signing. Additional SignatureProvider
* constructors are available if a config file is not available or
* desirable.
*/
AuthorizationProvider ap = new SignatureProvider();
/* Use the us-ashburn-1 region */
NoSQLHandleConfig config = new NoSQLHandleConfig(Region.US_ASHBURN_1, ap);
config.setAuthorizationProvider(ap);
/* Sets a default compartment for all requests from this handle. This
* may be overridden in individual requests or by using a
* compartment-name prefixed table name.
*/
config.setDefaultCompartment("mycompartment");
// Open the handle
NoSQLHandle handle = NoSQLHandleFactory.createNoSQLHandle(config);
// Use the handle to execute operations
ハンドルには、メモリーとネットワーク・リソースが関連付けられています。ハンドルを使用してアプリケーションを完了するときには、NoSQLHandle.close
メソッドを使用してリソースを解放する必要があります。
ネットワーク・アクティビティおよびリソースの割当てと割当て解除のオーバーヘッドを最小限に抑えるために、ハンドルを繰り返し作成してクローズすることは避けるのが賢明です。たとえば、操作のたびにハンドルを作成してクローズすると、アプリケーションのパフォーマンスが低下します。1つのハンドルで同時操作が許可されているため、マルチスレッド・アプリケーションで表にアクセスするには、1つハンドルがあれば十分です。複数のハンドルを作成すると、余分なリソース・オーバーヘッドが生じ、パフォーマンス上のメリットがなくなります。
ハンドルは、最初に通信エンドポイント、認可情報およびハンドル構成のデフォルト値を構成するborneo.NoSQLHandleConfig
インスタンスを作成することによって作成されます。borneo.NoSQLHandleConfig
は、サービスへの接続を表します。作成後は、リソースをクリーンアップするために、メソッドborneo.NoSQLHandle.close()
を使用してクローズする必要があります。ハンドルはスレッドセーフで、共有することを目的としています。
from borneo import NoSQLHandle, NoSQLHandleConfig, Regions
from borneo.iam import SignatureProvider
# create AuthorizationProvider
provider = SignatureProvider()
# create handle config using the correct desired region
# as endpoint, add a default compartment.
config = NoSQLHandleConfig(Regions.US_ASHBURN_1).
set_authorization_provider(provider).
set_default_compartment('mycompartment')
# create the handle
handle = NoSQLHandle(config)
ハンドル作成のリソース使用率およびオーバーヘッドを削減するには、
borneo.NoSQLHandle
インスタンスの作成とクローズを過度に行わないことをお薦めします。
go
アプリケーションの最初のステップは、サービスにリクエストを送信するために使用するnosqldb.Client
ハンドルを作成することです。クライアント・ハンドルのインスタンスは、複数のゴルチンによる同時使用で安全であり、マルチ・ゴルーチン・アプリケーションで共有することを目的としています。ハンドルは、資格証明およびその他の認証情報を使用して構成されます。provider, err := iam.NewSignatureProviderFromFile(cfgfile, profile, passphrase, compartment)
cfg := nosqldb.Config
{
Region: "us-phoenix-1", AuthorizationProvider: provider,
}
client, err := nosqldb.NewClient(cfg)
// use client for all NoSQL DB operations
クラスNoSQLClient
は、サービスへの主要なアクセス・ポイントを表します。NoSQLClient
のインスタンスを作成するには、適切な構成情報を指定する必要があります。この情報はプレーンJavaScriptオブジェクトで表され、オブジェクト・リテラルとしてNoSQLClient
コンストラクタに提供できます。または、この情報をJSON構成ファイルおよびNoSQLClient
コンストラクタに格納し、そのファイルへのパス(アプリケーションの現在のディレクトリに対する絶対パスまたは相対パス)を指定することもできます。
NoSQLClient
のインスタンスを作成します。また、デフォルト・コンパートメントが追加され、構成オブジェクトの一部のデフォルトのタイムアウト値がオーバーライドされます。const NoSQLClient = require('oracle-nosqldb').NoSQLClient;
let client = new NoSQLClient({
region: Region.US_ASHBURN_1,
timeout: 20000,
ddlTimeout: 40000,
compartment: 'mycompartment',
auth: {
iam: {
configFile: '~/myapp/.oci/config',
profileName: 'Jane'
}
}
});
2番目の例では、同じ構成をJSONファイルconfig.json
に格納し、それを使用してNoSQLClient
インスタンスを作成します。
{
"region": "US_ASHBURN_1",
"timeout": 20000,
"ddlTimeout": 40000,
"compartment": "mycompartment",
"auth": {
"iam": {
"configFile": "~/myapp/.oci/config",
"profileName": "Jane"
}
}
}
const NoSQLClient = require('oracle-nosqldb').NoSQLClient;
let client = new NoSQLClient('config.json');
クラスNoSQLClient
は、サービスへの主要なアクセス・ポイントを表します。NoSQLClient
のインスタンスを作成するには、適切な構成情報を指定する必要があります。この情報は、NoSQLClient
コンストラクタにインスタンスを提供できるNoSQLConfig
クラスで表されます。または、構成情報をJSON構成ファイルに格納し、そのファイルへのパス(絶対または現在のディレクトリに対する相対)を取得するNoSQLClient
コンストラクタを使用することもできます。
NoSQLConfig
を使用して、Cloud ServiceのNoSQLClient
のインスタンスを作成します。また、デフォルトのコンパートメントが追加され、NoSQLConfig
のデフォルトのタイムアウト値がオーバーライドされます。var client = new NoSQLClient(
new NoSQLConfig
{
Region = Region.US_ASHBURN_1,
Timeout = TimeSpan.FromSeconds(10),
TableDDLTimeout = TimeSpan.FromSeconds(20),
Compartment = "mycompartment",
AuthorizationProvider = new IAMAuthorizationProvider(
"~/myapp/.oci/config", "Jane")
});
2番目の例では、同じ構成をJSONファイルconfig.json
に格納し、それを使用してNoSQLClient
インスタンスを作成します。
config.json
{
"Region": "us-ashburn-1",
"Timeout": 20000,
"TableDDLTimeout": 40000,
"compartment": "mycompartment",
"AuthorizationProvider":
{
"AuthorizationType": "IAM",
"ConfigFile": "~/myapp/.oci/config",
"ProfileName": "Jane"
}
}
var client = new NoSQLClient("config.json");
コンパートメントについて
Oracle NoSQL Databaseドライバを使用してOracle NoSQL Database Cloud Service表の作成および操作中にコンパートメントを指定する方法について学習します。
インスタンス・プリンシパル(OCIコンピュート・インスタンスからサービスにアクセス)を使用して認証されている場合、この場合のデフォルトは存在しないため、ID (OCID)を使用してコンパートメントを指定する必要があります。Oracle Cloud Infrastructureドキュメンテーションのインスタンスからのサービスのコールを参照してください。
- ハンドルを使用するすべての操作に適用されるように、
NoSQLHandleConfig
でデフォルトのコンパートメントを使用します。例は、NoSQLハンドルの取得を参照してください。 - 各リクエストでは、表名に加えて、コンパートメント名またはID (OCID)を使用します。これにより、デフォルトのコンパートメントがオーバーライドされます。
例:
GetRequest getReq = new GetRequest().setTableName("mytable") .setCompartment("mycompartment");
- 表名の接頭辞としてコンパートメント名を使用します。これにより、デフォルトのコンパートメントや、APIを使用して指定されたコンパートメントがオーバーライドされます。
例:
GetRequest getReq = new GetRequest().setTableName("mycompartment:mytable");
ネストされたコンパートメントへのパスを指定する際には、テナンシから推測されるため、最上位コンパートメントの名前をパスに含めないでください。
borneo.NoSQLHandleConfig.set_compartment()
のリクエストのデフォルト・コンパートメントの指定を許可するメソッドが存在します。これにより、ユーザーのデフォルトのコンパートメントがオーバーライドされます。- また、各
Request
インスタンスにコンパートメントを指定できます。
set_compartment
メソッドは、ID (OCID)またはコンパートメント名またはパスのいずれかを取ります。コンパートメント名が使用されている場合、最上位コンパートメントの名前になることがあります。
コンパートメント・パスを使用してネストされたコンパートメントを参照する場合、パスは、パスの最上位レベルのコンパートメント(
compartmentA.compartmentB
など)を除外するドット区切りパスです。
...
request = PutRequest().set_table_name('mycompartment:mytable')
...
create_statement = 'create table mycompartment:mytable(...)'
...
request = GetRequest().set_table_name('compartmentA.compartmentB')
- 目的のコンパートメント名またはIDを設定できます。
- デフォルトのコンパートメント(テナンシのルート・コンパートメント)を使用するには、空の文字列に設定します。
- ネストされたコンパートメントを使用する場合は、ルート・コンパートメントに対する相対的な完全なコンパートメント・パスをcompartmentIDとして指定します。たとえば、rootCompartment.compartmentA.compartmentBを使用する場合は、compartmentIDを
compartmentA.compartmentB
に設定する必要があります。 - コンパートメントOCIDを文字列値として使用することもできます。
compartmentID:="<optional-compartment-name-or-ID>"
iam.NewRawSignatureProvider(tenancy, user, region, fingerprint, compartmentID,
privateKey, &privateKeyPassphrase)
const NoSQLClient = require('oracle-nosqldb').NoSQLClient;
const client = new NoSQLClient({
region: Region.US_ASHBURN_1,
compartment: 'mycompartment'
});
文字列値は、コンパートメントID、コンパートメント名またはパスのいずれかです。単純な名前の場合は、トップレベルのコンパートメントを指定する必要があります。ネストされたコンパートメントへのパスである場合、最上位コンパートメントはテナンシから推測されるため、除外する必要があります。コンパートメントは、optionsオブジェクトの各リクエストで指定することもできます。この値は、初期構成値をオーバーライドします。
コンパートメントを指定しない場合、テナンシOCIDがデフォルトとして使用されます。これは、ユーザーのアイデンティティで認可する場合にのみ適用されます。インスタンス・プリンシパルまたはリソース・プリンシパルを使用する場合は、コンパートメントIDを指定する必要があります。
NoSQLConfig
のコンパートメント・プロパティを設定します。例:var client = new NoSQLClient(
new NoSQLConfig
{
Region=Region.US_ASHBURN_1,
Compartment="<compartment_ocid_or_name>"
});
文字列値は、コンパートメントOCID、コンパートメント名またはパスのいずれかです。単純な名前の場合は、トップレベルのコンパートメントを指定する必要があります。ネストされたコンパートメントへのパスである場合、最上位コンパートメントはテナンシから推測されるため、除外する必要があります。また、すべての操作オプション・クラスには、TableDDLOptions.Compartment
、GetOptions.Compartment
、PutOptions.Compartment
などのCompartment
プロパティがあります。したがって、どの操作でも比較を個別に指定することもできます。この値は、設定されている場合、NoSQLConfig
のコンパートメント値をオーバーライドします(ある場合)。
コンパートメントを指定しない場合、テナンシOCIDがデフォルトとして使用されます。これは、ユーザーのアイデンティティで認可する場合にのみ適用されます。インスタンス・プリンシパルまたはリソース・プリンシパルを使用する場合は、コンパートメントIDを指定する必要があります。
表および索引の作成
表および索引を作成する方法について学習します。
APIクラスおよびメソッドを使用して、表の作成、変更および削除などのすべてのDDL文を実行します。APIメソッドを使用して、表の制限を設定することもできます。
DDL文の例:
/* Create a new table called users */
CREATE TABLE IF NOT EXISTS users(id INTEGER,
name STRING,
PRIMARY KEY(id))
/* Create a new table called users and set the TTL value to 4 days */
CREATE TABLE IF NOT EXISTS users(id INTEGER,
name STRING,
PRIMARY KEY(id))
USING TTL 4 days
/* Create a new index called nameIdx on the name field in the users table */
CREATE INDEX IF NOT EXISTS nameIdx ON users(name)
次の例では、NoSQLハンドルの取得時に、デフォルトのコンパートメントがNoSQLHandleConfig
に指定されていると想定しています。 NoSQLハンドルの取得 を参照してください。NoSQL表のコンパートメントを指定する他のオプションを調べるには、コンパートメントについて を参照してください。
TableRequest
とそのメソッドを使用して表および索引を作成します。
/* Create a simple table with an integer key and a single json data
* field and set your desired table capacity.
* Set the table TTL value to 3 days.
*/
String createTableDDL = "CREATE TABLE IF NOT EXISTS users " +
"(id INTEGER, name STRING, " +
"PRIMARY KEY(id)) USING TTL 3 days";
/* Call the appropriate constructor for
* 1) Provisioned Capacity
* TableLimits limits = new TableLimits(50, 50, 25);
* 2) On-demand Capacity - only set storage limit
* TableLimits limits = new TableLimits( 5 );
* In this example, we will use Provisioned Capacity
*/
TableLimits limits = new TableLimits(50, 50, 25);
TableRequest treq = new TableRequest().setStatement(createTableDDL)
.setTableLimits(limits);
// start the asynchronous operation
TableResult tres = handle.tableRequest(treq);
// wait for completion of the operation
tres.waitForCompletion(handle,
60000, // wait for 60 sec
1000); // delay in ms for poll
// Create an index called nameIdx on the name field in the users table.
treq = new TableRequest().setStatement("CREATE INDEX
IF NOT EXISTS nameIdx ON users(name)
");
// start the asynchronous operation
handle.tableRequest(treq);
// wait for completion of the operation
tres.waitForCompletion(handle,
60000, // wait for 60 sec
1000); // delay in ms for poll
表のリストを検索します。
ListTablesRequest tablereq = new ListTablesRequest();
String [] tablelis = handle.listTables(tablereq).getTables();
if (tablelis.length == 0)
System.out.println("No tables avaiable");
else {
System.out.println("The tables available are");
for (int i=0;i< tablelis.length; i++) {
System.out.println(tablelis[i]);
}
}
GetTableRequest gettblreq = new GetTableRequest();
gettblreq.setTableName(tableName);
System.out.println("The schema details for the table is "
+ handle.getTable(gettblreq).getSchema());
borneo.TableRequest
クラスを使用して実行されます。borneo.NoSQLHandle.table_request()
へのすべてのコールは非同期であるため、結果を確認し、borneo.TableResult.wait_for_completion()
をコールして操作が完了するまで待機する必要があります。
#Create a simple table with an integer key and a single
#json data field and set your desired table capacity.
#Set the table TTL value to 3 days.
from borneo import TableLimits,
TableRequest statement = 'create table if not exists users(id integer,
name string,
' + 'primary key(id)
USING TTL 3 DAYS'
# In the Cloud Service TableLimits is a required object for table
#creation. It specifies the throughput and capacity for the table in
#ReadUnits, WriteUnits, GB
# Call the appropriate constructor for
# 1) Provisioned Capacity
# TableLimits(50, 50, 25);
# 2) On-demand Capacity - only set storage limit
# TableLimits( 25 );
# In this example, we will use Provisioned Capacity
request = TableRequest().set_statement(statement).
set_table_limits( TableLimits(50, 50, 25))
# assume that a handle has been created, as handle, make the request
#wait for 60 seconds, polling every 1 seconds
result = handle.do_table_request(request, 60000, 1000)
# the above call to do_table_request is equivalent to
# result = handle.table_request(request)
result.wait_for_completion(handle, 60000, 1000)
#Create an index called nameIdx on the name field in the users table.
request = TableRequest().set_statement("CREATE INDEX IF NOT EXISTS nameIdx
ON users(name)")
# assume that a handle has been created, as handle, make the request
#wait for 60 seconds, polling every 1 seconds
result = handle.do_table_request(request, 60000, 1000)
# the above call to do_table_request is equivalent to
# result = handle.table_request(request)
result.wait_for_completion(handle, 60000, 1000)
表のリストを検索します。
ltr = ListTablesRequest()
list(str)= handle.list_tables(ltr).getTables()
if list(str).len() = 0
print ("No tables available")
else
print('The tables available are: ' + list(str))
request = GetTableRequest().set_table_name(table_name)
result = handle.get_table(request)
print('The schema details for the table is: ' + result.get_schema())
// Create a simple table with an integer key and a single
// json data field and set your desired table capacity.
// Set the table TTL value to 3 days.
tableName := "users"
stmt := fmt.Sprintf("CREATE TABLE IF NOT EXISTS %s "+
"(id integer, name STRING, PRIMARY KEY(id) "+
"USING TTL 3 DAYS)", tableName)
// Call the appropriate constructor for
// 1) Provisioned Capacity
// &nosqldb.TableLimits(ReadUnits: 50, WriteUnits: 50, StorageGB: 25);
// 2) On-demand Capacity - only set storage limit
// &nosqldb.TableLimits(StorageGB: 25 );
// In this example, we will use Provisioned Capacity
tableReq := &nosqldb.TableRequest{
Statement: stmt,
TableLimits: &nosqldb.TableLimits{
ReadUnits: 50,
WriteUnits: 50,
StorageGB: 25,
},
}
tableRes, err := client.DoTableRequest(tableReq)
if err != nil {
fmt.Printf("cannot initiate CREATE TABLE request: %v\n", err)
return
}
_, err = tableRes.WaitForCompletion(client, 60*time.Second, time.Second)
if err != nil {
fmt.Printf("Error finishing CREATE TABLE request: %v\n", err)
return
}
fmt.Println("Created table ", tableName)
//Create an index called nameIdx on the name field in the users table
stmt_ind := fmt.Sprintf("CREATE INDEX IF NOT EXISTS nameIdx ON users(name)")
tableReq := &nosqldb.TableRequest{Statement: stmt_ind}
tableRes, err := client.DoTableRequest(tableReq)
if err != nil {
fmt.Printf("cannot initiate CREATE INDEX request: %v\n", err)
return
}
_, err = tableRes.WaitForCompletion(client, 60*time.Second, time.Second)
if err != nil {
fmt.Printf("Error finishing CREATE INDEX request: %v\n", err)
return
}
fmt.Println("Created index nameIdx ")
表のリストを検索します。
req := &nosqldb.ListTablesRequest{Timeout: 3 * time.Second,}
res, err := client.ListTables(req)
if len(res.Tables)== 0{
fmt.Printf("No tables in the given compartment"
return
}
fmt.Printf("The tables in the given compartment are:\n" )
for i, table := range res.Tables {
fmt.Printf(table)
}
req := &nosqldb.GetTableRequest{
TableName: table_name, Timeout: 3 * time.Second, }
res, err := client.GetTable(req)
fmt.Printf("The schema details for the table is:state=%s,
limits=%v\n", res.State,res.Limits)
表DDL文は、tableDDL
メソッドによって実行されます。NoSQLClient
クラスの他のほとんどのメソッドと同様に、このメソッドは非同期で、TableResult
のPromiseを返します。TableResult
は、TableState、名前、スキーマ、TableLimitなどのDDL操作のステータスを含むプレーンJavaScriptオブジェクトです。
tableDDL
メソッドは、2番目のオプション引数としてopopオブジェクトを取得します。表を作成するときは、opt引数の一部としてTableLimitsを指定する必要があります。TableLimitsでは、読取りユニット、書込みユニットおよびギガバイトのストレージの量として、表の最大スループットおよびストレージ容量を指定します。
tableDDL
メソッドは、基礎となるストア内の指定されたDDL操作のみを起動し、その完了を待機しないことに注意してください。結果のTableResult
は、多くの場合、TableState.CREATING
、TableState.DROPPING
、TableState.UPDATING
などの中間表の状態のいずれかになります(後者は、表がALTER TABLE文による変更処理中、表の制限が変更中、またはその索引の1つが作成または削除されている場合に発生します)。
TableState.ACTIVE
またはTableState.DROPPED
(DDL操作がDROP TABLEの場合は後者)に変更されます。const NoSQLClient = require('oracle-nosqldb').NoSQLClient;
const TableState = require('oracle-nosqldb').TableState;
const client = new NoSQLClient('config.json');
async function createUsersTable() {
try {
const statement = 'CREATE TABLE IF NOT EXISTS users(id INTEGER, ' +
'name STRING, PRIMARY KEY(id))';
// Call the appropriate constructor for
// 1) Provisioned Capacity
// tableLimits: {readUnits: 50, writeUnits: 50, storageGB: 25);
// 2) On-demand Capacity - only set storage limit
// tableLimits: {storageGB: 25 );
// In this example, we will use Provisioned Capacity
let result = await client.tableDDL(statement, {
tableLimits: {
readUnits: 50,
writeUnits: 50,
storageGB: 25
}
});
result = await client.forCompletion(result);
console.log('Table users created');
} catch(error) {
//handle errors
}
}
const statement = 'CREATE TABLE IF NOT EXISTS users(id INTEGER, ' +
'name STRING, PRIMARY KEY(id))';
// Call the appropriate constructor for
// 1) Provisioned Capacity
// tableLimits: {readUnits: 50, writeUnits: 50, storageGB: 25);
// 2) On-demand Capacity - only set storage limit
// tableLimits: {storageGB: 25 );
// In this example, we will use Provisioned Capacity
let result = await client.tableDDL(statement, {
tableLimits: {
readUnits: 50,
writeUnits: 50,
storageGB: 25
},
complete: true
});
console.log('Table users created');
CREATE TABLE以外のDDL操作にTableLimits
を指定する必要はありません。また、setTableLimits
メソッドをコールして表の作成後に表の制限を変更することもできます。また、tableDDL
によって開始された操作の完了を待機する場合と同様に、操作の完了を待機する必要もあります。
// Create an index called nameIdx on the name field in the users table.
try {
const statement = 'CREATE INDEX IF NOT EXISTS nameIdx ON users(name))';
let result = await client.tableDDL(statement);
result = await client.forCompletion(result);
console.log('Index nameIdx created');
} catch(error){
//handle errors
}
表のリストを検索します。
let varListTablesResult = await client.listTables();
console.log("The tables in the given compartment are:")
{res.send(varListTablesResult)}
let resExistingTab = await client.getTable(tablename);
{ await client.forCompletion(resExistingTab);}
console.log("The schema details for the table is:")
{ res.send(resExistingTab.schema)}
表を作成し、表の作成、変更および削除、索引の作成および削除などの他のデータ定義言語(DDL)文を実行するには、メソッドExecuteTableDDLAsync
およびExecuteTableDDLWithCompletionAsync
を使用します。メソッドExecuteTableDDLAsync
およびExecuteTableDDLWithCompletionAsync
は、Task<TableResult>
を返します。TableResultインスタンスには、TableState、表スキーマ、TableLimitsなどのDDL操作のステータスが含まれます。これらの各メソッドには、複数のオーバーロードが付属しています。特に、DDL操作のオプションをTableDDLOptions
として渡すことができます。
TableDDLOptions
のTableLimits
プロパティとして表の制限を渡すことができます。これらは、実行に時間がかかる可能性があることに注意してください。メソッドExecuteTableDDLAsync
は、サービスによって指定されたDDL操作のみを起動し、その完了を待機しません。戻されたTableResultインスタンスでWaitForCompletionAsync
をコールすると、表DDL操作の完了を非同期で待機できます。var client = new NoSQLClient("config.json");
try {
var statement = "CREATE TABLE IF NOT EXISTS users(id INTEGER,"
+ "name STRING, PRIMARY KEY(id))";
// Call the appropriate constructor for
// 1) Provisioned Capacity
// new TableLimits(50, 50, 25);
// 2) On-demand Capacity - only set storage limit
// new TableLimits( 25 );
// In this example, we will use Provisioned Capacity
var result = await client.ExecuteTableDDLAsync(statement, new
TableLimits(50, 50, 25));
await result.WaitForCompletionAsync();
Console.WriteLine("Table users created.");
} catch(Exception ex) {
// handle exceptions
}
WaitForCompletionAsync
は、操作の完了を反映するようにコール元のTableResultインスタンスを変更します。
ExecuteTableDDLWithCompletionAsync
を使用することもできます。try-catchブロック内の文を次のように置き換えます。var statement = "CREATE TABLE IF NOT EXISTS users(id INTEGER,"
+ "name STRING, PRIMARY KEY(id))";
// Call the appropriate constructor for
// 1) Provisioned Capacity
// new TableLimits(50, 50, 25);
// 2) On-demand Capacity - only set storage limit
// new TableLimits(25 );
// In this example, we will use Provisioned Capacity
await client.ExecuteTableDDLWithCompletionAsync(statement,
new TableLimits(50, 50, 25));
Console.WriteLine("Table users created.");
CREATE TABLE以外のDDL操作にTableLimitsを指定する必要はありません。SetTableLimitsAsync
またはSetTableLimitsWithCompletionAsync
メソッドをコールして、既存の表の表制限を変更することもできます。
表のリストを検索します。
varresult = await client.ListTablesAsync();
console.WriteLine("The tables in the given compartment are:")
foreach(var tableName inresult.TableNames){
Console.WriteLine(tableName);
}
関連トピック