Singleton-Tabellen mit APIs erstellen

Die Tabelle ist die grundlegende Struktur für Benutzerdaten. Mit einem SQL-Befehl (CREATE TABLE-Anweisung) oder TableRequest-API-Befehlen können Sie eine neue Tabelle erstellen.

Sie können auch die Oracle NoSQL Cloud Infrastructure-(OCI-)Konsole oder die OCI-Befehlszeilenschnittstelle (OCI-cli) verwenden, um eine Tabelle in NDCS zu erstellen.

Richtlinien zum Erstellen einer Tabelle:
  • Die Tabellendefinition muss mindestens eine Felddefinition und genau eine Primärschlüsseldefinition enthalten. Weitere Informationen zur Primärschlüsseldefinition finden Sie unter Tabelle erstellen.
  • Die Felddefinition gibt den Namen der Spalte, ihren Datentyp, ob die Spalte auf Null gesetzt werden kann oder nicht, einen optionalen Standardwert an, unabhängig davon, ob die Spalte eine IDENTITY-Spalte und ein optionaler Kommentar ist. Alle Felder (außer dem PRIMARY KEY) können standardmäßig auf Null gesetzt werden.
  • Die Syntax für die Primärschlüsselspezifikation (key_definition) gibt die Primärschlüsselspalten der Tabelle als geordnete Liste mit Feldnamen an.
  • Der Time-to-Live-(TTL-)Wert wird zur Berechnung der Ablaufzeit einer Zeile verwendet. Abgelaufene Zeilen werden nicht in die Abfrageergebnisse aufgenommen und schließlich von Oracle NoSQL Database automatisch aus der Tabelle entfernt. Wenn Sie beim Erstellen der Tabelle einen TTL-Wert angeben, gilt dieser als Standard-TTL für jede in diese Tabelle eingefügte Zeile.

SQL-Befehle verwenden

Sie können den Befehl CREATE TABLE in SQL verwenden, um NoSQL-Tabellen zu erstellen.

Beispiel 1: Die folgende CREATE TABLE-Anweisung definiert eine Tabelle BaggageInfo, die Gepäckinformationen von Passagieren in einem Airline-System enthält.
CREATE TABLE BaggageInfo (
ticketNo LONG,
fullName STRING,
gender STRING,
contactPhone STRING,
confNo STRING,
bagInfo JSON,
PRIMARY KEY (ticketNo)
)
Beispiel 2: Die folgende CREATE TABLE-Anweisung definiert eine Tabelle stream_acct, die Daten aus einer TV-Streaminganwendung enthält.
CREATE TABLE stream_acct(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(1),
acct_data JSON, 
PRIMARY KEY(acct_id)
)
Beispiel 3: Die folgende CREATE TABLE-Anweisung definiert eine stream_acct_new -Tabelle, die Daten aus einer TV-Streaminganwendung enthält. Die Zeilen der Tabelle laufen in 2 Tagen ab.
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

API TableRequest verwenden

Mit der API TableRequest können Sie NoSQL-Tabellen erstellen.

Mit der Klasse TableRequest werden Tabellen erstellt. Die Ausführung der von dieser Anforderung angegebenen Vorgänge ist asynchron. Dies sind möglicherweise Operationen mit langer Ausführungszeit. TableResult wird von TableRequest-Vorgängen zurückgegeben und kapselt den Status der Tabelle. Weitere Informationen zur Klasse TableRequest und ihren Methoden finden Sie unter Oracle NoSQL Java-SDK-API-Referenz.

Laden Sie den vollständigen Code CreateTable.java aus den Beispielen hier herunter.
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);
}

Hinweis:

Tabellenlimits gelten nur für Oracle NoSQL Database Cloud Service. Wenn Limits für eine On-Premise-Datenbank NoSQL festgelegt sind, werden sie stillschweigend ignoriert.

Untergeordnete Tabelle erstellen: Sie verwenden dieselbe TableRequest-Klasse und dieselben Methoden, um eine DDL-Anweisung auszuführen und eine untergeordnete Tabelle zu erstellen.

Beim Erstellen einer untergeordneten Tabelle:
  • Sie müssen den vollständigen Namen der Tabelle angeben (name_parent_table.name_child_table)
  • Tabellenlimits müssen nicht explizit festgelegt werden, da eine untergeordnete Tabelle die Grenzen einer übergeordneten Tabelle erbt.

Laden Sie den vollständigen Code TableJoins.java aus den Beispielen herunter, um hier zu erfahren, wie Sie eine Tabelle mit übergeordneten/untergeordneten Elementen erstellen.

Mit der Klasse borneo.TableRequest wird eine Tabelle erstellt. Alle Aufrufe von borneo.NoSQLHandle.table_request() sind asynchron. Daher müssen Sie das Ergebnis prüfen und borneo.TableResult.wait_for_completion() aufrufen, um auf den Abschluss des Vorgangs zu warten. Weitere Informationen zu table_request und den zugehörigen Methoden finden Sie unter Oracle NoSQL Python-SDK-API-Referenz.

Laden Sie den vollständigen Code CreateTable.py aus den Beispielen hier herunter.
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()))

Hinweis:

Tabellenlimits gelten nur für Oracle NoSQL Database Cloud Service. Wenn Limits für eine On-Premise-Datenbank NoSQL festgelegt sind, werden sie stillschweigend ignoriert.

Untergeordnete Tabelle erstellen: Sie verwenden dieselbe TableRequest-Klasse und dieselben Methoden, um eine DDL-Anweisung auszuführen und eine untergeordnete Tabelle zu erstellen.

Beim Erstellen einer untergeordneten Tabelle:
  • Sie müssen den vollständigen Namen der Tabelle (name_parent_table.name_child_table) angeben.
  • Tabellenlimits müssen nicht explizit festgelegt werden, da eine untergeordnete Tabelle die Grenzen einer übergeordneten Tabelle erbt.

Laden Sie den vollständigen Code TableJoins.py aus den Beispielen hier herunter.

Mit der Klasse TableRequest wird eine Tabelle erstellt. Die Ausführung von Vorgängen, die mit TableRequest angegeben werden, ist asynchron. Dies sind möglicherweise Operationen mit langer Ausführungszeit. Diese Anforderung wird als Eingabe eines Client.DoTableRequest()-Vorgangs verwendet, der eine TableResult zurückgibt, die zum Polling verwendet werden kann, bis die Tabelle den gewünschten Status erreicht. Weitere Informationen zu den verschiedenen Methoden der Klasse TableRequest finden Sie in der Oracle NoSQL Go-SDK-API-Referenz.

Laden Sie den vollständigen Code CreateTable.go aus den Beispielen hier herunter.
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
}

Hinweis:

Tabellenlimits gelten nur für Oracle NoSQL Database Cloud Service. Wenn Limits für eine On-Premise-Datenbank NoSQL festgelegt sind, werden sie stillschweigend ignoriert.

Untergeordnete Tabelle erstellen: Sie verwenden dieselbe TableRequest-Klasse und dieselben Methoden, um eine DDL-Anweisung auszuführen und eine untergeordnete Tabelle zu erstellen.

Beim Erstellen einer untergeordneten Tabelle:
  • Sie müssen den vollständigen Namen der Tabelle (name_parent_table.name_child_table) angeben.
  • Tabellenlimits müssen nicht explizit festgelegt werden, da eine untergeordnete Tabelle die Grenzen einer übergeordneten Tabelle erbt.

Laden Sie den vollständigen Code TableJoins.go aus den Beispielen hier herunter.

Sie können eine Tabelle mit der Methode tableDDL erstellen. Diese Methode ist asynchron und gibt eine Zusage von TableResult zurück. TableResult ist ein einfaches JavaScript-Objekt, das den Status des DDL-Vorgangs enthält, wie TableState, Name, Schema und TableLimits. Details zur Methode finden Sie in der Klasse NoSQLClient.

Die Methode tableDDL nimmt das Objekt TableDDLOpt als zweites optionales Argument an. Wenn Sie eine Tabelle erstellen, müssen Sie deren TableLimits als Teil des opt-Arguments angeben. TableLimits gibt den maximalen Durchsatz und die maximale Speicherkapazität für die Tabelle als Menge an Leseeinheiten, Schreibeinheiten und Gigabyte Speicher an.

Laden Sie den vollständigen JavaScript-Code CreateTable.js aus den Beispielen hier und den vollständigen TypeScript-Code CreateTable.ts aus den Beispielen hier herunter.

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);
}
Nachdem der obige Aufruf zurückgegeben wurde, spiegelt das Ergebnis den endgültigen Status des Vorgangs wider. Alternativ können Sie zur Verwendung der vollständigen Option den Code im Try-Catch-Block oben durch das folgende Codebeispiel ersetzen.
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);

Untergeordnete Tabelle erstellen: Sie verwenden dieselbe TableRequest-Klasse und dieselben Methoden, um eine DDL-Anweisung auszuführen und eine untergeordnete Tabelle zu erstellen.

Beim Erstellen einer untergeordneten Tabelle:
  • Sie müssen den vollständigen Namen der Tabelle angeben (name_parent_table.name_child_table)
  • Tabellenlimits müssen nicht explizit festgelegt werden, da eine untergeordnete Tabelle die Grenzen einer übergeordneten Tabelle erbt.

Laden Sie den vollständigen JavaScript-Code TableJoins.js aus den Beispielen hier und den vollständigen TypeScript-Code TableJoins.ts aus den Beispielen hier herunter.

Um eine Tabelle zu erstellen, verwenden Sie eine der Methoden ExecuteTableDDLAsync oder ExecuteTableDDLWithCompletionAsync. Beide Methoden geben Task<TableResult> zurück. Die TableResult-Instanz enthält den Status des DDL-Vorgangs, wie TableState und das Tabellenschema. Weitere Informationen zu diesen Methoden finden Sie in der Oracle NoSQL Dotnet-SDK-API-Referenz.

Laden Sie den vollständigen Code CreateTable.cs aus den Beispielen hier herunter.
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);  
}

Hinweis:

Tabellenlimits gelten nur für Oracle NoSQL Database Cloud Service. Wenn Limits für eine On-Premise-Datenbank NoSQL festgelegt sind, werden sie stillschweigend ignoriert.

Untergeordnete Tabelle erstellen: Sie verwenden dieselbe TableRequest-Klasse und dieselben Methoden, um eine DDL-Anweisung auszuführen und eine untergeordnete Tabelle zu erstellen.

Beim Erstellen einer untergeordneten Tabelle:
  • Sie müssen den vollständigen Namen der Tabelle angeben (name_parent_table.name_child_table)
  • Tabellenlimits müssen nicht explizit festgelegt werden, da eine untergeordnete Tabelle die Grenzen einer übergeordneten Tabelle erbt.

Laden Sie den vollständigen Code TableJoins.cs aus den Beispielen hier herunter.