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.
- 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.
En la siguiente sección se destacan las diferentes opciones que se pueden utilizar al crear una tabla mediante la sentencia CREATE TABLE DDL.
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.
CREATE TABLE stream_acct(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(9),
acct_data JSON,
PRIMARY KEY(acct_id)
)USING TTL 5 DAYSEn 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.
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.
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.
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.
Temas relacionados
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.
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.
- 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.
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.
- 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.
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.
- 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);
}
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.
- 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.
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.
- 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í.