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.
- 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.
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)
)
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)
)
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
Argomenti correlati
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.
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.
- È 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.
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.
- È 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.
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.
- È 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);
}
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.
- È 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.
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.
- È 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.
Utilizzo delle API per creare una tabella Singleton