使用 API 建立單一表格
表格是存放使用者資料的基本結構。您可以使用 SQL 命令 (CREATE TABLE
敘述句) 或 TableRequest
API 命令來建立新表格。
您也可以使用 Oracle NoSQL Cloud Infrastructure (OCI) 主控台或 OCI 命令行介面 (OCI-cli) 在 NDCS 中建立表格。
- 表格定義必須至少包含一個欄位定義與一個主索引鍵定義。如需主索引鍵定義的詳細資訊,請參閱建立表格。
- 欄位定義會指定資料欄的名稱、其資料類型、資料欄是否可為空值、選擇性預設值、資料欄是否為 IDENTITY 資料欄及選擇性註解。依預設,所有欄位 (PRIMARY KEY 除外) 都可為空值。
- 主索引鍵設定 (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
表格,其中包含來自 TV 串流應用程式的資料。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
類別是用來建立表格。此要求所指定的作業執行非同步。這些作業可能會長時間執行。TableResult
會從 TableRequest
作業傳回,並且會封裝表格的狀態。請參閱 Oracle NoSQL Java SDK API Reference ,瞭解 TableRequest 類別及其方法的詳細資訊。
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()
以等待作業完成。請參閱 Oracle NoSQL Python SDK API Reference ,瞭解 table_request
及其方法的詳細資訊。
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)。
- 因為子項表格繼承父項表格的限制,所以未明確設定表格限制。
Download the full code TableJoins.py from the examples here.
TableRequest
類別是用來建立表格。TableRequest
指定的作業執行非同步。這些作業可能會長時間執行。此要求是用來作為 Client.DoTableRequest()
作業的輸入,它會傳回可用來輪詢的 TableResult
,直到表格達到所需的狀態為止。請參閱 Oracle NoSQL Go SDK API Reference ,瞭解 TableRequest
類別各種方法的詳細資訊。
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)。
- 因為子項表格繼承父項表格的限制,所以未明確設定表格限制。
Download the full code TableJoins.go from the examples here.
您可以使用 tableDDL
方法建立表格。此方法為非同步,而且會傳回 TableResult
的 Promise。TableResult
是包含 DDL 作業狀態的純 JavaScript 物件,例如其 TableState、名稱、綱要及其 TableLimits。如需方法詳細資訊,請參閱 NoSQLClient 類別。
tableDDL
方法採用 TableDDLOpt 物件作為第二個選擇性引數。建立表格時,您必須指定其 TableLimits
作為 opt 引數的一部分。TableLimits
指定表格的最大傳輸量和儲存容量作為讀取單位、寫入單位和儲存 GB 的大小。
Download the full JavaScript code CreateTable.js from the examples here and the full TypeScript code CreateTable.ts from the examples here.
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)
- 因為子項表格繼承父項表格的限制,所以未明確設定表格限制。
Download the full JavaScript code TableJoins.js from the examples here and the full TypeScript code TableJoins.ts from the examples here.
若要建立表格,請使用 ExecuteTableDDLAsync
或 ExecuteTableDDLWithCompletionAsync
方法。這兩種方法都會傳回 Task<TableResult>
。TableResult
執行處理包含 DDL 作業的狀態,例如 TableState 和表格綱要。如需這些方法的詳細資訊,請參閱 Oracle NoSQL Dotnet SDK API Reference 。
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)
- 因為子項表格繼承父項表格的限制,所以未明確設定表格限制。
Download the full code TableJoins.cs from the examples here.