A instrução CREATE TABLE cria tabelas no LindormTable ou LindormTSDB. Ela oferece suporte a tipos de dados como VARCHAR, TIMESTAMP e BIGINT, além de atributos de tabela como TTL e COMPRESSION, adequando-se a diversos cenários de negócios.
Engine e versão
O comando CREATE TABLE aplica-se ao LindormTable e ao LindormTSDB.
O LindormTSDB suporta a sintaxe padrão CREATE TABLE nas versões 3.4.32 e posteriores. Para visualizar ou atualizar a versão, consulte as Notas de versão do LindormTSDB e Atualizar uma versão secundária.
Sintaxe
create_table_statement ::= CREATE TABLE [ IF NOT EXISTS ] table_identifier
'('
column_definition
( ',' column_definition )*
',' PRIMARY KEY '(' primary_key ')'
( ',' {KEY|INDEX} [index_identifier]
[ USING index_method_definition ]
[ INCLUDE column_identifier ( ',' column_identifier )* ]
[ WITH index_options ]
)*
')'
[ PARTITION BY partition_definition ]
[ ZORDER BY zorder_column_list ]
[ WITH table_options ]
column_definition ::= column_identifier data_type [ NOT NULL ]
primary_key ::= column_identifier [ ',' column_identifier (ASC|DESC)]
index_method_definition ::= { KV | SEARCH }
index_options ::= '('
option_definition (',' option_definition )*
')'
partition_definition ::= HASH '(' column_identifier (',' column_identifier )* ')'
zorder_column_list ::= column_identifier ( ',' column_identifier )*
table_options ::= '(' option_definition (',' option_definition )* ')'
option_definition ::= option_identifier '=' string_literal
Diferenças de sintaxe
A sintaxe CREATE TABLE difere entre o LindormTable e o LindormTSDB. A tabela a seguir compara os parâmetros suportados por cada engine.
|
Parâmetro |
LindormTable |
LindormTSDB |
|
|
0 |
0 |
||
|
0 |
0 |
||
|
0 |
0 |
||
|
Expressão de índice (KEY|INDEX)[Expressão de índice (KEY |
INDEX)](#bb9b8e1047cvt) |
0 |
✖️ |
|
✖️ |
0 |
||
|
0 |
✖️ |
Uso
Nome da tabela (table_identifier)
O nome da tabela deve atender aos seguintes requisitos:
Pode conter dígitos, letras maiúsculas, letras minúsculas, pontos (.), hifens (-) e sublinhados (_).
Não pode começar com ponto (.) ou hífen (-).
Deve ter entre 1 e 255 caracteres.
Definição de coluna (column_definition)
|
Sintaxe |
Obrigatório |
Descrição |
|
nome da coluna (column_identifier) |
Sim |
|
|
tipo de dado (data_type) |
Sim |
Para mais informações sobre os tipos de dados suportados, consulte Tipos de dados. Importante
Ao criar uma tabela de séries temporais, observe o seguinte se utilizar o tipo de dado TIMESTAMP:
|
|
Restrição NULL |
Não |
Indica se a coluna permite valores NULL. Importante
O Lindorm SQL não valida essa restrição. A engine de armazenamento realiza a validação. A validação da restrição NULL depende das regras da engine de armazenamento, que variam entre si. Consequentemente, pode ser possível gravar valores NULL em uma coluna mesmo que ela esteja definida com NOT NULL. Para garantir que os dados sejam gravados conforme esperado, siga estes requisitos:
|
Chave primária (primary_key)
Uma chave primária identifica exclusivamente os dados em uma tabela e consiste em uma ou mais colunas. Você deve especificar uma chave primária (PRIMARY KEY) ao criar uma tabela.
A chave primária não pode ser modificada após a criação. Planeje sua chave primária com cuidado.
Ao usar a instrução CREATE TABLE para criar uma tabela, observe o seguinte:
|
Tipo de engine |
Descrição |
|
LindormTable |
|
|
LindormTSDB |
|
Expressão de índice (KEY|INDEX)
Use a palavra-chave KEY ou INDEX em uma instrução CREATE TABLE para criar um índice junto com a tabela.
A expressão de índice (KEY|INDEX) é suportada apenas no LindormTable 2.7.7 e posteriores e no Lindorm SQL 2.8.6.0 e posteriores.
Para verificar as versões do LindormTable e do Lindorm SQL, consulte as Notas de versão do LindormTable e as Notas de versão do SQL. Se não for possível atualizar para as versões necessárias no console, entre em contato com o suporte técnico do Lindorm. O ID do DingTalk é s0s3eg3.
Uso
Caso você não especifique explicitamente um nome de índice, o sistema gera um por padrão. O formato do nome gerado é
TableName_idx_${auto-incremented ID}.Com uma expressão de índice, atualmente é possível criar apenas índices secundários e índices de pesquisa.
-
Inclusão padrão de colunas para índices secundários:
Lindorm SQL 2.9.3.10 e posteriores
Se você não especificar uma cláusula
INCLUDEao criar um índice secundário, todas as outras colunas não serão incluídas no índice por padrão.Versões do Lindorm SQL anteriores à 2.9.3.10
Se você não especificar uma cláusula
INCLUDEao criar um índice secundário, todas as outras colunas serão incluídas no índice por padrão.NotaIsso equivale a definir o atributo de índice INDEX_COVERED_TYPE como
COVERED_ALL_COLUMNS_IN_SCHEMA. Se a tabela for dinâmica, isso equivale a definir o atributo comoCOVERED_DYNAMIC_COLUMNS. Se você especificar uma cláusula
KEYouINDEXao criar uma tabela, mas não especificar explicitamente os atributos MUTABILITY e CONSISTENCY, a tabela será criada com os seguintes atributos padrão:CONSISTENCY = 'strong'eMUTABILITY='MUTABLE_LATEST'.Se a instrução CREATE TABLE incluir uma expressão de índice, o sistema cria primeiro a tabela e depois o índice. Caso ocorra uma exceção durante a criação do índice, a tabela e o índice podem permanecer e não são limpos automaticamente. É possível usar instruções como
SHOWeDESCRIBEpara visualizá-los, mas talvez não seja possível gravar dados ou consultar a tabela e o índice. Recomendamos excluir a tabela e o índice restantes e recriá-los.
Partição (partition_definition)
Partições são suportadas apenas pelo LindormTSDB. Em uma tabela de séries temporais, a coluna usada na cláusula PARTITION BY deve ser uma coluna de chave primária VARCHAR.
Use PARTITION BY HASH(column1, column2, ..., columnN) para especificar uma ou mais colunas para particionamento por hash. Por exemplo: PARTITION BY HASH(c1, p1).
Atributos da tabela (table_options)
Apenas o LindormTable suporta atributos de tabela. Use a palavra-chave WITH para adicionar os seguintes atributos:
|
Opção |
Tipo |
Descrição |
|
COMPRESSION |
STRING |
Algoritmo de compressão para a tabela. Valores válidos:
Nota
Em versões do LindormTable anteriores à 2.3.4, nenhum algoritmo de compressão é especificado por padrão. No LindormTable 2.3.4 e posteriores, o algoritmo ZSTD é usado por padrão. |
|
TTL |
INT |
Tempo de vida (TTL) dos dados, em segundos (s). Nota
|
|
COMPACTION_MAJOR_PERIOD |
LONG |
Intervalo no qual o sistema executa uma Nota
Valor padrão: Math.Min(TTL, 1.728.000.000 ms). Se você não definir um TTL, o valor padrão será de 20 dias (20 × 24 × 60 × 60 × 1.000 = 1.728.000.000 ms). |
|
MUTABILITY |
STRING |
Modo de gravação para a tabela base. Este atributo afeta o comportamento de indexação. Valor padrão: Valores válidos:
Para mais informações sobre os valores, consulte Índices secundários nativos de alto desempenho. Importante
Depois que um índice é criado, não é possível modificar o atributo MUTABILITY. Para alterar esse atributo, você deve primeiro excluir todos os índices da tabela. Faça backup dos seus dados antes de realizar esta operação para evitar perda de dados. |
|
CONSISTENCY |
STRING |
Nível de consistência da tabela. Para instâncias multizona, especifica a consistência de dados entre réplicas primárias e secundárias. Valores válidos:
Importante
Para instâncias multizona, se sua carga de trabalho envolver operações de leitura-modificação-gravação, como incremento, anexação ou atualizações de índice, você deve definir o atributo CONSISTENCY da tabela primária como |
|
NUMREGIONS |
INT |
Número de regiões pré-divididas para a tabela. |
|
CHS |
INT |
Limite que separa dados quentes e frios, em segundos. Nota
|
|
STARTKEY e ENDKEY |
O mesmo tipo de dado da primeira coluna na chave primária. |
Chave inicial e chave final para pré-dividir as regiões da tabela. Nota
|
|
SPLITKEYS |
O mesmo tipo de dado da primeira coluna na chave primária. |
Chaves iniciais para todas as regiões pré-divididas da tabela. Nota
|
|
SPLITALGO |
STRING |
Define o algoritmo de divisão para pré-particionamento. Os algoritmos suportados são:
|
|
DYNAMIC_COLUMNS |
STRING |
Se deve ativar colunas dinâmicas. Valores válidos:
Nota
Colunas dinâmicas suportam apenas o tipo de dado Varbinary. Para mais informações sobre colunas dinâmicas, consulte Colunas dinâmicas. |
|
VERSIONS |
STRING |
Número de versões a serem retidas para cada valor de coluna. Deve ser um número inteiro maior ou igual a 1. Padrão: 1. Para mais informações sobre versionamento de dados, consulte Versionamento de dados. Importante
Um valor alto para o atributo VERSIONS pode degradar o desempenho de consulta e armazenamento. Recomendamos definir este valor como 1. |
|
BLOB_BUCKET_NAME |
STRING |
Nome do bucket para colunas BLOB na tabela. O nome do bucket deve seguir estas regras:
Nota
|
Versões do LindormTable anteriores à 2.2.16 não suportam a palavra-chave WITH para definir atributos de tabela. Você deve colocar a palavra-chave do atributo entre aspas simples ('). Os valores dos atributos são definidos com base em seu tipo de dado; por exemplo, valores STRING devem ser colocados entre aspas simples ('). Exemplo: CREATE TABLE IF NOT EXISTS t1(c1 varchar, c2 bigint, c3 int, c4 int, PRIMARY KEY(c1,c2)) 'CONSISTENCY'='strong';.
Exemplos
Criar uma tabela
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
);
Verificação
Execute a instrução DESCRIBE table sensor; para verificar se a tabela foi criada.
Criar uma tabela com índice
Crie um índice secundário junto com a tabela.
CREATE TABLE IF NOT EXISTS sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time),
KEY (temperature, time)
);
Verificação
Execute DESCRIBE table sensor; para verificar se a tabela foi criada e execute SHOW INDEX FROM sensor; para verificar se o índice secundário foi criado.
Especificar TTL e algoritmo de compressão
Crie uma tabela larga com TTL de 30 dias (2.592.000 segundos) e compressão ZSTD.
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
) WITH (COMPRESSION='ZSTD', TTL='2592000');
Verificação
Execute a instrução
DESCRIBE table sensor;para verificar se a tabela foi criada.Acesse a página Overview no sistema de gerenciamento de cluster e clique em current table details, clique em view table properties para verificar os parâmetros COMPRESSION e TTL.
Especificar o intervalo de major compaction
Crie uma tabela larga com intervalo de major compaction de 10 dias (864.000.000 milissegundos).
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
) WITH (COMPACTION_MAJOR_PERIOD='864000000');
Verificação
Execute a instrução
DESCRIBE table sensor;para verificar se a tabela foi criada.Acesse a página Overview no sistema de gerenciamento de cluster e clique em current table details, clique em view table properties para verificar o valor do parâmetro COMPACTION_MAJOR_PERIOD.
Ativar colunas dinâmicas
Para gravar dados em colunas dinâmicas, defina DYNAMIC_COLUMNS como TRUE.
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
) WITH (DYNAMIC_COLUMNS='TRUE');
Verificação
Execute a instrução
DESCRIBE table sensor;para verificar se a tabela foi criada.Acesse a página Overview no sistema de gerenciamento de cluster e clique em current table details, clique em view table properties para verificar o valor do parâmetro DYNAMIC_COLUMNS.
Especificar o limite de dados quentes e frios
Crie uma tabela larga com limite de dados quentes e frios para arquivamento de dados.
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
) WITH (CHS = '86400', CHS_L2 = 'storagetype=COLD');
Verificação
Execute a instrução
DESCRIBE table sensor;para verificar se a tabela foi criada.Acesse a página Overview no sistema de gerenciamento de cluster e clique em current table details, clique em view table properties para verificar os parâmetros CHS e CHS_L2.
Definir vários atributos simultaneamente
Crie uma tabela larga com compressão, TTL e limite de dados quentes e frios.
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
) WITH (
COMPRESSION='ZSTD',
CHS = '86400',
CHS_L2 = 'storagetype=COLD',
TTL = '2592000');
Verificação
Execute a instrução
DESCRIBE table sensor;para verificar se a tabela foi criada.Acesse a página Overview no sistema de gerenciamento de cluster e clique em current table details, clique em view table properties para verificar os parâmetros COMPRESSION, CHS, CHS_L2 e TTL.
Configurar partições
Crie uma tabela larga pré-dividida em cinco partições, com chave inicial 1000 e chave final 9000.
CREATE TABLE sensor (
p1 INTEGER NOT NULL,
c1 INTEGER,
c2 VARCHAR,
c3 VARCHAR,
PRIMARY KEY(p1)
) WITH (NUMREGIONS='5', STARTKEY='1000', ENDKEY='9000');
Verificação
Execute a instrução
DESCRIBE table sensor;para verificar se a tabela foi criada.Acesse a página Overview no sistema de gerenciamento de cluster e clique em Shard information, verifique os parâmetros startKey e endKey de cada partição.
Definir chaves iniciais para múltiplas partições
Exemplos de código
-
Especifique partições por chaves numéricas (com base na sua distribuição de dados)
Crie uma tabela larga com chaves iniciais predefinidas para cinco partições, resultando em seis partições pré-divididas.
CREATE TABLE sensor ( p1 INT NOT NULL, p2 INT NOT NULL, c1 VARCHAR, c2 BIGINT, PRIMARY KEY(p1, p2) ) WITH (SPLITKEYS = '100000,300000,500000,700000,900000'); -
Especifique partições por chaves de string (com base na sua distribuição de dados)
CREATE TABLE your_table ( address VARCHAR NOT NULL, col1 VARCHAR, PRIMARY KEY (address) ) WITH ( SPLITKEYS = '0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf,0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff' ); -
Especifique um algoritmo de divisão
CREATE TABLE your_table2 ( address VARCHAR NOT NULL, col1 VARCHAR, PRIMARY KEY (address) ) WITH ( NUMREGIONS = 256, SPLITALGO = 'HexStringSplit' );
Verificação
Execute a instrução
DESCRIBE table sensor;para verificar se a tabela foi criada.Acesse a página Overview no sistema de gerenciamento de cluster e clique em Shard information, verifique os parâmetros startKey e endKey de cada partição.
Especificar explicitamente uma coluna de chave de partição
Como a maioria das consultas recupera dados instantâneos de um único dispositivo, especifique device_id como a coluna de chave de partição.
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
) PARTITION BY HASH(device_id);
Verificação
Execute a instrução DESCRIBE TABLE sensor; para verificar se a tabela foi criada.
Criar uma tabela geoespacial
-
Crie uma tabela que suporte o tipo de dado espacial genérico Geometry, permitindo gravar qualquer tipo de dado espacial.
CREATE TABLE geoms(gid INT, g GEOMETRY, PRIMARY KEY(gid));Grave dados de qualquer tipo espacial.
UPSERT INTO geoms(gid, g) VALUES(0,ST_GeomFromText('POINT(-10.1 3.3)')),(1,ST_GeomFromText('LINESTRING(-12.2 4.3, -10.2 4.3)')),(2,ST_GeomFromText('POLYGON((2 2, 2 8, 8 8, 8 2, 2 2))')); -
Crie uma tabela para o tipo de dado Point. Apenas dados de ponto podem ser gravados nesta tabela.
CREATE TABLE pts(gid INT, g GEOMETRY(POINT), PRIMARY KEY(gid));Grave dados de ponto.
UPSERT INTO pts(gid, g) VALUES(0, ST_MakePoint(0,0)),(1, ST_MakePoint(1,1)); -
Crie uma tabela para o tipo de dado Polygon. Apenas dados de polígono podem ser gravados nesta tabela.
CREATE TABLE polys(gid INT, g GEOMETRY(POLYGON), PRIMARY KEY(gid));Grave dados de polígono.
UPSERT INTO polys(gid,g) VALUES(0,ST_GeomFromText('POLYGON((2 2, 2 8, 8 8, 8 2, 2 2))')); -
Crie uma tabela para o tipo de dado LineString. Apenas dados de linha podem ser gravados nesta tabela.
CREATE TABLE lines(gid INT, g GEOMETRY(LINESTRING), PRIMARY KEY(gid));Grave dados de linha.
UPSERT INTO lines(gid,g) VALUES(0, ST_GeomFromText('LINESTRING(-12.2 4.3, -10.2 4.3)')); -
Crie uma tabela para o tipo de dado MULTIPOINT. Apenas dados de multiponto podem ser gravados nesta tabela.
CREATE TABLE multipoints(gid INT, g GEOMETRY(MULTIPOINT), PRIMARY KEY(gid));Grave dados de multiponto.
UPSERT INTO multipoints(gid,g) VALUES(0, ST_GeomFromText('MULTIPOINT (10 40, 40 30, 20 20, 30 10)')); -
Crie uma tabela para o tipo de dado MULTILINESTRING. Apenas dados de multilinestring podem ser gravados nesta tabela.
CREATE TABLE multilines(gid INT, g GEOMETRY(MULTILINESTRING), PRIMARY KEY(gid));Grave dados de multilinestring.
UPSERT INTO multilines(gid,g) VALUES(0, ST_GeomFromText('MULTILINESTRING ((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10))')); -
Crie uma tabela para o tipo de dado MULTIPOLYGON. Apenas dados de multipolígono podem ser gravados nesta tabela.
CREATE TABLE multipolys(gid INT, g GEOMETRY(MULTIPOLYGON), PRIMARY KEY(gid));Grave dados de multipolígono.
UPSERT INTO multipolys(gid,g) VALUES(0, ST_GeomFromText('MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))')); -
Crie uma tabela para o tipo de dado GEOMETRYCOLLECTION. Apenas dados de coleção de geometrias podem ser gravados nesta tabela.
CREATE TABLE collections(gid INT, g GEOMETRY(GEOMETRYCOLLECTION), PRIMARY KEY(gid));Grave dados de coleção de geometrias.
UPSERT INTO collections(gid,g) VALUES(0, ST_GeomFromText('GEOMETRYCOLLECTION (POINT (40 10), LINESTRING (10 10, 20 20, 10 40), POLYGON ((40 40, 20 45, 45 30, 40 40)))')); -
Crie uma tabela com várias colunas do tipo Geometry.
CREATE TABLE mix(gid INT, pt GEOMETRY(POINT), ply GEOMETRY(POLYGON), PRIMARY KEY(gid));