Uso de API para crear una tabla única

La tabla es la estructura básica para contener los datos del usuario. Puede utilizar un comando SQL (sentencia CREATE TABLE) o comandos de la 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.

Instrucciones para la creación de una tabla:

Crear una tabla:

Uso de Comandos SQL

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

En la siguiente sección se destacan las diferentes opciones que se pueden utilizar al crear una tabla mediante la sentencia CREATE TABLE DDL.

Ejemplo 1: cree una tabla de aplicación de seguimiento de equipaje de aerolínea que contenga la información de equipaje de los pasajeros en un sistema de aerolínea.

CREATE TABLE BaggageInfo (
ticketNo LONG,
fullName STRING,
gender STRING,
contactPhone STRING,
confNo STRING,
bagInfo JSON,
PRIMARY KEY (ticketNo)
)

En el esquema anterior, utilice la sentencia CREATE TABLE para definir una tabla BaggageInfo. El número de ticket del pasajero, ticketNo, es la clave primaria de la tabla. Los campos fullName, gender, contactPhone y confNo (número de reserva) almacenan la información del pasajero, que forma parte de un esquema fijo. La columna bagInfo es una matriz JSON sin esquema, que representa la información de seguimiento del equipaje facturado de un pasajero.

Para obtener más información sobre la aplicación de seguimiento de equipaje de las aerolíneas, consulte Aplicación de seguimiento de equipaje de las aerolíneas.

Ejemplo 2: cree una tabla de servicio de medios de transmisión con un campo JSON para realizar un seguimiento de la actividad actual del suscriptor.

CREATE TABLE stream_acct(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(9),
acct_data JSON,
PRIMARY KEY(acct_id)
)USING TTL 5 DAYS

En el esquema anterior, utilice la sentencia CREATE TABLE para crear una tabla stream_acct. El campo acct_id del ID de cuenta del suscriptor es la clave primaria de esta tabla. Los campos profile_name, account_expiry almacenan los detalles de visualización, que forma parte de un esquema fijo. La columna acct_data es un campo JSON sin esquema, que almacena los detalles de los espectáculos visualizados por un suscriptor.

Para obtener más información sobre la aplicación de servicio de medios de transmisión, consulte Streaming Media Service - Persistent user profile store.

También se especifica un valor de TTL, tras el cual las filas caducan automáticamente y ya no están disponibles. El valor de TTL debe estar en HORAS o DÍAS. En este esquema, las filas de la tabla caducan después de 5 días.

Ejemplo 3: cree una tabla de servicio de medios de transmisión con varias definiciones de esquema fijo.

CREATE TABLE IF NOT EXISTS stream_acct(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(9),
acct_data RECORD (
firstName STRING,
lastName STRING,
country STRING,
shows JSON
),
PRIMARY KEY(acct_id)
)

En el esquema anterior, puede definir una variación del esquema fijo mediante la inclusión del campo acct_data como tipo de dato RECORD.

Un registro es una recopilación ordenada de uno o más pares clave-artículo. Las claves de un registro deben ser cadenas y los elementos asociados pueden ser de diferentes tipos de dato. Los campos de un registro forman parte del esquema fijo y no podrá agregarlos ni eliminarlos. En el ejemplo anterior, los campos firstName, lastName, country y shows son las claves para el registro acct_data. La definición de un registro resulta útil cuando se desea almacenar datos como parte de un juego de datos más grande. Puede insertar/actualizar/recuperar todo el subconjunto en un registro mediante las expresiones de paso de campo.

También puede anidar los registros de la siguiente manera:

CREATE TABLE IF NOT EXISTS  stream_acct(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(9),
acct_data RECORD (
   firstName STRING,
   lastName STRING,
   country STRING,
   shows RECORD (
           showName STRING,
           showId INTEGER,
           type JSON,
           numSeasons INTEGER,
           seriesInfo ARRAY(JSON)
   )
),
PRIMARY KEY(acct_id)
)

El campo shows es un tipo RECORD anidado que se utiliza para realizar un seguimiento de los detalles de los programas visualizados.

Ejemplo 4: cree una tabla de servicio de medios de transmisión como una estructura de tabla jerárquica.

En los siguientes esquemas, creará la tabla stream_acct como tabla principal y la tabla acct_data como tabla secundaria:

CREATE TABLE IF NOT EXISTS stream_acct(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(9),
PRIMARY KEY(acct_id))
CREATE TABLE IF NOT EXISTS stream_acct.acct_data(
profile_id INTEGER,
user_name STRING,
firstName STRING,
lastName  STRING,
country   STRING,
shows     JSON,
PRIMARY KEY(profile_id))

Con la definición de tabla principal-secundario anterior, el servicio de medios de transmisión puede admitir varios perfiles de usuario en una sola suscripción.

La tabla acct_data se define como tabla secundaria con una clave primaria profile_id para identificar el perfil de un usuario. Además de definir una clave primaria para la tabla, la tabla acct_data hereda implícitamente la columna de clave primaria acct_id de su tabla principal stream_acct.

Puede definir varias tablas secundarias en la misma tabla principal stream_acct. Puede definir más tablas secundarias para la tabla acct_data. Todas las tablas de la jerarquía tienen la misma columna de clave de partición horizontal, que se especifica en la sentencia create table de la tabla principal más alta de la jerarquía. En este ejemplo, la clave primaria acct_id de la tabla principal también es la clave de partición horizontal para las tablas stream_acct y acct_data.

Uso de la API 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. Estas son potencialmente operaciones de larga ejecución. TableResult se devuelve de las operaciones TableRequest y encapsula el estado de la tabla. Consulte Referencia de la API del 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);
}

Nota: Los límites de las tablas solo se aplican a Oracle NoSQL Database Cloud Service. Si se establecen límites para una base de datos NoSQL local, se ignoran de forma silenciosa.

Creación de una tabla secundaria: utilice la misma clase TableRequest y los mismos métodos 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)

  • No es necesario definir explícitamente los límites de la tabla como tabla secundaria que hereda los límites de una tabla principal.

Descargue el código completo TableJoins.java de los ejemplos para comprender 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 se complete la operación. Consulte Referencia de API del SDK de Python de Oracle NoSQL para obtener más información sobre table_request y sus métodos.

Descargue el código completo CreateTable.py en 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()))

Nota: Los límites de las tablas solo se aplican a Oracle NoSQL Database Cloud Service. Si se establecen límites para una base de datos NoSQL local, se ignoran de forma silenciosa.

Creación de una tabla secundaria: utilice la misma clase TableRequest y los mismos métodos 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).

  • No es necesario definir explícitamente los límites de la tabla como tabla secundaria que 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. Estas son potencialmente operaciones de larga ejecució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 del SDK de Oracle NoSQL Go para obtener más información sobre los distintos métodos de la clase TableRequest.

Descargue el código completo CreateTable.go en 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
}

Nota: Los límites de las tablas solo se aplican a Oracle NoSQL Database Cloud Service. Si se establecen límites para una base de datos NoSQL local, se ignoran de forma silenciosa.

Creación de una tabla secundaria: utilice la misma clase TableRequest y los mismos métodos 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).

  • No es necesario definir explícitamente los límites de la tabla como tabla secundaria que 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 su TableState, nombre, esquema y TableLimits. Para obtener más información sobre el método, consulte la clase NoSQLClient.

El método tableDDL toma el objeto TableDDLOpt como segundo argumento opcional. Al crear una tabla, debe especificar su valor TableLimits como parte del argumento de inclusión. TableLimits especifica el rendimiento máximo y la capacidad de almacenamiento de 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);
}

Después de que se devuelva la llamada anterior, el resultado reflejará el estado final de la operación. Alternativamente, para utilizar la opción completa, sustituya el código en el 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 TableRequest y los mismos métodos 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)

  • No es necesario definir explícitamente los límites de la tabla como tabla secundaria que 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 cualquiera 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 la API del SDK de Dotnet de Oracle NoSQL para obtener más información sobre estos métodos.

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

Nota: Los límites de las tablas solo se aplican a Oracle NoSQL Database Cloud Service. Si se establecen límites para una base de datos NoSQL local, se ignoran de forma silenciosa.

Creación de una tabla secundaria: utilice la misma clase TableRequest y los mismos métodos 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)

  • No es necesario definir explícitamente los límites de la tabla como tabla secundaria que hereda los límites de una tabla principal.

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