使用 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 表格。

範例 1:下列 CREATE TABLE 陳述式定義 BaggageInfo 表格,其中包含航空公司系統中乘客的行李資訊。
CREATE TABLE BaggageInfo (
ticketNo LONG,
fullName STRING,
gender STRING,
contactPhone STRING,
confNo STRING,
bagInfo JSON,
PRIMARY KEY (ticketNo)
)
範例 2:下列 CREATE TABLE 陳述式定義 stream_acct 表格,其中包含來自 TV 串流應用程式的資料。
CREATE TABLE stream_acct(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(1),
acct_data JSON, 
PRIMARY KEY(acct_id)
)
範例 3:下列 CREATE TABLE 陳述式定義 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 類別及其方法的詳細資訊。

Download the full code CreateTable.java from the examples here.
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 及其方法的詳細資訊。

Download the full code CreateTable.py from the examples here.
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 類別各種方法的詳細資訊。

Download the full code CreateTable.go from the examples here.
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);
}
在上述呼叫傳回後,結果將反映作業的最終狀態。或者,您也可以使用完整選項,將上述 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)
  • 因為子項表格繼承父項表格的限制,所以未明確設定表格限制。

Download the full JavaScript code TableJoins.js from the examples here and the full TypeScript code TableJoins.ts from the examples here.

若要建立表格,請使用 ExecuteTableDDLAsyncExecuteTableDDLWithCompletionAsync 方法。這兩種方法都會傳回 Task<TableResult>TableResult 執行處理包含 DDL 作業的狀態,例如 TableState 和表格綱要。如需這些方法的詳細資訊,請參閱 Oracle NoSQL Dotnet SDK API Reference

Download the full code CreateTable.cs from the examples here.
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.