Uso de API para Crear una Tabla Singleton

La tabla es la estructura básica para contener los datos de usuario. Utilice un comando SQL (sentencia CREATE TABLE) o comandos de API TableRequest para crear una nueva tabla.

También puede utilizar la consola de Oracle NoSQL Cloud Infrastructure(OCI) o la interfaz de línea de comandos de OCI (OCI-cli) para crear una tabla en NDCS.

Directrices para crear una tabla:
  • La definición de tabla debe incluir al menos una definición de campo y exactamente una definición de clave primaria. Para obtener más información sobre la definición de clave primaria, consulte Crear tabla.
  • La definición de campo especifica el nombre de la columna, su tipo de dato, si la columna se puede anular o no, un valor por defecto opcional, si la columna es una columna IDENTITY y un comentario opcional. Todos los campos (que no sean PRIMARY KEY) son nulos por defecto.
  • La sintaxis de la especificación de clave primaria (key_definition) especifica las columnas de clave primaria de la tabla como una lista ordenada de nombres de campo.
  • El valor de tiempo de actividad (TTL) se utiliza para calcular la hora de caducidad de una fila. Las filas caducadas no se incluyen en los resultados de la consulta y, finalmente, Oracle NoSQL Database las elimina de la tabla automáticamente. Si especifica un valor TTL al crear la tabla, se aplica como TTL por defecto para cada fila insertada en esta tabla.

Uso de comandos SQL

Puede utilizar el comando CREATE TABLE en SQL para crear tablas NoSQL.

Ejemplo 1: la siguiente sentencia CREATE TABLE define una tabla BaggageInfo que contiene información de equipaje de pasajeros en un sistema de líneas aéreas.
CREATE TABLE BaggageInfo (
ticketNo LONG,
fullName STRING,
gender STRING,
contactPhone STRING,
confNo STRING,
bagInfo JSON,
PRIMARY KEY (ticketNo)
)
Ejemplo 2: la siguiente sentencia CREATE TABLE define una tabla stream_acct que contiene datos de una aplicación de transmisión de TV.
CREATE TABLE stream_acct(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(1),
acct_data JSON, 
PRIMARY KEY(acct_id)
)
Ejemplo 3: la siguiente sentencia CREATE TABLE define una tabla stream_acct_new que contiene datos de una aplicación de transmisión de TV. Las filas de la tabla caducan en 2 días.
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

Uso de la API de TableRequest

Puede utilizar la API TableRequest para crear tablas NoSQL.

La clase TableRequest se utiliza para crear tablas. La ejecución de las operaciones especificadas por esta solicitud es asíncrona. Se trata de operaciones de larga duración. Las operaciones TableRequest devuelven TableResult y encapsula el estado de la tabla. Consulte Referencia de API de SDK de Java de Oracle NoSQL para obtener más información sobre la clase TableRequest y sus métodos.

Descargue el código completo CreateTable.java de los ejemplos aquí.
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);
}

Note:

Los límites de tabla se aplican solo a Oracle NoSQL Database Cloud Service. Si se definen límites para una base de datos NoSQL local, se ignoran de forma silenciosa.

Creación de una tabla secundaria: utilice la misma clase y métodos TableRequest para ejecutar la sentencia DDL para crear una tabla secundaria.

Al crear una tabla secundaria:
  • Debe especificar el nombre completo de la tabla (name_parent_table.name_child_table)
  • Los límites de tabla no se deben definir explícitamente como una tabla secundaria hereda los límites de una tabla principal.

Descargue el código completo TableJoins.java de los ejemplos para saber cómo crear una tabla principal-secundaria aquí.

La clase borneo.TableRequest se utiliza para crear una tabla. Todas las llamadas a borneo.NoSQLHandle.table_request() son asíncronas, por lo que es necesario comprobar el resultado y llamar a borneo.TableResult.wait_for_completion() para esperar a que finalice la operación. Consulte Referencia de API de SDK de Python NoSQL de Oracle para obtener más información sobre table_request y sus métodos.

Descargue el código completo CreateTable.py de los ejemplos aquí.
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()))

Note:

Los límites de tabla se aplican solo a Oracle NoSQL Database Cloud Service. Si se definen límites para una base de datos NoSQL local, se ignoran de forma silenciosa.

Creación de una tabla secundaria: utilice la misma clase y métodos TableRequest para ejecutar la sentencia DDL para crear una tabla secundaria.

Al crear una tabla secundaria:
  • Debe especificar el nombre completo de la tabla (name_parent_table.name_child_table).
  • Los límites de tabla no se deben definir explícitamente como una tabla secundaria hereda los límites de una tabla principal.

Descargue el código completo TableJoins.py de los ejemplos aquí.

La clase TableRequest se utiliza para crear una tabla. La ejecución de las operaciones especificadas por TableRequest es asíncrona. Se trata de operaciones de larga duración. Esta solicitud se utiliza como entrada de una operación Client.DoTableRequest(), que devuelve un valor TableResult que se puede utilizar para sondear hasta que la tabla alcance el estado deseado. Consulte Referencia de API de SDK de Go de Oracle NoSQL para obtener más información sobre los distintos métodos de la clase TableRequest.

Descargue el código completo CreateTable.go de los ejemplos aquí.
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
}

Note:

Los límites de tabla se aplican solo a Oracle NoSQL Database Cloud Service. Si se definen límites para una base de datos NoSQL local, se ignoran de forma silenciosa.

Creación de una tabla secundaria: utilice la misma clase y métodos TableRequest para ejecutar la sentencia DDL para crear una tabla secundaria.

Al crear una tabla secundaria:
  • Debe especificar el nombre completo de la tabla (name_parent_table.name_child_table).
  • Los límites de tabla no se deben definir explícitamente como una tabla secundaria hereda los límites de una tabla principal.

Descargue el código completo TableJoins.go de los ejemplos aquí.

Puede crear una tabla mediante el método tableDDL. Este método es asíncrono y devuelve una promesa de TableResult. TableResult es un objeto JavaScript sin formato que contiene el estado de la operación DDL, como TableState, nombre, esquema y TableLimits. Para obtener detalles sobre el método, consulte la clase NoSQLClient.

El método tableDDL toma el objeto TableDDLOpt como el segundo argumento opcional. Al crear una tabla, debe especificar TableLimits como parte del argumento opt. TableLimits especifica el rendimiento y la capacidad de almacenamiento máximos para la tabla como la cantidad de unidades de lectura, unidades de escritura y gigabytes de almacenamiento.

Descargue el código JavaScript completo CreateTable.js de los ejemplos aquí y el código TypeScript completo CreateTable.ts de los ejemplos aquí.

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);
}
Una vez devuelta la llamada anterior, el resultado reflejará el estado final de la operación. Como alternativa, para utilizar la opción completa, sustituya el código del bloque try-catch anterior por el siguiente ejemplo de código.
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);

Creación de una tabla secundaria: utilice la misma clase y métodos TableRequest para ejecutar la sentencia DDL para crear una tabla secundaria.

Al crear una tabla secundaria:
  • Debe especificar el nombre completo de la tabla (name_parent_table.name_child_table)
  • Los límites de tabla no se deben definir explícitamente como una tabla secundaria hereda los límites de una tabla principal.

Descargue el código JavaScript completo TableJoins.js de los ejemplos aquí y el código TypeScript completo TableJoins.ts de los ejemplos aquí.

Para crear una tabla, utilice uno de los métodos ExecuteTableDDLAsync o ExecuteTableDDLWithCompletionAsync. Ambos métodos devuelven Task<TableResult>. La instancia TableResult contiene el estado de la operación DDL como TableState y el esquema de tabla. Consulte Referencia de API de SDK de Dotnet de Oracle NoSQL para obtener más información sobre estos métodos.

Descargue el código completo CreateTable.cs de los ejemplos aquí.
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);  
}

Note:

Los límites de tabla se aplican solo a Oracle NoSQL Database Cloud Service. Si se definen límites para una base de datos NoSQL local, se ignoran de forma silenciosa.

Creación de una tabla secundaria: utilice la misma clase y métodos TableRequest para ejecutar la sentencia DDL para crear una tabla secundaria.

Al crear una tabla secundaria:
  • Debe especificar el nombre completo de la tabla (name_parent_table.name_child_table)
  • Los límites de tabla no se deben definir explícitamente como una tabla secundaria hereda los límites de una tabla principal.

Descargue el código completo TableJoins.cs de los ejemplos aquí.