As operações DDL do Tablestore criam mapeamentos SQL para tabelas de dados ou índices de pesquisa existentes e gerenciam o esquema e os metadados das tabelas de mapeamento.
Visão geral das instruções DDL
|
Instrução |
Engine |
Descrição |
|
CREATE TABLE |
tablestore |
Cria um mapeamento para uma tabela de dados. O mecanismo SQL seleciona automaticamente o índice ideal para consultas. |
|
CREATE TABLE |
searchindex |
Cria um mapeamento para um índice de pesquisa. O mecanismo SQL executa consultas usando o índice de pesquisa especificado. |
|
ALTER TABLE |
- |
Adiciona ou remove colunas de atributo em uma tabela de mapeamento existente. |
|
DROP MAPPING TABLE |
- |
Remove um mapeamento sem afetar a tabela de dados ou o índice subjacente. |
|
DESCRIBE |
- |
Retorna os nomes dos campos, tipos de dados, sinalizadores de chave primária e aceitação de valores nulos de uma tabela de mapeamento. |
|
SHOW INDEX |
- |
Retorna as informações de índice associadas a uma tabela de mapeamento, incluindo índices de chave primária, secundários e de pesquisa. |
|
SHOW TABLES |
- |
Lista todas as tabelas de mapeamento na instância atual. |
Diferentemente dos bancos de dados relacionais tradicionais, CREATE TABLE no Tablestore não cria uma tabela física. Em vez disso, cria um mapeamento de acesso SQL para uma tabela de dados ou índice de pesquisa existente. DROP MAPPING TABLE remove apenas o mapeamento e mantém os dados subjacentes intactos.
Criar um mapeamento de tabela de dados
Uma instrução CREATE TABLE com ENGINE='tablestore' cria um mapeamento para uma tabela de dados existente. Após a criação do mapeamento, o mecanismo SQL seleciona automaticamente o índice ideal (chave primária, índice secundário ou índice de pesquisa) para executar consultas.
Sintaxe
CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type [NOT NULL | NULL], ...
PRIMARY KEY(key_part [, key_part])
)
ENGINE='tablestore',
ENGINE_ATTRIBUTE='{"consistency": consistency [,"allow_inaccurate_aggregation": allow_inaccurate_aggregation]}';
Para tabelas com uma única coluna de chave primária, especifique PRIMARY KEY diretamente na definição da coluna:
CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type PRIMARY KEY,
column_name data_type [NOT NULL | NULL], ...
)
ENGINE='tablestore',
ENGINE_ATTRIBUTE='{"consistency": consistency}';
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
IF NOT EXISTS |
Não |
Se especificado, o sistema não retorna erro quando a tabela de mapeamento já existe. Caso contrário, ocorre o erro |
|
|
table_name |
Sim |
Nome da tabela de mapeamento. Deve corresponder ao nome da tabela de dados. |
|
|
column_name |
Sim |
Nome da coluna. Os nomes das colunas em SQL devem corresponder aos nomes das colunas na tabela de dados (sem distinção entre maiúsculas e minúsculas). Por exemplo, se a coluna da tabela de dados for |
|
|
data_type |
Sim |
Tipo de dados SQL da coluna. Deve corresponder ao tipo da coluna na tabela de dados. Colunas de chave primária aceitam apenas BIGINT, VARCHAR(1024) e VARBINARY(1024). Colunas de atributo também aceitam DOUBLE, BOOL, MEDIUMTEXT e MEDIUMBLOB. Para obter o mapeamento completo de tipos, consulte Mapeamentos de tipos de dados em SQL. |
|
|
NOT NULL \ |
NULL |
Não |
Define se a coluna aceita valores NULL. Colunas de chave primária assumem NOT NULL como padrão. Colunas de atributo assumem NULL como padrão. Especifique NOT NULL para colunas de atributo que exigem valor obrigatório. |
|
PRIMARY KEY |
Sim |
Definição da chave primária. A chave primária deve corresponder às colunas de chave primária da tabela de dados em ordem e tipo. |
|
|
ENGINE |
Não |
Tipo de mecanismo de execução. O padrão é |
|
|
consistency |
Não |
Nível de consistência dos resultados da consulta. Valores válidos: |
|
|
allow_inaccurate_aggregation |
Não |
Define se a precisão da agregação pode ser trocada por desempenho de consulta. O padrão é |
Exemplos
Crie um mapeamento para exampletable com colunas de chave primária colvalue (VARCHAR) e id (BIGINT), além de uma coluna de atributo content (MEDIUMTEXT):
CREATE TABLE exampletable(colvalue VARCHAR(1024), id BIGINT, content MEDIUMTEXT, PRIMARY KEY(colvalue, id)) ENGINE='tablestore';
Crie um mapeamento com consistência forte:
CREATE TABLE exampletable2(id BIGINT(20), colvalue VARCHAR(1024), content MEDIUMTEXT, PRIMARY KEY(colvalue, id)) ENGINE_ATTRIBUTE='{"consistency": "strong"}';
Criar um mapeamento de índice de pesquisa
Para criar um mapeamento para um índice de pesquisa existente, use uma instrução CREATE TABLE com ENGINE='searchindex'. Após a criação do mapeamento, o mecanismo SQL executa todas as consultas usando o índice de pesquisa especificado.
Casos de uso
Necessidade de recursos de índice de pesquisa, como pesquisa de texto completo, pesquisa vetorial ou consultas de tipo aninhado.
Requisito de fixar o roteamento de consultas em um índice de pesquisa específico, em vez de depender da seleção automática de índice pelo mecanismo SQL.
Sintaxe
CREATE TABLE [IF NOT EXISTS] user_defined_name(
column_name data_type [, column_name data_type]
)
ENGINE='searchindex',
ENGINE_ATTRIBUTE='{"index_name": index_name, "table_name": table_name}';
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
IF NOT EXISTS |
Não |
Se especificado, o sistema não retorna erro quando a tabela de mapeamento já existe. |
|
user_defined_name |
Sim |
Nome personalizado da tabela de mapeamento. Não precisa corresponder ao nome da tabela de dados ou do índice. |
|
column_name |
Sim |
Nome da coluna. Definições de chave primária não são necessárias. Tabelas de mapeamento de índice de pesquisa não aceitam o tipo VARCHAR. Use MEDIUMTEXT para colunas de string. |
|
index_name |
Sim |
Nome do índice de pesquisa. Especificado em ENGINE_ATTRIBUTE. O índice já deve existir. |
|
table_name |
Sim |
Nome da tabela de dados à qual o índice de pesquisa pertence. Especificado em ENGINE_ATTRIBUTE. |
Exemplos
Crie uma tabela de mapeamento search_exampletable1 para o índice de pesquisa exampletable1_index na tabela de dados exampletable1:
CREATE TABLE search_exampletable1(id BIGINT, colvalue MEDIUMTEXT, content MEDIUMTEXT) ENGINE='searchindex' ENGINE_ATTRIBUTE='{"index_name": "exampletable1_index", "table_name": "exampletable1"}';
Use IF NOT EXISTS para evitar erros quando o mapeamento já existir:
CREATE TABLE IF NOT EXISTS search_exampletable1(id BIGINT, colvalue MEDIUMTEXT, content MEDIUMTEXT) ENGINE='searchindex' ENGINE_ATTRIBUTE='{"index_name": "exampletable1_index", "table_name": "exampletable1"}';
Atualizar colunas da tabela de mapeamento
A instrução ALTER TABLE adiciona ou remove colunas de atributo em uma tabela de mapeamento existente.
Apenas tabelas de mapeamento criadas com uma instrução
CREATE TABLEaceitamALTER TABLE. Tabelas de mapeamento vinculadas automaticamente porDESCRIBEou outras instruções não aceitam esta operação.Cada instrução adiciona ou remove uma coluna. Para modificar várias colunas, execute a instrução múltiplas vezes.
ALTER TABLEatualiza apenas o esquema da tabela de mapeamento e não afeta a estrutura de armazenamento da tabela de dados.Não é possível adicionar ou remover colunas de chave primária.
Após a execução desta instrução, o mecanismo SQL faz uma atualização assíncrona que leva até 30 segundos para ser concluída. Consultas realizadas durante a atualização podem não retornar a nova coluna.
Sintaxe
ALTER TABLE table_name option column_name [data_type];
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
table_name |
Sim |
Nome da tabela de mapeamento. |
|
option |
Sim |
Tipo de operação: |
|
column_name |
Sim |
Nome da coluna. Ao adicionar uma coluna, o nome não pode duplicar um nome de coluna existente. As regras de maiúsculas e minúsculas para nomes de colunas são as mesmas de |
|
data_type |
Apenas para |
Tipo de dados SQL da coluna. O tipo de dados deve corresponder à coluna correspondente na tabela de dados. Não necessário para |
Exemplos
Adicione colunas de atributo a uma tabela de mapeamento:
ALTER TABLE exampletable ADD COLUMN colvalue BIGINT;
ALTER TABLE exampletable ADD COLUMN content MEDIUMTEXT;
Remova uma coluna de atributo de uma tabela de mapeamento:
ALTER TABLE exampletable DROP COLUMN colvalue;
Remover um mapeamento
A instrução DROP MAPPING TABLE remove uma ou mais tabelas de mapeamento.
Esta instrução remove apenas o mapeamento SQL. A tabela de dados subjacente e seus dados permanecem inalterados.
Sintaxe
DROP MAPPING TABLE [IF EXISTS] table_name, ...;
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
table_name |
Sim |
Nome da tabela de mapeamento. Separe vários nomes com vírgulas (,). |
|
IF EXISTS |
Não |
Se especificado, o sistema não retorna erro quando o mapeamento não existe. Caso contrário, ocorre o erro |
Exemplos
DROP MAPPING TABLE IF EXISTS exampletable;
Visualizar detalhes da tabela
A instrução DESCRIBE retorna os nomes dos campos, tipos de dados, aceitação de valores nulos e sinalizadores de chave primária de uma tabela de mapeamento.
Sintaxe
DESCRIBE table_name;
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
table_name |
Sim |
Nome da tabela de mapeamento. |
Exemplos
Visualize os detalhes da tabela de mapeamento exampletable:
DESCRIBE exampletable;
A saída contém as seguintes colunas:
|
Coluna |
Exemplo |
Descrição |
|
Field |
pk1 |
Nome do campo. |
|
Type |
varchar(1024) |
Tipo de dados SQL do campo. |
|
Null |
NO |
Indica se o campo aceita valores NULL. NO para colunas de chave primária. YES para colunas de atributo. |
|
Key |
PRI |
Sinalizador de chave primária. PRI indica uma coluna de chave primária. Um valor vazio indica uma coluna de atributo. |
Visualizar detalhes do índice
A instrução SHOW INDEX retorna os índices associados a uma tabela de mapeamento, incluindo índices de chave primária, secundários e de pesquisa.
Sintaxe
SHOW INDEX {FROM | IN} table_name;
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
table_name |
Sim |
Nome da tabela de mapeamento. |
Exemplos
Visualize os índices de um mapeamento de tabela de dados (retorna índices de chave primária, secundários e de pesquisa):
SHOW INDEX IN exampletable;
A coluna Index_type indica o tipo de índice: um valor vazio para um índice de chave primária, GlobalIndex para um índice secundário e SearchIndex para um índice de pesquisa.
Visualize os índices de um mapeamento de índice de pesquisa:
SHOW INDEX IN search_exampletable1;
Para tabelas de mapeamento de índice de pesquisa, SHOW INDEX retorna _system_hidden_pk_field como o índice de chave primária (uma chave primária oculta gerada pelo sistema). Cada coluna também mostra um valor Search_type como LONG, KEYWORD ou TEXT.
Visualizar tabelas de mapeamento
SHOW TABLES lista todas as tabelas de mapeamento na instância atual.
Sintaxe
SHOW TABLES;
Saída de exemplo:
+------------------------+
| Tables_in_myinstance |
+------------------------+
| exampletable |
+------------------------+
| search_exampletable1 |
+------------------------+
Erros comuns
Os seguintes erros podem ocorrer quando uma instrução DDL falha.
|
Mensagem de erro |
Instrução |
Causa e solução |
|
Table 'instance.table' doesn't exist |
|
A tabela de dados não existe. |
|
Table 'instance.table' already exists |
|
O mapeamento já existe. Para suprimir este erro, use |
|
Unknown mapping table 'instance.table' |
|
O mapeamento não existe. Para suprimir este erro, use |
|
Unsupported alter non-mapping table |
|
A tabela de destino não é uma tabela de mapeamento criada com |