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