Uso de API para crear tablas e índices en Oracle NoSQL Database Cloud Service
Descubra cómo crear tablas e índices a partir de Java, Python, Go, Node.js o . Aplicación NET.
En este artículo se incluyen los siguientes temas:
Acerca de los controladores SDK de Oracle NoSQL Database
Obtenga información sobre los controladores de Oracle NoSQL Database SDK.
El controlador de SDK de Oracle NoSQL Database contiene los archivos que permiten a una aplicación comunicarse con el entorno local, con Oracle NoSQL Database Cloud Service o con el simulador de Oracle NoSQL Database Cloud.
El SDK de Oracle NoSQL Database para Java está disponible en el repositorio de Maven Central, más información aquí. La ubicación principal del proyecto es en GitHub.
La versión cambia con cada versión.
<dependency>
<groupId>com.oracle.nosql.sdk</groupId>
<artifactId>nosqldriver</artifactId>
<version>5.2.31</version>
</dependency>
Oracle NoSQL Database SDK para Java le proporciona todas las clases, los métodos, las interfaces y los ejemplos de Java. La documentación está disponible como javadoc en GitHub o en la Guía de referencia de la API de Java.
Puede instalar el SDK de Python mediante el índice de paquetes de Python con el comando indicado a continuación.
pip3 install borneo
El SDK para Python de Oracle NoSQL le proporciona todas las clases, métodos, interfaces y ejemplos de Python. La documentación está disponible en la Guía de referencia de API de Python.
Abra la página Ir descargas en un explorador y haga clic en el separador de descarga correspondiente al sistema operativo. Guarde el archivo en la carpeta de inicio.
- En sistemas Windows, abra el archivo MSI que descargó y siga las indicaciones para instalar Go.
- En sistemas Linux, extraiga el archivo que descargó en
/usr/local
y cree un árbol Go en/usr/local/go
. Agregue/usr/local/go/bin
a la variable de entorno PATH.
Acceda a online godoc para obtener información sobre el uso del SDK y hacer referencia a los paquetes, tipos y métodos del controlador Go.
npm install oracle-nosqldb
Acceda a la Guía de referencia de API de Node.js para hacer referencia a clases, eventos y objetos globales de Node.js.
- Agregue el SDK como referencia de proyecto: puede agregar el paquete NuGet del SDK como referencia al proyecto mediante . CLI de red.
También puede realizar lo mismo con NuGet Package Manager en Visual Studio.cd <your-project-directory> dotnet add package Oracle.NoSQL.SDK
- Instalación independiente: puede instalar el SDK de forma independiente en un directorio de su elección mediante la CLI de nuget.exe.
nuget.exe install Oracle.NoSQL.SDK -OutputDirectory <your-packages-directory>
Obtención de un identificador de NoSQL
Descubra cómo acceder a las tablas mediante Oracle NoSQL Database Drivers. Comience a desarrollar la aplicación creando un identificador de NoSQL. Utilice NoSQLHandle para acceder a las tablas y ejecutar todas las operaciones.
Para crear una conexión representada por NoSQLHandle, obtenga un identificador con el método NoSQLHandleFactory.createNoSQLHandle
y la clase NoSQLHandleConfig
. La clase NoSQLHandleConfig
permite que una aplicación especifique la configuración del identificador. Consulte la Guía de referencia de API de Java para obtener más información.
/* Configure a handle for the desired Region and AuthorizationProvider.
* By default this SignatureProvider constructor reads authorization
* information from ~/.oci/config and uses the default user profile and
* private key for request signing. Additional SignatureProvider
* constructors are available if a config file is not available or
* desirable.
*/
AuthorizationProvider ap = new SignatureProvider();
/* Use the us-ashburn-1 region */
NoSQLHandleConfig config = new NoSQLHandleConfig(Region.US_ASHBURN_1, ap);
config.setAuthorizationProvider(ap);
/* Sets a default compartment for all requests from this handle. This
* may be overridden in individual requests or by using a
* compartment-name prefixed table name.
*/
config.setDefaultCompartment("mycompartment");
// Open the handle
NoSQLHandle handle = NoSQLHandleFactory.createNoSQLHandle(config);
// Use the handle to execute operations
Un identificador tiene recursos de red y memoria asociados. Utilice el método NoSQLHandle.close
para liberar los recursos cuando la aplicación termine con el identificador.
Para minimizar la actividad de red, y el exceso en la asignación y desasignación de recursos, es recomendable evitar la creación y el cierre repetidos de identificadores. Por ejemplo, crear y cerrar un identificador en cada operación produciría un bajo rendimiento de la aplicación. Un identificador permite operaciones simultáneas, por lo que un único identificador es suficiente para acceder a las tablas de una aplicación multithread. La creación de varios identificadores provoca un exceso de recursos adicionales y no supone ningún beneficio para el rendimiento.
Para crear un manejador, primero se crea una instancia borneo.NoSQLHandleConfig
para configurar el punto final de comunicación, la información de autorización y los valores por defecto para la configuración del manejador. borneo.NoSQLHandleConfig
representa una conexión al servicio. Una vez creado, se debe cerrar con el método borneo.NoSQLHandle.close()
para limpiar los recursos. Los identificadores son seguros para los subprocesos y están diseñados para ser compartidos.
from borneo import NoSQLHandle, NoSQLHandleConfig, Regions
from borneo.iam import SignatureProvider
# create AuthorizationProvider
provider = SignatureProvider()
# create handle config using the correct desired region
# as endpoint, add a default compartment.
config = NoSQLHandleConfig(Regions.US_ASHBURN_1).
set_authorization_provider(provider).
set_default_compartment('mycompartment')
# create the handle
handle = NoSQLHandle(config)
Para reducir el uso de recursos y la sobrecarga de creación de manejadores, es mejor evitar la creación y el cierre excesivos de instancias
borneo.NoSQLHandle
.
go
de Oracle NoSQL Database Cloud Service es crear un manejador nosqldb.Client
utilizado para enviar solicitudes al servicio. Las instancias del manejador de cliente son seguras para su uso simultáneo por varios goroutines y están destinadas a ser compartidas en una aplicación de varias grúas. El identificador se configura mediante sus credenciales y otra información de autenticación.provider, err := iam.NewSignatureProviderFromFile(cfgfile, profile, passphrase, compartment)
cfg := nosqldb.Config
{
Region: "us-phoenix-1", AuthorizationProvider: provider,
}
client, err := nosqldb.NewClient(cfg)
// use client for all NoSQL DB operations
La clase NoSQLClient
representa el punto de acceso principal al servicio. Para crear una instancia de NoSQLClient
, debe proporcionar la información de configuración adecuada. Esta información se representa mediante un objeto JavaScript sin formato y se puede proporcionar al constructor de NoSQLClient
como literal de objeto. También puede almacenar esta información en un archivo de configuración JSON y el constructor de NoSQLClient
con la ruta (absoluta o relativa al directorio actual de la aplicación) a ese archivo.
NoSQLClient
para Cloud Service mediante el literal de objeto de configuración. También agrega un compartimento por defecto y sustituye algunos valores de timeout por defecto en el objeto de configuración.const NoSQLClient = require('oracle-nosqldb').NoSQLClient;
let client = new NoSQLClient({
region: Region.US_ASHBURN_1,
timeout: 20000,
ddlTimeout: 40000,
compartment: 'mycompartment',
auth: {
iam: {
configFile: '~/myapp/.oci/config',
profileName: 'Jane'
}
}
});
El segundo ejemplo almacena la misma configuración en un archivo JSON config.json
y la utiliza para crear la instancia NoSQLClient
.
{
"region": "US_ASHBURN_1",
"timeout": 20000,
"ddlTimeout": 40000,
"compartment": "mycompartment",
"auth": {
"iam": {
"configFile": "~/myapp/.oci/config",
"profileName": "Jane"
}
}
}
const NoSQLClient = require('oracle-nosqldb').NoSQLClient;
let client = new NoSQLClient('config.json');
La clase NoSQLClient
representa el punto de acceso principal al servicio. Para crear una instancia de NoSQLClient
, debe proporcionar la información de configuración adecuada. Esta información se representa mediante la clase NoSQLConfig
, instancia que se puede proporcionar al constructor de NoSQLClient
. También puede almacenar la información de configuración en un archivo de configuración JSON y utilizar el constructor de NoSQLClient
que toma la ruta (absoluta o relativa al directorio actual) a ese archivo.
NoSQLClient
para Cloud Service mediante NoSQLConfig
. También agrega un compartimento por defecto y sustituye algunos valores de timeout por defecto en NoSQLConfig
.var client = new NoSQLClient(
new NoSQLConfig
{
Region = Region.US_ASHBURN_1,
Timeout = TimeSpan.FromSeconds(10),
TableDDLTimeout = TimeSpan.FromSeconds(20),
Compartment = "mycompartment",
AuthorizationProvider = new IAMAuthorizationProvider(
"~/myapp/.oci/config", "Jane")
});
El segundo ejemplo almacena la misma configuración en un archivo JSON config.json
y la utiliza para crear la instancia NoSQLClient
.
config.json
{
"Region": "us-ashburn-1",
"Timeout": 20000,
"TableDDLTimeout": 40000,
"compartment": "mycompartment",
"AuthorizationProvider":
{
"AuthorizationType": "IAM",
"ConfigFile": "~/myapp/.oci/config",
"ProfileName": "Jane"
}
}
var client = new NoSQLClient("config.json");
Acerca de los compartimentos
Descubra cómo especificar el compartimento al crear y trabajar con tablas de Oracle NoSQL Database Cloud Service con controladores de Oracle NoSQL Database.
Si se ha autenticado mediante una instancia principal (accediendo al servicio desde una instancia informática de OCI), debe especificar un compartimento mediante su ID (OCID), ya que no hay valor por defecto en este caso. Consulte Llamada al servicio desde una instancia en la documentación de Oracle Cloud Infrastructure.
- Utilice un compartimento por defecto en
NoSQLHandleConfig
para que se aplique a todas las operaciones que utilizan el identificador. Consulte Obtención de un identificador de NoSQL para obtener un ejemplo. - Utilice el nombre o el ID de compartimento (OCID) en cada solicitud, además del nombre de tabla. Esto sustituye cualquier compartimento por defecto.
Por ejemplo:
GetRequest getReq = new GetRequest().setTableName("mytable") .setCompartment("mycompartment");
- Utilice el nombre del compartimento como prefijo en el nombre de la tabla. Esto sustituye cualquier compartimento por defecto, así como un compartimento especificado con API.
Por ejemplo:
GetRequest getReq = new GetRequest().setTableName("mycompartment:mytable");
Al especificar la ruta a un compartimento anidado, no incluya el nombre del compartimento de nivel superior en la ruta, puesto que se deduce del arrendamiento.
- Existe un método para permitir la especificación de un compartimento por defecto para las solicitudes en
borneo.NoSQLHandleConfig.set_compartment()
. Esto sustituye el compartimento por defecto del usuario. - Además, es posible especificar un compartimento en cada instancia
Request
.
set_compartment
toman un ID (OCID) o un nombre de compartimento o una ruta. Si se utiliza un nombre de compartimento, puede ser el nombre de un compartimento de nivel superior.
Si se utiliza una ruta de compartimento para hacer referencia a un compartimento anidado, la ruta es una ruta separada por puntos que excluye el compartimento de nivel superior de la ruta, por ejemplo,
compartmentA.compartmentB
.
...
request = PutRequest().set_table_name('mycompartment:mytable')
...
create_statement = 'create table mycompartment:mytable(...)'
...
request = GetRequest().set_table_name('compartmentA.compartmentB')
- Puede definir un nombre o ID de compartimento deseado.
- Se define en una cadena vacía para utilizar el compartimento por defecto, que es el compartimento raíz del arrendamiento.
- Si utiliza un compartimento anidado, especifique la ruta completa del compartimento relativa al compartimento raíz como compartmentID. Por ejemplo, si utiliza rootCompartment.compartmentA.compartmentB, compartmentID se debe definir en
compartmentA.compartmentB
. - También puede utilizar el OCID de compartimento como valor de cadena.
compartmentID:="<optional-compartment-name-or-ID>"
iam.NewRawSignatureProvider(tenancy, user, region, fingerprint, compartmentID,
privateKey, &privateKeyPassphrase)
const NoSQLClient = require('oracle-nosqldb').NoSQLClient;
const client = new NoSQLClient({
region: Region.US_ASHBURN_1,
compartment: 'mycompartment'
});
El valor de cadena puede ser un ID de compartimento, un nombre de compartimento o una ruta. Si es un nombre simple, debe especificar un compartimento de nivel superior. Si es una ruta a un compartimento anidado, el compartimento de nivel superior se debe excluir, ya que se infiere del arrendamiento. También se puede especificar un compartimento en cada solicitud en el objeto de opciones. Este valor sustituye el valor de configuración inicial.
Si no se proporciona el compartimento, se utilizará el OCID del arrendamiento por defecto. Tenga en cuenta que esto solo se aplica si está autorizando con la identidad del usuario. Al utilizar principal de instancia o principal de recurso, se debe especificar el ID de compartimento.
NoSQLConfig
. Por ejemplo:var client = new NoSQLClient(
new NoSQLConfig
{
Region=Region.US_ASHBURN_1,
Compartment="<compartment_ocid_or_name>"
});
El valor de cadena puede ser un OCID de compartimento, un nombre de compartimento o una ruta. Si es un nombre simple, debe especificar un compartimento de nivel superior. Si es una ruta a un compartimento anidado, el compartimento de nivel superior se debe excluir, ya que se infiere del arrendamiento.Además, todas las clases de opciones de operación tienen la propiedad Compartment
, como TableDDLOptions.Compartment
, GetOptions.Compartment
, PutOptions.Compartment
, etc. Por lo tanto, también puede especificar la comparación por separado para cualquier operación. Si se define, este valor sustituirá el valor de compartimento en NoSQLConfig
, si lo hay.
Si no se proporciona el compartimento, se utilizará el OCID del arrendamiento por defecto. Tenga en cuenta que esto solo se aplica si está autorizando con la identidad del usuario. Al utilizar principal de instancia o principal de recurso, se debe especificar el ID de compartimento.
Creación de tablas e índices
Aprenda a crear tablas e índices.
Utilice la clase API y los métodos para ejecutar todas las sentencias DDL como, por ejemplo, la creación, la modificación y el borrado de tablas. También puede establecer límites de tabla con el método de API.
Algunos ejemplos de sentencias DDL son:
/* Create a new table called users */
CREATE TABLE IF NOT EXISTS users(id INTEGER,
name STRING,
PRIMARY KEY(id))
/* Create a new table called users and set the TTL value to 4 days */
CREATE TABLE IF NOT EXISTS users(id INTEGER,
name STRING,
PRIMARY KEY(id))
USING TTL 4 days
/* Create a new index called nameIdx on the name field in the users table */
CREATE INDEX IF NOT EXISTS nameIdx ON users(name)
El siguiente ejemplo considera que el compartimento por defecto se especifica en NoSQLHandleConfig
al obtener el identificador de NoSQL. Consulte Obtención de un identificador de NoSQL . Para explorar otras opciones para especificar un compartimento para las tablas NoSQL, consulte Acerca de los compartimentos .
Cree una tabla e índice con TableRequest
y sus métodos.
/* Create a simple table with an integer key and a single json data
* field and set your desired table capacity.
* Set the table TTL value to 3 days.
*/
String createTableDDL = "CREATE TABLE IF NOT EXISTS users " +
"(id INTEGER, name STRING, " +
"PRIMARY KEY(id)) USING TTL 3 days";
/* Call the appropriate constructor for
* 1) Provisioned Capacity
* TableLimits limits = new TableLimits(50, 50, 25);
* 2) On-demand Capacity - only set storage limit
* TableLimits limits = new TableLimits( 5 );
* In this example, we will use Provisioned Capacity
*/
TableLimits limits = new TableLimits(50, 50, 25);
TableRequest treq = new TableRequest().setStatement(createTableDDL)
.setTableLimits(limits);
// start the asynchronous operation
TableResult tres = handle.tableRequest(treq);
// wait for completion of the operation
tres.waitForCompletion(handle,
60000, // wait for 60 sec
1000); // delay in ms for poll
// Create an index called nameIdx on the name field in the users table.
treq = new TableRequest().setStatement("CREATE INDEX
IF NOT EXISTS nameIdx ON users(name)
");
// start the asynchronous operation
handle.tableRequest(treq);
// wait for completion of the operation
tres.waitForCompletion(handle,
60000, // wait for 60 sec
1000); // delay in ms for poll
Busque la lista de tablas:
ListTablesRequest tablereq = new ListTablesRequest();
String [] tablelis = handle.listTables(tablereq).getTables();
if (tablelis.length == 0)
System.out.println("No tables avaiable");
else {
System.out.println("The tables available are");
for (int i=0;i< tablelis.length; i++) {
System.out.println(tablelis[i]);
}
}
GetTableRequest gettblreq = new GetTableRequest();
gettblreq.setTableName(tableName);
System.out.println("The schema details for the table is "
+ handle.getTable(gettblreq).getSchema());
borneo.TableRequest
. 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.
#Create a simple table with an integer key and a single
#json data field and set your desired table capacity.
#Set the table TTL value to 3 days.
from borneo import TableLimits,
TableRequest statement = 'create table if not exists users(id integer,
name string,
' + 'primary key(id)
USING TTL 3 DAYS'
# In the Cloud Service TableLimits is a required object for table
#creation. It specifies the throughput and capacity for the table in
#ReadUnits, WriteUnits, GB
# Call the appropriate constructor for
# 1) Provisioned Capacity
# TableLimits(50, 50, 25);
# 2) On-demand Capacity - only set storage limit
# TableLimits( 25 );
# In this example, we will use Provisioned Capacity
request = TableRequest().set_statement(statement).
set_table_limits( TableLimits(50, 50, 25))
# assume that a handle has been created, as handle, make the request
#wait for 60 seconds, polling every 1 seconds
result = handle.do_table_request(request, 60000, 1000)
# the above call to do_table_request is equivalent to
# result = handle.table_request(request)
result.wait_for_completion(handle, 60000, 1000)
#Create an index called nameIdx on the name field in the users table.
request = TableRequest().set_statement("CREATE INDEX IF NOT EXISTS nameIdx
ON users(name)")
# assume that a handle has been created, as handle, make the request
#wait for 60 seconds, polling every 1 seconds
result = handle.do_table_request(request, 60000, 1000)
# the above call to do_table_request is equivalent to
# result = handle.table_request(request)
result.wait_for_completion(handle, 60000, 1000)
Busque la lista de tablas:
ltr = ListTablesRequest()
list(str)= handle.list_tables(ltr).getTables()
if list(str).len() = 0
print ("No tables available")
else
print('The tables available are: ' + list(str))
request = GetTableRequest().set_table_name(table_name)
result = handle.get_table(request)
print('The schema details for the table is: ' + result.get_schema())
// Create a simple table with an integer key and a single
// json data field and set your desired table capacity.
// Set the table TTL value to 3 days.
tableName := "users"
stmt := fmt.Sprintf("CREATE TABLE IF NOT EXISTS %s "+
"(id integer, name STRING, PRIMARY KEY(id) "+
"USING TTL 3 DAYS)", tableName)
// Call the appropriate constructor for
// 1) Provisioned Capacity
// &nosqldb.TableLimits(ReadUnits: 50, WriteUnits: 50, StorageGB: 25);
// 2) On-demand Capacity - only set storage limit
// &nosqldb.TableLimits(StorageGB: 25 );
// In this example, we will use Provisioned Capacity
tableReq := &nosqldb.TableRequest{
Statement: stmt,
TableLimits: &nosqldb.TableLimits{
ReadUnits: 50,
WriteUnits: 50,
StorageGB: 25,
},
}
tableRes, err := client.DoTableRequest(tableReq)
if err != nil {
fmt.Printf("cannot initiate CREATE TABLE request: %v\n", err)
return
}
_, 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)
//Create an index called nameIdx on the name field in the users table
stmt_ind := fmt.Sprintf("CREATE INDEX IF NOT EXISTS nameIdx ON users(name)")
tableReq := &nosqldb.TableRequest{Statement: stmt_ind}
tableRes, err := client.DoTableRequest(tableReq)
if err != nil {
fmt.Printf("cannot initiate CREATE INDEX request: %v\n", err)
return
}
_, err = tableRes.WaitForCompletion(client, 60*time.Second, time.Second)
if err != nil {
fmt.Printf("Error finishing CREATE INDEX request: %v\n", err)
return
}
fmt.Println("Created index nameIdx ")
Busque la lista de tablas:
req := &nosqldb.ListTablesRequest{Timeout: 3 * time.Second,}
res, err := client.ListTables(req)
if len(res.Tables)== 0{
fmt.Printf("No tables in the given compartment"
return
}
fmt.Printf("The tables in the given compartment are:\n" )
for i, table := range res.Tables {
fmt.Printf(table)
}
req := &nosqldb.GetTableRequest{
TableName: table_name, Timeout: 3 * time.Second, }
res, err := client.GetTable(req)
fmt.Printf("The schema details for the table is:state=%s,
limits=%v\n", res.State,res.Limits)
Las sentencias DDL de tabla se ejecutan mediante el método tableDDL
. Al igual que la mayoría de los otros métodos de la clase NoSQLClient
, 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 TableLimit.
El método tableDDL
toma el objeto opt como el 2o 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 GB de almacenamiento.
Tenga en cuenta que el método tableDDL
solo inicia la operación DDL especificada en el almacén subyacente y no espera su finalización. La TableResult
resultante tendrá probablemente uno de los estados de tabla intermedios como TableState.CREATING
, TableState.DROPPING
o TableState.UPDATING
(esta última se produce cuando la tabla está en proceso de ser modificada por la sentencia ALTER TABLE, se están cambiando los límites de tabla o se está creando o borrando uno de sus índices).
TableState.ACTIVE
o TableState.DROPPED
(este último si la operación DDL es DROP TABLE).const NoSQLClient = require('oracle-nosqldb').NoSQLClient;
const TableState = require('oracle-nosqldb').TableState;
const client = new NoSQLClient('config.json');
async function createUsersTable() {
try {
const statement = 'CREATE TABLE IF NOT EXISTS users(id INTEGER, ' +
'name STRING, PRIMARY KEY(id))';
// Call the appropriate constructor for
// 1) Provisioned Capacity
// tableLimits: {readUnits: 50, writeUnits: 50, storageGB: 25);
// 2) On-demand Capacity - only set storage limit
// tableLimits: {storageGB: 25 );
// In this example, we will use Provisioned Capacity
let result = await client.tableDDL(statement, {
tableLimits: {
readUnits: 50,
writeUnits: 50,
storageGB: 25
}
});
result = await client.forCompletion(result);
console.log('Table users created');
} catch(error) {
//handle errors
}
}
const statement = 'CREATE TABLE IF NOT EXISTS users(id INTEGER, ' +
'name STRING, PRIMARY KEY(id))';
// Call the appropriate constructor for
// 1) Provisioned Capacity
// tableLimits: {readUnits: 50, writeUnits: 50, storageGB: 25);
// 2) On-demand Capacity - only set storage limit
// tableLimits: {storageGB: 25 );
// In this example, we will use Provisioned Capacity
let result = await client.tableDDL(statement, {
tableLimits: {
readUnits: 50,
writeUnits: 50,
storageGB: 25
},
complete: true
});
console.log('Table users created');
No es necesario especificar TableLimits
para ninguna operación DDL que no sea CREATE TABLE. También puede cambiar los límites de tabla de la tabla después de crearla llamando al método setTableLimits
. Esto también puede necesitar esperar a que finalice la operación de la misma manera que esperar a que finalicen las operaciones iniciadas por tableDDL
.
// Create an index called nameIdx on the name field in the users table.
try {
const statement = 'CREATE INDEX IF NOT EXISTS nameIdx ON users(name))';
let result = await client.tableDDL(statement);
result = await client.forCompletion(result);
console.log('Index nameIdx created');
} catch(error){
//handle errors
}
Busque la lista de tablas:
let varListTablesResult = await client.listTables();
console.log("The tables in the given compartment are:")
{res.send(varListTablesResult)}
let resExistingTab = await client.getTable(tablename);
{ await client.forCompletion(resExistingTab);}
console.log("The schema details for the table is:")
{ res.send(resExistingTab.schema)}
Para crear tablas y ejecutar otras sentencias de lenguaje de definición de datos (DDL), como la creación, modificación y borrado de tablas, así como la creación y borrado de índices, utilice los métodos ExecuteTableDDLAsync
y ExecuteTableDDLWithCompletionAsync
. Los métodos ExecuteTableDDLAsync
y ExecuteTableDDLWithCompletionAsync
devuelven Task<TableResult>
. La instancia TableResult contiene el estado de la operación DDL, como TableState, esquema de tabla y TableLimits. Cada uno de estos métodos viene con varias sobrecargas. En particular, puede transferir opciones para la operación DDL como TableDDLOptions
.
TableLimits
de TableDDLOptions
. Tenga en cuenta que son operaciones de ejecución potencialmente largas. El método ExecuteTableDDLAsync
solo inicia la operación DDL especificada por el servicio y no espera su finalización. Puede esperar de forma asíncrona a que termine la operación DDL de la tabla llamando a WaitForCompletionAsync
en la instancia TableResult devuelta.var client = new NoSQLClient("config.json");
try {
var statement = "CREATE TABLE IF NOT EXISTS users(id INTEGER,"
+ "name STRING, PRIMARY KEY(id))";
// Call the appropriate constructor for
// 1) Provisioned Capacity
// new TableLimits(50, 50, 25);
// 2) On-demand Capacity - only set storage limit
// new TableLimits( 25 );
// In this example, we will use Provisioned Capacity
var result = await client.ExecuteTableDDLAsync(statement, new
TableLimits(50, 50, 25));
await result.WaitForCompletionAsync();
Console.WriteLine("Table users created.");
} catch(Exception ex) {
// handle exceptions
}
Tenga en cuenta que WaitForCompletionAsync
cambiará la instancia TableResult de llamada para reflejar la finalización de la operación.
ExecuteTableDDLWithCompletionAsync
. Sustituya las sentencias del bloque try-catch por lo siguiente:var statement = "CREATE TABLE IF NOT EXISTS users(id INTEGER,"
+ "name STRING, PRIMARY KEY(id))";
// Call the appropriate constructor for
// 1) Provisioned Capacity
// new TableLimits(50, 50, 25);
// 2) On-demand Capacity - only set storage limit
// new TableLimits(25 );
// In this example, we will use Provisioned Capacity
await client.ExecuteTableDDLWithCompletionAsync(statement,
new TableLimits(50, 50, 25));
Console.WriteLine("Table users created.");
No es necesario especificar TableLimits para ninguna operación DDL que no sea CREATE TABLE. También puede cambiar los límites de tabla de una tabla existente llamando a los métodos SetTableLimitsAsync
o SetTableLimitsWithCompletionAsync
.
Busque la lista de tablas:
varresult = await client.ListTablesAsync();
console.WriteLine("The tables in the given compartment are:")
foreach(var tableName inresult.TableNames){
Console.WriteLine(tableName);
}
Temas relacionados