Utilizzo delle API per creare una tabella Singleton

La tabella è la struttura di base per contenere i dati utente. Utilizzare un comando SQL (istruzione CREATE TABLE) o i comandi API TableRequest per creare una nuova tabella.

È inoltre possibile utilizzare la console Oracle NoSQL Cloud Infrastructure (OCI) o l'interfaccia della riga di comando OCI (OCI-cli) per creare una tabella in NDCS.

Linee guida per la creazione di una tabella:
  • La definizione della tabella deve includere almeno una definizione di campo ed esattamente una definizione di chiave primaria. Per ulteriori informazioni sulla definizione della chiave primaria, vedere Crea tabella.
  • La definizione del campo specifica il nome della colonna, il relativo tipo di dati, se la colonna è annullabile o meno, un valore predefinito facoltativo, se la colonna è una colonna IDENTITY e un commento facoltativo. Tutti i campi (diversi dalla chiave primaria) sono annullabili per impostazione predefinita.
  • La sintassi per la specifica della chiave primaria (key_definition) specifica le colonne della chiave primaria della tabella come elenco ordinato di nomi di campo.
  • Il valore TTL (Time-To-Live) viene utilizzato per calcolare l'ora di scadenza di una riga. Le righe scadute non vengono incluse nei risultati della query e vengono rimosse automaticamente dalla tabella da Oracle NoSQL Database. Se si specifica un valore TTL durante la creazione della tabella, viene applicato come TTL predefinito per ogni riga inserita in questa tabella.

Uso dei comandi SQL

È possibile utilizzare il comando CREATE TABLE in SQL per creare le tabelle NoSQL.

Esempio 1: la seguente dichiarazione CREATE TABLE definisce una tabella BaggageInfo che contiene le informazioni sui bagagli dei passeggeri in un sistema aereo.
CREATE TABLE BaggageInfo (
ticketNo LONG,
fullName STRING,
gender STRING,
contactPhone STRING,
confNo STRING,
bagInfo JSON,
PRIMARY KEY (ticketNo)
)
Esempio 2: la seguente istruzione CREATE TABLE definisce una tabella stream_acct che contiene i dati di un'applicazione di streaming TV.
CREATE TABLE stream_acct(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(1),
acct_data JSON, 
PRIMARY KEY(acct_id)
)
Esempio 3: la seguente istruzione CREATE TABLE definisce una tabella stream_acct_new che contiene i dati di un'applicazione di streaming TV. Le righe della tabella scadono tra 2 giorni.
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

Utilizzo dell'API TableRequest

È possibile utilizzare l'API TableRequest per creare tabelle NoSQL.

La classe TableRequest viene utilizzata per creare le tabelle. L'esecuzione delle operazioni specificate da questa richiesta è asincrona. Si tratta di operazioni potenzialmente di lunga durata. TableResult viene restituito dalle operazioni TableRequest e incapsula lo stato della tabella. Per ulteriori dettagli sulla classe TableRequest e sui relativi metodi, vedere Oracle NoSQL Java SDK API Reference.

Scarica il codice completo CreateTable.java dagli esempi qui.
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);
}

Nota

I limiti delle tabelle sono applicabili solo a Oracle NoSQL Database Cloud Service. Se vengono impostati limiti per un database NoSQL on premise, questi vengono ignorati in background.

Creazione di una tabella figlio: utilizzare la stessa classe e gli stessi metodi TableRequest per eseguire l'istruzione DDL e creare una tabella figlio.

Durante la creazione di una tabella figlio:
  • È necessario specificare il nome completo della tabella (name_parent_table.name_child_table)
  • I limiti della tabella non devono essere impostati in modo esplicito poiché una tabella figlio eredita i limiti di una tabella padre.

Scarica il codice completo TableJoins.java dagli esempi per capire come creare una tabella padre-figlio qui.

La classe borneo.TableRequest viene utilizzata per creare una tabella. Tutte le chiamate a borneo.NoSQLHandle.table_request() sono asincrone, pertanto è necessario controllare il risultato e chiamare borneo.TableResult.wait_for_completion() per attendere il completamento dell'operazione. Per ulteriori informazioni su table_request e sui relativi metodi, vedere Oracle NoSQL Python SDK API Reference.

Scarica il codice completo CreateTable.py dagli esempi qui.
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()))

Nota

I limiti delle tabelle sono applicabili solo a Oracle NoSQL Database Cloud Service. Se vengono impostati limiti per un database NoSQL on premise, questi vengono ignorati in background.

Creazione di una tabella figlio: utilizzare la stessa classe e gli stessi metodi TableRequest per eseguire l'istruzione DDL e creare una tabella figlio.

Durante la creazione di una tabella figlio:
  • È necessario specificare il nome completo della tabella (name_parent_table.name_child_table).
  • I limiti della tabella non devono essere impostati in modo esplicito poiché una tabella figlio eredita i limiti di una tabella padre.

Scarica il codice completo TableJoins.py dagli esempi qui.

La classe TableRequest viene utilizzata per creare una tabella. L'esecuzione delle operazioni specificate da TableRequest è asincrona. Si tratta di operazioni potenzialmente di lunga durata. Questa richiesta viene utilizzata come input di un'operazione Client.DoTableRequest(), che restituisce un valore TableResult che può essere utilizzato per eseguire il polling fino a quando la tabella non raggiunge lo stato desiderato. Per ulteriori dettagli sui vari metodi della classe TableRequest, consulta Oracle NoSQL Go SDK API Reference.

Scarica il codice completo CreateTable.go dagli esempi qui.
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
}

Nota

I limiti delle tabelle sono applicabili solo a Oracle NoSQL Database Cloud Service. Se vengono impostati limiti per un database NoSQL on premise, questi vengono ignorati in background.

Creazione di una tabella figlio: utilizzare la stessa classe e gli stessi metodi TableRequest per eseguire l'istruzione DDL e creare una tabella figlio.

Durante la creazione di una tabella figlio:
  • È necessario specificare il nome completo della tabella (name_parent_table.name_child_table).
  • I limiti della tabella non devono essere impostati in modo esplicito poiché una tabella figlio eredita i limiti di una tabella padre.

Scarica il codice completo TableJoins.go dagli esempi qui.

È possibile creare una tabella utilizzando il metodo tableDDL. Questo metodo è asincrono e restituisce una promessa di TableResult. TableResult è un oggetto JavaScript non codificato che contiene lo stato dell'operazione DDL, ad esempio TableState, nome, schema e TableLimits. Per ulteriori informazioni sul metodo, vedere la classe NoSQLClient.

Il metodo tableDDL accetta l'oggetto TableDDLOpt come secondo argomento facoltativo. Quando si crea una tabella, è necessario specificarne TableLimits come parte dell'argomento opt. Il valore TableLimits specifica la capacità massima di throughput e storage per la tabella come la quantità di unità di lettura, di scrittura e GB di storage.

Scarica il codice JavaScript completo CreateTable.js dagli esempi qui e il codice TypeScript completo CreateTable.ts dagli esempi qui.

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);
}
Dopo il ritorno della chiamata precedente, il risultato rifletterà lo stato finale dell'operazione. In alternativa, per utilizzare l'opzione completa, sostituire il codice nel blocco try-catch sopra con il seguente esempio di codice.
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);

Creazione di una tabella figlio: utilizzare la stessa classe e gli stessi metodi TableRequest per eseguire l'istruzione DDL e creare una tabella figlio.

Durante la creazione di una tabella figlio:
  • È necessario specificare il nome completo della tabella (name_parent_table.name_child_table)
  • I limiti della tabella non devono essere impostati in modo esplicito poiché una tabella figlio eredita i limiti di una tabella padre.

Scarica il codice JavaScript completo TableJoins.js dagli esempi qui e il codice TypeScript completo TableJoins.ts dagli esempi qui.

Per creare una tabella, utilizzare uno dei metodi ExecuteTableDDLAsync o ExecuteTableDDLWithCompletionAsync. Entrambi questi metodi restituiscono Task<TableResult>. L'istanza TableResult contiene lo stato dell'operazione DDL, ad esempio TableState e lo schema di tabella. Per ulteriori dettagli su questi metodi, consulta Oracle NoSQL Riferimento API SDK Dotnet.

Scarica il codice completo CreateTable.cs dagli esempi qui.
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);  
}

Nota

I limiti delle tabelle sono applicabili solo a Oracle NoSQL Database Cloud Service. Se vengono impostati limiti per un database NoSQL on premise, questi vengono ignorati in background.

Creazione di una tabella figlio: utilizzare la stessa classe e gli stessi metodi TableRequest per eseguire l'istruzione DDL e creare una tabella figlio.

Durante la creazione di una tabella figlio:
  • È necessario specificare il nome completo della tabella (name_parent_table.name_child_table)
  • I limiti della tabella non devono essere impostati in modo esplicito poiché una tabella figlio eredita i limiti di una tabella padre.

Scarica il codice completo TableJoins.cs dagli esempi qui.