TableRequest APIの使用

TableRequest APIを使用して、NoSQL表を作成できます。

TableRequestクラスは、表を作成するために使用します。このリクエストで指定された操作の実行は非同期です。これらは、長時間実行される可能性がある操作です。TableResultは、TableRequest操作から返され、表の状態をカプセル化します。TableRequestクラスおよびそのメソッドの詳細は、Oracle NoSQL Java SDK APIリファレンスを参照してください。

こちらにあるサンプルの中からフル・コードCreateTable.javaをダウンロードします。
private static void createTab(NoSQLHandle handle) throws Exception {
   String createTableDDL = 
   "CREATE TABLE IF NOT EXISTS " + tableName +
                               "(acct_Id INTEGER," +
                               "profile_name STRING," +
                               "account_expiry TIMESTAMP(1) ," +
                               "acct_data JSON, " +
                               "PRIMARY KEY(acct_Id))";

   TableLimits limits = new TableLimits(20, 20, 1);
   TableRequest treq = new TableRequest()
          .setStatement(createTableDDL)
          .setTableLimits(limits);
   TableResult tres = handle.tableRequest(treq);
   /* The request is async,
    * so wait for the table to become active.
    */
    tres.waitForCompletion(handle, 60000,1000); 
    System.out.println("Created Table: " + tableName);
}

ノート:

表の制限は、Oracle NoSQL Database Cloud Serviceの場合のみ適用されます。オンプレミスのNoSQL Databaseの場合に制限が設定されていると、それらは暗黙的に無視されます。

子表の作成:同じTableRequestクラスおよびメソッドを使用して、DDL文を実行して子表を作成します。

子表の作成中:
  • 表のフルネーム(name_parent_table.name_child_table)を指定する必要があります
  • 子表が親表の制限を継承するため、表の制限を明示的に設定する必要はありません。

親子表の作成方法を理解するには、こちらでサンプルの中からフル・コードTableJoins.javaをダウンロードします。

JSONコレクション表の作成: JSONコレクション表には、1つ以上の主キー・フィールドおよびJSONフィールドを含むドキュメントが含まれます。次のように、JSONコレクション表を作成します。
/* Create a JSON collection table with an integer primary key*/ 

private static void createTable(NoSQLHandle handle) throws Exception {

String createTableDDL = "CREATE TABLE IF NOT EXISTS " + usersJSON + "(id INTEGER," + "PRIMARY KEY(id)) AS JSON COLLECTION";

  TableRequest treq = new TableRequest().setStatement(createTableDDL);

  System.out.println("Creating table");
  TableResult tres = handle.tableRequest(treq);

/* The table request is asynchronous, so wait for the table to become active.*/ 

  TableResult.waitForState(handle, tres.getTableName(), TableResult.State.ACTIVE, 60000, 1000);
}

borneo.TableRequestクラスは、表を作成するために使用します。borneo.NoSQLHandle.table_request()へのすべてのコールは非同期であるため、結果を確認し、borneo.TableResult.wait_for_completion()をコールして操作が完了するまで待機する必要があります。table_requestとそのメソッドの詳細は、Oracle NoSQL Python SDK APIリファレンスを参照してください。

こちらにあるサンプルの中からフル・コードCreateTable.pyをダウンロードします。
def create_table(handle):
  statement = '''create table if not exists 
              stream_acct (acct_Id INTEGER,
                           profile_name STRING,
                           account_expiry TIMESTAMP(1),
                           acct_data JSON,
                           primary key(acct_Id))'''

    request = TableRequest().set_statement(statement)
                            .set_table_limits(TableLimits(20, 10, 1))

    table_result = handle.do_table_request(request, 40000, 3000)
    table_result.wait_for_completion(handle, 40000, 3000)

    if (table_result.get_state() == State.ACTIVE):
        print('Created table: stream_acct')
    else:
        raise NameError('Table stream_acct is in an unexpected state ' + 
                             str(table_result.get_state()))

ノート:

表の制限は、Oracle NoSQL Database Cloud Serviceの場合のみ適用されます。オンプレミスのNoSQL Databaseの場合に制限が設定されていると、それらは暗黙的に無視されます。

子表の作成:同じTableRequestクラスおよびメソッドを使用して、DDL文を実行して子表を作成します。

子表の作成中:
  • 表のフルネーム(name_parent_table.name_child_table)を指定する必要があります。
  • 子表が親表の制限を継承するため、表の制限を明示的に設定する必要はありません。

こちらにあるサンプルの中からフル・コードTableJoins.py をダウンロードします。

JSONコレクション表の作成: JSONコレクション表には、1つ以上の主キー・フィールドおよびJSONフィールドを含むドキュメントが含まれます。次のように、JSONコレクション表を作成します。
/* Create a JSON collection table with an integer primary key */  
statement = 'create table if not exists usersJSON(id integer,' + 'primary key(id)) AS JSON COLLECTION'
print('Creating table: ' + statement)                                                

request = TableRequest().set_statement(statement)


/* assume that a handle has been created, as the handle, make the request */
/* wait for 60 seconds, polling every 1 seconds */
result = handle.do_table_request(request, 60000, 1000) 
result.wait_for_completion(handle, 60000, 1000)

TableRequestクラスは、表を作成するために使用します。TableRequestで指定された操作の実行は非同期です。これらは、長時間実行される可能性がある操作です。このリクエストは、Client.DoTableRequest()操作の入力として使用されます。これにより、表が目的の状態に達するまでポーリングするために使用できる、TableResultが返されます。TableRequestクラスの様々なメソッドの詳細は、Oracle NoSQL Go SDK APIリファレンスを参照してください。

こちらにあるサンプルの中からフル・コードCreateTable.goをダウンロードします。
func createTable(client *nosqldb.Client, err error, tableName string)(){
// Creates a table
 stmt := fmt.Sprintf("CREATE TABLE IF NOT EXISTS %s ("+
     	"acct_Id INTEGER," +
     	"profile_name STRING," +
     	"account_expiry TIMESTAMP(1) ," +
     	"acct_data JSON, " +
     	"PRIMARY KEY(acct_Id))",tableName)

 tableReq := &nosqldb.TableRequest{
		Statement: stmt,
		TableLimits: &nosqldb.TableLimits{
			ReadUnits:  20,
			WriteUnits: 20,
			StorageGB:  1,
              },
 }

 tableRes, err := client.DoTableRequest(tableReq)
 if err != nil {
    fmt.Printf("cannot initiate CREATE TABLE request: %v\n", err)
    return
 }
 // The create table request is asynchronous, 
 // wait for table creation to complete.
 _, 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)
 return
}

ノート:

表の制限は、Oracle NoSQL Database Cloud Serviceの場合のみ適用されます。オンプレミスのNoSQL Databaseの場合に制限が設定されていると、それらは暗黙的に無視されます。

子表の作成:同じTableRequestクラスおよびメソッドを使用して、DDL文を実行して子表を作成します。

子表の作成中:
  • 表のフルネーム(name_parent_table.name_child_table)を指定する必要があります。
  • 子表が親表の制限を継承するため、表の制限を明示的に設定する必要はありません。

こちらにあるサンプルの中からフル・コードTableJoins.goをダウンロードします。

JSONコレクション表の作成: JSONコレクション表には、1つ以上の主キー・フィールドおよびJSONフィールドを含むドキュメントが含まれます。次のように、JSONコレクション表を作成します。
/* Create a JSON collection table with an integer primary key with a TTL of 3 days*/
tableName := "usersJSON"
stmt := fmt.Sprintf("CREATE TABLE IF NOT EXISTS %s "+
    "(id integer, PRIMARY KEY(id)) "+
    "AS JSON COLLECTION USING TTL 3 DAYS", tableName)

tableReq := &nosqldb.TableRequest{
    Statement: stmt, }
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)

tableDDLメソッドを使用して表を作成できます。このメソッドは非同期です。このメソッドでは、TableResultのPromiseが返されます。TableResultは、DDL操作のステータス(そのTableState、名前、スキーマ、そのTableLimitsなど)を含むプレーンなJavaScriptオブジェクトです。メソッドの詳細は、NoSQLClientクラスを参照してください。

こちらにあるサンプルの中からJavaScriptフル・コードCreateTable.jsを、こちらにあるサンプルの中からTypeScriptフル・コード CreateTable.tsをダウンロードします。

import { NoSQLClient, ServiceType } from 'oracle-nosqldb';
const client = new NoSQLClient('config.json');
const TABLE_NAME = 'stream_acct;
async function createTable(handle) {
  const createDDL = `CREATE TABLE IF NOT EXISTS 
                  ${TABLE_NAME} (acct_Id INTEGER,
                                 profile_name STRING,
                                 account_expiry TIMESTAMP(1),
                                 acct_data JSON,
                                 primary key(acct_Id))`;
  let res =  await handle.tableDDL(createDDL, {
             complete: true }
  );
  console.log('Created table: ' + TABLE_NAME);
}
前述のコールが返されると、結果にその操作の最終状態が反映されます。または、完全なオプションを使用するには、前述のtry-catchブロック内のコードを次のコード・サンプルに置き換えます。
const createDDL = `CREATE TABLE IF NOT EXISTS 
                  ${TABLE_NAME} (acct_Id INTEGER,
                                 profile_name STRING,
                                 account_expiry TIMESTAMP(1),
                                 acct_data JSON,
                                 primary key(acct_Id))`;
 let res =  await client.tableDDL(createDDL, {complete: true,});
console.log('Created table: ' + TABLE_NAME);

子表の作成:同じTableRequestクラスおよびメソッドを使用して、DDL文を実行して子表を作成します。

子表の作成中:
  • 表のフルネーム(name_parent_table.name_child_table)を指定する必要があります
  • 子表が親表の制限を継承するため、表の制限を明示的に設定する必要はありません。

こちらにあるサンプルの中からJavaScriptフル・コードTableJoins.jsを、こちらにあるサンプルの中からTypeScriptフル・コードTableJoins.tsをダウンロードします。

JSONコレクション表の作成: JSONコレクション表には、1つ以上の主キー・フィールドおよびJSONフィールドを含むドキュメントが含まれます。次のように、JSONコレクション表を作成します。
import { NoSQLClient, ServiceType } from 'oracle-nosqldb';
const client = new NoSQLClient('config.json');

/* Create a JSON collection table with an integer primary key */
const TABLE_NAME = 'usersJSON';
async function createTable() {

    const createDDL = `CREATE TABLE IF NOT EXISTS ${TABLE_NAME} (id INTEGER, PRIMARY KEY(id)) AS JSON COLLECTION`;
    console.log('Create table: ' + createDDL);

        let res =  await client.tableDDL(createDDL, {
            complete: true,
        });
}

表を作成するには、メソッドExecuteTableDDLAsyncまたはExecuteTableDDLWithCompletionAsyncを使用します。これら両方のメソッドで、Task<TableResult>が返されます。TableResultインスタンスには、DDL操作のステータス(TableStateや表スキーマなど)が含まれます。これらのメソッドの詳細は、Oracle NoSQL Dotnet SDK APIリファレンスを参照してください。

こちらにあるサンプルの中からフル・コードCreateTable.csをダウンロードします。
private static async Task createTable(NoSQLClient client){
// Create a table
  var sql =
    $@"CREATE TABLE IF NOT EXISTS 
         {TableName}(acct_Id INTEGER,
                     profile_name STRING,
                     account_expiry TIMESTAMP(1),
                     acct_data JSON,
                     primary key(acct_Id))";
  var tableResult = await client.ExecuteTableDDLAsync(sql,
    new TableDDLOptions{TableLimits = new TableLimits(20, 20, 1)});

  // Wait for the operation completion
  await tableResult.WaitForCompletionAsync();
  Console.WriteLine("  Created table: ",tableResult.TableName);  
}

ノート:

表の制限は、Oracle NoSQL Database Cloud Serviceの場合のみ適用されます。オンプレミスのNoSQL Databaseの場合に制限が設定されていると、それらは暗黙的に無視されます。

子表の作成:同じTableRequestクラスおよびメソッドを使用して、DDL文を実行して子表を作成します。

子表の作成中:
  • 表のフルネーム(name_parent_table.name_child_table)を指定する必要があります
  • 子表が親表の制限を継承するため、表の制限を明示的に設定する必要はありません。

こちらにあるサンプルの中からフル・コードTableJoins.csをダウンロードします。

JSONコレクション表の作成: JSONコレクション表には、1つ以上の主キー・フィールドおよびJSONフィールドを含むドキュメントが含まれます。次のように、JSONコレクション表を作成します。
/* Create a JSON collection table with an integer primary key */

var client = new NoSQLClient("config.json");
try { 
  var statement = "CREATE TABLE IF NOT EXISTS usersJSON(id INTEGER,"
    + "PRIMARY KEY(id)) AS JSON COLLECTION";

var result = await client.ExecuteTableDDLAsync(statement);
  await result.WaitForCompletionAsync(); 
  Console.WriteLine("Table users created."); 
} catch(Exception ex) {
   // handle exceptions
}