Usando APIs para criar uma Tabela Única

A tabela é a estrutura básica para armazenar dados do usuário. Você usa um comando SQL (instrução CREATE TABLE) ou comandos da API TableRequest para criar uma nova tabela.

Você também pode usar a console do OCI (Oracle NoSQL Cloud Infrastructure) ou a interface de linha de comando do OCI (OCI-cli) para criar uma tabela no NDCS.

Diretrizes para a criação de uma tabela:
  • A definição de tabela deve incluir pelo menos uma definição de campo e exatamente uma definição de chave primária. Para obter mais informações sobre a definição de chave primária, consulte Criar Tabela.
  • A definição do campo especifica o nome da coluna, seu tipo de dados, se a coluna é anulável ou não, um valor padrão opcional, se a coluna é ou não uma coluna IDENTITY e um comentário opcional. Todos os campos (que não sejam PRIMARY KEY) podem ser anulados por padrão.
  • A sintaxe da especificação de chave primária (key_definition) especifica as colunas de chave primária da tabela como uma lista ordenada de nomes de campo.
  • O valor do Tempo de Vida (TTL) é usado para calcular o tempo de expiração de uma linha. As linhas expiradas não são incluídas nos resultados da consulta e são removidas automaticamente da tabela pelo Oracle NoSQL Database. Se você especificar um valor de TTL ao criar a tabela, ele será aplicado como o TTL padrão para cada linha inserida nessa tabela.

Usando comandos SQL

Você pode usar o comando CREATE TABLE em SQL para criar tabelas NoSQL.

Exemplo 1: A instrução CREATE TABLE a seguir define uma tabela BaggageInfo que contém informações de bagagem de passageiros em um sistema de companhia aérea.
CREATE TABLE BaggageInfo (
ticketNo LONG,
fullName STRING,
gender STRING,
contactPhone STRING,
confNo STRING,
bagInfo JSON,
PRIMARY KEY (ticketNo)
)
Exemplo 2: A instrução CREATE TABLE a seguir define uma tabela stream_acct que contém dados de um aplicativo de streaming de TV.
CREATE TABLE stream_acct(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(1),
acct_data JSON, 
PRIMARY KEY(acct_id)
)
Exemplo 3: A instrução CREATE TABLE a seguir define uma tabela stream_acct_new que contém dados de um aplicativo de streaming de TV. As linhas da tabela expiram em 2 dias.
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

Usando a API TableRequest

Você pode usar a API TableRequest para criar tabelas NoSQL.

A classe TableRequest é usada para criar tabelas. A execução das operações especificadas por esta solicitação é assíncrona. Estas são operações de execução potencialmente longa. TableResult é retornado das operações TableRequest e encapsula o estado da tabela. Consulte Oracle NoSQL Java SDK API Reference para obter mais detalhes sobre a classe TableRequest e seus métodos.

Faça download do código completo CreateTable.java nos exemplos aqui.
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);
}

Observação:

Os limites de tabela são aplicáveis somente ao Oracle NoSQL Database Cloud Service. Se forem definidos limites para um Banco de Dados NoSQL local, eles serão ignorados silenciosamente.

Criando uma tabela filha: Você usa a mesma classe e os mesmos métodos TableRequest para executar a instrução DDL para criar uma tabela filha.

Ao criar uma tabela filho:
  • Você precisa especificar o nome completo da tabela (name_parent_table.name_child_table)
  • Os limites da tabela não precisam ser definidos explicitamente, pois uma tabela filho herda os limites de uma tabela pai.

Faça download do código completo TableJoins.java dos exemplos para entender como criar uma tabela pai-filho aqui.

A classe borneo.TableRequest é usada para criar uma tabela. Todas as chamadas para borneo.NoSQLHandle.table_request() são assíncronas; portanto, é necessário verificar o resultado e chamar borneo.TableResult.wait_for_completion() para aguardar a conclusão da operação. Consulte Oracle NoSQL Python SDK API Reference para obter mais detalhes sobre table_request e seus métodos.

Faça download do código completo CreateTable.py nos exemplos aqui.
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()))

Observação:

Os limites de tabela são aplicáveis somente ao Oracle NoSQL Database Cloud Service. Se forem definidos limites para um Banco de Dados NoSQL local, eles serão ignorados silenciosamente.

Criando uma tabela filha: Você usa a mesma classe e os mesmos métodos TableRequest para executar a instrução DDL para criar uma tabela filha.

Ao criar uma tabela filho:
  • Você precisa especificar o nome completo da tabela (name_parent_table.name_child_table).
  • Os limites da tabela não precisam ser definidos explicitamente, pois uma tabela filho herda os limites de uma tabela pai.

Faça download do código completo TableJoins.py nos exemplos aqui.

A classe TableRequest é usada para criar uma tabela. A execução de operações especificadas por TableRequest é assíncrona. Estas são operações de execução potencialmente longa. Essa solicitação é usada como a entrada de uma operação Client.DoTableRequest(), que retorna um TableResult que pode ser usado para sondar até que a tabela atinja o estado desejado. Consulte Referência da API do Oracle NoSQL Go SDK para obter mais detalhes sobre os vários métodos da classe TableRequest.

Faça download do código completo CreateTable.go nos exemplos aqui.
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
}

Observação:

Os limites de tabela são aplicáveis somente ao Oracle NoSQL Database Cloud Service. Se forem definidos limites para um Banco de Dados NoSQL local, eles serão ignorados silenciosamente.

Criando uma tabela filha: Você usa a mesma classe e os mesmos métodos TableRequest para executar a instrução DDL para criar uma tabela filha.

Ao criar uma tabela filho:
  • Você precisa especificar o nome completo da tabela (name_parent_table.name_child_table).
  • Os limites da tabela não precisam ser definidos explicitamente, pois uma tabela filho herda os limites de uma tabela pai.

Faça download do código completo TableJoins.go nos exemplos aqui.

Você pode criar uma tabela usando o método tableDDL. Esse método é assíncrono e retorna uma Promessa de TableResult. O TableResult é um objeto JavaScript simples que contém o status da operação DDL, como TableState, nome, esquema e TableLimits. Para obter detalhes do método, consulte a classe NoSQLClient.

O método tableDDL usa o objeto TableDDLOpt como o segundo argumento opcional. Ao criar uma tabela, você deve especificar seu TableLimits como parte do argumento opt. O TableLimits especifica o throughput máximo e a capacidade de armazenamento da tabela como a quantidade de unidades de leitura, unidades de gravação e Gigabytes de armazenamento.

Faça download do código JavaScript completo CreateTable.js nos exemplos aqui e do código TypeScript completo CreateTable.ts nos exemplos aqui.

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);
}
Depois que a chamada acima retornar, o resultado refletirá o estado final da operação. Como alternativa, para usar a opção completa, substitua o código no bloco try-catch acima pela amostra de código a seguir.
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);

Criando uma tabela filha: Você usa a mesma classe e os mesmos métodos TableRequest para executar a instrução DDL para criar uma tabela filha.

Ao criar uma tabela filho:
  • Você precisa especificar o nome completo da tabela (name_parent_table.name_child_table)
  • Os limites da tabela não precisam ser definidos explicitamente, pois uma tabela filho herda os limites de uma tabela pai.

Faça download do código JavaScript completo TableJoins.js nos exemplos aqui e do código TypeScript completo TableJoins.ts nos exemplos aqui.

Para criar uma tabela, use um dos métodos ExecuteTableDDLAsync ou ExecuteTableDDLWithCompletionAsync. Esses dois métodos retornam Task<TableResult>. A instância TableResult contém o status da operação DDL, como TableState e esquema de tabela. Consulte Referência da API do Oracle NoSQL Dotnet SDK para obter mais detalhes sobre esses métodos.

Faça download do código completo CreateTable.cs nos exemplos aqui.
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);  
}

Observação:

Os limites de tabela são aplicáveis somente ao Oracle NoSQL Database Cloud Service. Se forem definidos limites para um Banco de Dados NoSQL local, eles serão ignorados silenciosamente.

Criando uma tabela filha: Você usa a mesma classe e os mesmos métodos TableRequest para executar a instrução DDL para criar uma tabela filha.

Ao criar uma tabela filho:
  • Você precisa especificar o nome completo da tabela (name_parent_table.name_child_table)
  • Os limites da tabela não precisam ser definidos explicitamente, pois uma tabela filho herda os limites de uma tabela pai.

Faça download do código completo TableJoins.cs nos exemplos aqui.