APIを使用したシングルトン表の作成
表は、ユーザー・データを保持するための基本構造です。新しい表を作成するには、SQLコマンド(CREATE TABLE
文)またはTableRequest
APIコマンドを使用します。
Oracle NoSQL Cloud Infrastructure(OCI)コンソールまたはOCIコマンドライン・インタフェース(OCI-cli)を使用して、NDCSで表を作成することもできます。
- 表定義には、少なくとも1つのフィールド定義と、主キー定義を1つのみ含める必要があります。主キー定義の詳細は、表の作成を参照してください。
- フィールド定義は、カラムの名前、データ型、カラムがNULL可能かどうか、オプションのデフォルト値、およびカラムがIDENTITYカラムとオプションのコメントであるかどうかを指定します。デフォルトでは、すべてのフィールド(PRIMARY KEY以外)はNULL値可能です。
- 主キー仕様の構文(key_definition)は、表の主キー列をフィールド名のリストとして指定します。
- 稼働時間(TTL)値は、行の有効期限を計算するために使用されます。期限切れの行は問合せ結果に含まれず、最終的にはOracle NoSQL Databaseによって表から自動的に削除されます。テーブルの作成中にTTL値を指定すると、このテーブルに挿入されるすべての行のデフォルトのTTLとして適用されます。
SQLコマンドの使用
SQLでCREATE TABLEコマンドを使用して、NoSQL表を作成できます。
BaggageInfo
テーブルを定義します。CREATE TABLE BaggageInfo (
ticketNo LONG,
fullName STRING,
gender STRING,
contactPhone STRING,
confNo STRING,
bagInfo JSON,
PRIMARY KEY (ticketNo)
)
stream_acct
表を定義します。CREATE TABLE stream_acct(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(1),
acct_data JSON,
PRIMARY KEY(acct_id)
)
stream_acct_new
表を定義します。表の行は2日で失効します。CREATE TABLE stream_acct_new(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(1),
acct_data JSON,
PRIMARY KEY(acct_id)) USING TTL 2 days
関連項目
TableRequest APIの使用
TableRequest APIを使用して、NoSQL表を作成できます。
TableRequest
クラスは、表の作成に使用されます。このリクエストで指定された操作の実行は非同期です。これらは長時間実行される可能性があります。TableRequest
操作からTableResult
が返され、表の状態がカプセル化されます。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データベースに制限が設定されている場合は、暗黙的に無視されます。子表の作成:同じTableRequest
クラスおよびメソッドを使用して、DDL文を実行して子表を作成します。
- 表のフルネーム(name_parent_table.name_child_table)を指定する必要があります。
- 子テーブルが親テーブルの制限を継承するため、テーブルの制限を明示的に設定する必要はありません。
ここで親子表の作成方法を理解するには、サンプルから完全なコードTableJoins.javaをダウンロードします。
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データベースに制限が設定されている場合は、暗黙的に無視されます。子表の作成:同じTableRequest
クラスおよびメソッドを使用して、DDL文を実行して子表を作成します。
- 表のフルネーム(name_parent_table.name_child_table)を指定する必要があります。
- 子テーブルが親テーブルの制限を継承するため、テーブルの制限を明示的に設定する必要はありません。
ここの例からフル・コードTableJoins.py をダウンロードします。
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データベースに制限が設定されている場合は、暗黙的に無視されます。子表の作成:同じTableRequest
クラスおよびメソッドを使用して、DDL文を実行して子表を作成します。
- 表のフルネーム(name_parent_table.name_child_table)を指定する必要があります。
- 子テーブルが親テーブルの制限を継承するため、テーブルの制限を明示的に設定する必要はありません。
ここの例からフル・コードTableJoins.goをダウンロードします。
tableDDL
メソッドを使用して表を作成できます。このメソッドは非同期で、TableResult
のPromiseを返します。TableResult
は、TableState、名前、スキーマ、TableLimitsなどのDDL操作のステータスを含むプレーンJavaScriptオブジェクトです。メソッドの詳細は、NoSQLClientクラスを参照してください。
tableDDL
メソッドは、2番目のオプションの引数としてTableDDLOptオブジェクトを取ります。表を作成する場合は、opt引数の一部としてTableLimits
を指定する必要があります。TableLimits
は、読取りユニット、書込みユニットおよびストレージのギガバイトの量として、表の最大スループットおよびストレージ容量を指定します。
CreateTable.jsのすべてのJavaScriptコードをここの例からダウンロードし、完全なTypeScriptコードCreateTable.tsをここの例からダウンロードします。
import {NoSQLClient, TableState } 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))`;
/* For Provisioned Capacity specify read units, write units, and storage limit as shown below*/
/* For On-demand Capacity - set only the storage limit and specify the mode as shown here.
* { storageGB: 25, mode: CapacityMode.ON_DEMAND };
*/
let res = await handle.tableDDL(createDDL, {
complete: true,
tableLimits: {
readUnits: 20,
writeUnits: 20,
storageGB: 1
}
});
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)を指定する必要があります。
- 子テーブルが親テーブルの制限を継承するため、テーブルの制限を明示的に設定する必要はありません。
TableJoins.jsのすべてのJavaScriptコードをここの例からダウンロードし、完全なTypeScriptコードTableJoins.tsをここの例からダウンロードします。
表を作成するには、メソッドExecuteTableDDLAsync
またはExecuteTableDDLWithCompletionAsync
のいずれかを使用します。これらのメソッドはどちらもTask<TableResult>
を返します。TableResult
インスタンスには、TableStateなどのDDL操作および表スキーマのステータスが含まれます。これらのメソッドの詳細は、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データベースに制限が設定されている場合は、暗黙的に無視されます。子表の作成:同じTableRequest
クラスおよびメソッドを使用して、DDL文を実行して子表を作成します。
- 表のフルネーム(name_parent_table.name_child_table)を指定する必要があります。
- 子テーブルが親テーブルの制限を継承するため、テーブルの制限を明示的に設定する必要はありません。
ここの例からフル・コードTableJoins.csをダウンロードします。