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.
- 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.
A seção a seguir destaca diferentes opções que podem ser usadas durante a criação de uma tabela usando a instrução CREATE TABLE DDL.
CREATE TABLE BaggageInfo (
ticketNo LONG,
fullName STRING,
gender STRING,
contactPhone STRING,
confNo STRING,
bagInfo JSON,
PRIMARY KEY (ticketNo)
)No esquema acima, você usa a instrução CREATE TABLE para definir uma tabela BaggageInfo. O número do bilhete do passageiro, ticketNo, é a chave primária da tabela. Os campos fullName, gender, contactPhone e confNo (número da reserva) armazenam as informações do passageiro, que fazem parte de um esquema fixo. A coluna bagInfo é um array JSON sem esquema, que representa as informações de rastreamento da bagagem de porão de um passageiro.
Para obter mais detalhes sobre o aplicativo de rastreamento de bagagem de companhia aérea, consulte Aplicativo de rastreamento de bagagem de companhia aérea.
CREATE TABLE stream_acct(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(9),
acct_data JSON,
PRIMARY KEY(acct_id)
)USING TTL 5 DAYSNo esquema acima, você usa a instrução CREATE TABLE para criar uma tabela stream_acct. O campo ID da conta do assinante, acct_id, é a chave primária nesta tabela. Os campos profile_name, account_expiry armazenam os detalhes da viewership, que faz parte do esquema fixo. A coluna acct_data é um campo JSON sem esquema, que armazena os detalhes das mostras exibidas por um assinante.
Para obter mais detalhes sobre o aplicativo de serviço de streaming de mídia, consulte Streaming Media Service - Armazenamento de perfis de usuário persistente
Você também especifica um valor TTL, após o qual as linhas expiram automaticamente e não estão mais disponíveis. O valor TTL deve estar em HOURS ou DAYS. Neste esquema, as linhas da tabela expiram após 5 dias.
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)
)No esquema acima, você define uma variação do esquema fixo incluindo o campo acct_data como um tipo de dados RECORD.
Um registro é uma coleção ordenada de um ou mais pares de item-chave. As chaves em um registro devem ser strings e os itens associados podem ser de diferentes tipos de dados. Os campos em um registro fazem parte do esquema fixo e você não poderá adicioná-los nem removê-los. No exemplo acima, os campos firstName, lastName, country e shows são as chaves do registro acct_data. A definição de um registro é útil quando você deseja armazenar dados como parte de um conjunto de dados maior. Você pode inserir/atualizar/buscar todo o subconjunto em um registro usando as expressões de etapa 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)
)O campo shows é um tipo RECORD aninhado usado para rastrear os detalhes das mostras exibidas.
Exemplo 4: Crie uma tabela de serviço de streaming de mídia como uma estrutura de tabela hierárquica.
stream_acct como tabela pai e a tabela acct_data como tabela filho: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))Com a definição de tabela pai-filho acima, o serviço de mídia de streaming pode suportar vários perfis de usuário em uma única assinatura.
Você define a tabela acct_data como uma tabela filha com uma chave primária profile_id para identificar o perfil de um usuário. Além de definir uma chave primária para a tabela, a tabela acct_data herda implicitamente a coluna de chave primária acct_id de sua tabela pai stream_acct.
Você pode definir várias tabelas filho na mesma tabela pai stream_acct. Você pode definir ainda mais tabelas filho para a tabela acct_data. Todas as tabelas na hierarquia têm a mesma coluna de chave de partição, que é especificada na instrução de criação de tabela da tabela pai mais alta na hierarquia. Neste exemplo, a chave primária acct_id da tabela pai também é a chave de partição das tabelas stream_acct e acct_data.
Tópicos Relacionados
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.
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.
- 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.
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.
- 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.
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.
- 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);
}
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.
- 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.
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.
- 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.