La instrucción CREATE TABLE permite crear tablas en LindormTable o LindormTSDB. Admite tipos de datos como VARCHAR, TIMESTAMP y BIGINT, así como atributos de tabla como TTL y COMPRESSION para adaptarse a diversos escenarios empresariales.
Motor y versión
CREATE TABLE se aplica a LindormTable y LindormTSDB.
LindormTSDB admite la sintaxis estándar de CREATE TABLE a partir de la versión 3.4.32. Para consultar o actualizar su versión, consulte LindormTSDB release notes y Upgrade a minor version.
Sintaxis
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
Diferencias de sintaxis
La sintaxis de CREATE TABLE difiere entre LindormTable y LindormTSDB. La siguiente tabla compara los parámetros compatibles según el motor.
|
Parámetro |
LindormTable |
LindormTSDB |
|
|
0 |
0 |
||
|
0 |
0 |
||
|
0 |
0 |
||
|
Expresión de índice (KEY|INDEX)[Index expression (KEY |
INDEX)](#bb9b8e1047cvt) |
0 |
✖️ |
|
✖️ |
0 |
||
|
0 |
✖️ |
Uso
Nombre de tabla (table_identifier)
El nombre de la tabla debe cumplir los siguientes requisitos:
El nombre puede contener dígitos, letras mayúsculas, letras minúsculas, puntos (.), guiones (-) y guiones bajos (_).
El nombre no puede comenzar con un punto (.) ni con un guion (-).
La longitud del nombre debe ser de 1 a 255 caracteres.
Definición de columna (column_definition)
|
Sintaxis |
Obligatorio |
Descripción |
|
nombre de columna (column_identifier) |
Sí |
|
|
tipo de dato (data_type) |
Sí |
Para obtener más información sobre los tipos de datos compatibles, consulte Data types. Importante
Al crear una tabla de series temporales, tenga en cuenta lo siguiente si utiliza el tipo de dato TIMESTAMP:
|
|
Restricción NULL |
No |
Indica si la columna admite valores NULL. Importante
Lindorm SQL no valida esta restricción; la validación la realiza el motor de almacenamiento. La validación de la restricción NULL depende de las reglas del motor de almacenamiento, las cuales varían. En consecuencia, es posible que pueda escribir valores NULL en una columna aunque esté definida con NOT NULL. Para asegurar que los datos se escriban correctamente, siga estos requisitos:
|
Clave primaria (primary_key)
Una clave primaria identifica de forma única los datos en una tabla y consta de una o más columnas. Debe especificar una clave primaria (PRIMARY KEY) al crear una tabla.
La clave primaria no se puede modificar después de su creación. Diseñe su clave primaria con cuidado.
Cuando utilice la instrucción CREATE TABLE para crear una tabla, tenga en cuenta lo siguiente:
|
Tipo de motor |
Descripción |
|
LindormTable |
|
|
LindormTSDB |
|
Expresión de índice (KEY|INDEX)
Utilice la palabra clave KEY o INDEX en una instrucción CREATE TABLE para crear un índice junto con la tabla.
La expresión de índice (KEY|INDEX) solo es compatible con LindormTable 2.7.7 y versiones posteriores, y con Lindorm SQL 2.8.6.0 y versiones posteriores.
Para comprobar las versiones de LindormTable y Lindorm SQL, consulte LindormTable release notes y SQL version notes. Si no puede actualizar a las versiones requeridas desde la consola, póngase en contacto con el soporte técnico de Lindorm. El ID de DingTalk es s0s3eg3.
Uso
Si no especifica explícitamente un nombre de índice, el sistema genera uno de forma predeterminada. El formato del nombre de índice generado es
TableName_idx_${auto-incremented ID}.Mediante una expresión de índice, actualmente solo se pueden crear secondary indexes and search indexes.
-
Inclusión predeterminada de columnas para índices secundarios:
Lindorm SQL 2.9.3.10 y versiones posteriores
Si no especifica una cláusula
INCLUDEal crear un índice secundario, todas las demás columnas no se incluyen en el índice de forma predeterminada.Lindorm SQL versiones anteriores a la 2.9.3.10
Si no especifica una cláusula
INCLUDEal crear un índice secundario, todas las demás columnas se incluyen en el índice de forma predeterminada.NotaEsto equivale a establecer el atributo de índice INDEX_COVERED_TYPE en
COVERED_ALL_COLUMNS_IN_SCHEMA. Si la tabla es dinámica, esto equivale a establecer el atributo enCOVERED_DYNAMIC_COLUMNS. Si especifica una cláusula
KEYoINDEXal crear una tabla pero no especifica explícitamente los atributos MUTABILITY y CONSISTENCY, la tabla se crea con los siguientes atributos predeterminados:CONSISTENCY = 'strong'yMUTABILITY='MUTABLE_LATEST'.Si la instrucción CREATE TABLE incluye una expresión de índice, el sistema primero crea la tabla y luego el índice. Si ocurre una excepción durante la creación del índice, es posible que la tabla y el índice permanezcan y no se eliminen automáticamente. Puede usar instrucciones como
SHOWyDESCRIBEpara verlos, pero podría no ser capaz de escribir datos o consultar la tabla y el índice. Se recomienda eliminar la tabla y el índice restantes y volver a crearlos.
Partición (partition_definition)
Las particiones solo son compatibles con LindormTSDB. En una tabla de series temporales, la columna utilizada en la cláusula PARTITION BY debe ser una columna de clave primaria VARCHAR.
Utilice PARTITION BY HASH(column1, column2, ..., columnN) para especificar una o más columnas para el particionamiento hash. Por ejemplo: PARTITION BY HASH(c1, p1).
Atributos de tabla (table_options)
Solo LindormTable admite atributos de tabla. Puede usar la palabra clave WITH para agregar los siguientes atributos de tabla:
|
Opción |
Tipo |
Descripción |
|
COMPRESSION |
STRING |
El algoritmo de compresión para la tabla. Valores válidos:
Nota
En versiones de LindormTable anteriores a la 2.3.4, no se especifica ningún algoritmo de compresión de forma predeterminada. En LindormTable 2.3.4 y versiones posteriores, se utiliza el algoritmo ZSTD de forma predeterminada. |
|
TTL |
INT |
El tiempo de vida (TTL) de los datos, en segundos (s). Nota
|
|
COMPACTION_MAJOR_PERIOD |
LONG |
El intervalo en el que el sistema realiza una Nota
Valor predeterminado: Math.Min(TTL, 1,728,000,000 ms). Si no establece un TTL, el valor predeterminado es de 20 días (20 × 24 × 60 × 60 × 1,000 = 1,728,000,000 ms). |
|
MUTABILITY |
STRING |
El modo de escritura para la tabla base. Este atributo afecta el comportamiento de indexación. Valor predeterminado: Valores válidos:
Para obtener más información sobre los valores, consulte High-performance native secondary indexes. Importante
Una vez creado un índice, no se puede modificar el atributo MUTABILITY. Para cambiar este atributo, primero debe eliminar todos los índices de la tabla. Realice una copia de seguridad de sus datos antes de realizar esta operación para evitar la pérdida de datos. |
|
CONSISTENCY |
STRING |
El nivel de consistencia de la tabla. Para instancias multizona, especifica la consistencia de datos entre réplicas primarias y secundarias. Valores válidos:
Importante
Para instancias multizona, si su carga de trabajo implica operaciones de lectura-modificación-escritura como incremento, anexión o actualizaciones de índice, debe establecer el atributo CONSISTENCY de la tabla primaria en |
|
NUMREGIONS |
INT |
El número de regiones predivididas para la tabla. |
|
CHS |
INT |
El límite que separa los datos calientes de los fríos, en segundos. Nota
|
|
STARTKEY y ENDKEY |
El mismo tipo de dato que la primera columna de la clave primaria. |
La clave inicial y la clave final para predividir las regiones de la tabla. Nota
|
|
SPLITKEYS |
El mismo tipo de dato que la primera columna de la clave primaria. |
Las claves iniciales para todas las regiones predivididas de la tabla. Nota
|
|
SPLITALGO |
STRING |
Define el algoritmo de división para el preparticionamiento. Los algoritmos admitidos son:
|
|
DYNAMIC_COLUMNS |
STRING |
Indica si se habilitan las columnas dinámicas. Valores válidos:
Nota
Dynamic columns solo admiten el tipo de dato Varbinary. Para obtener más información sobre columnas dinámicas, consulte Dynamic columns. |
|
VERSIONS |
STRING |
El número de versiones que se conservarán para cada valor de columna. Debe ser un entero mayor o igual a 1. Valor predeterminado: 1. Para obtener más información sobre el versionado de datos, consulte Data versioning. Importante
Un valor alto para el atributo VERSIONS puede degradar el rendimiento de consulta y almacenamiento. Se recomienda establecer este valor en 1. |
|
BLOB_BUCKET_NAME |
STRING |
El nombre del bucket para columnas BLOB en la tabla. El nombre del bucket debe seguir estas reglas:
Nota
|
Las versiones de LindormTable anteriores a la 2.2.16 no admiten la palabra clave WITH para establecer atributos de tabla. Debe encerrar la palabra clave del atributo entre comillas simples ('). Los valores de los atributos se establecen según su tipo de dato; por ejemplo, los valores STRING deben ir entre comillas simples ('). Ejemplo: CREATE TABLE IF NOT EXISTS t1(c1 varchar, c2 bigint, c3 int, c4 int, PRIMARY KEY(c1,c2)) 'CONSISTENCY'='strong';.
Ejemplos
Crear una tabla
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)
);
Verificación
Ejecute la instrucción DESCRIBE table sensor; para comprobar que la tabla se creó correctamente.
Crear una tabla con un índice
Cree un índice secundario junto con la tabla.
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)
);
Verificación
Ejecute DESCRIBE table sensor; para comprobar que la tabla se creó correctamente, y ejecute SHOW INDEX FROM sensor; para verificar que el índice secundario se creó.
Especificar TTL y algoritmo de compresión
Cree una tabla ancha con un TTL de 30 días (2,592,000 segundos) y compresión 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');
Verificación
Ejecute la instrucción
DESCRIBE table sensor;para comprobar que la tabla se creó correctamente.Vaya a la página Overview en cluster management system y haga clic en el nombre de la tabla objetivo. En el área current table details, haga clic en view table properties para comprobar los parámetros COMPRESSION y TTL.
Especificar el intervalo de compactación mayor
Cree una tabla ancha con un intervalo de compactación mayor de 10 días (864,000,000 milisegundos).
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');
Verificación
Ejecute la instrucción
DESCRIBE table sensor;para comprobar que la tabla se creó correctamente.Vaya a la página Overview en cluster management system y haga clic en el nombre de la tabla objetivo. En el área current table details, haga clic en view table properties para comprobar el valor del parámetro COMPACTION_MAJOR_PERIOD.
Habilitar columnas dinámicas
Para escribir datos en columnas dinámicas, establezca DYNAMIC_COLUMNS en 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');
Verificación
Ejecute la instrucción
DESCRIBE table sensor;para comprobar que la tabla se creó correctamente.Vaya a la página Overview en cluster management system y haga clic en el nombre de la tabla objetivo. En el área current table details, haga clic en view table properties para comprobar el valor del parámetro DYNAMIC_COLUMNS.
Especificar el límite de datos calientes y fríos
Cree una tabla ancha con un límite de datos calientes y fríos para el archivado de datos.
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');
Verificación
Ejecute la instrucción
DESCRIBE table sensor;para comprobar que la tabla se creó correctamente.Vaya a la página Overview en cluster management system y haga clic en el nombre de la tabla objetivo. En el área current table details, haga clic en view table properties para comprobar los parámetros CHS y CHS_L2.
Establecer varios atributos a la vez
Cree una tabla ancha con compresión, TTL y un límite de datos calientes y fríos.
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');
Verificación
Ejecute la instrucción
DESCRIBE table sensor;para comprobar que la tabla se creó correctamente.Vaya a la página Overview en cluster management system y haga clic en el nombre de la tabla objetivo. En el área current table details, haga clic en view table properties para comprobar los parámetros COMPRESSION, CHS, CHS_L2 y TTL.
Configurar particiones
Cree una tabla ancha predividida en cinco particiones, con clave inicial 1000 y clave 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');
Verificación
Ejecute la instrucción
DESCRIBE table sensor;para comprobar que la tabla se creó correctamente.Vaya a la página Overview en cluster management system y haga clic en el nombre de la tabla objetivo. En el área Shard information, compruebe los parámetros startKey y endKey de cada partición.
Establecer claves iniciales para varias particiones
Ejemplos de código
-
Especificar particiones mediante claves numéricas (según su distribución de datos)
Cree una tabla ancha con claves iniciales predefinidas para cinco particiones, lo que da como resultado seis particiones predivididas.
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'); -
Especificar particiones mediante claves de cadena (según su distribución de datos)
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' ); -
Especificar un algoritmo de división
CREATE TABLE your_table2 ( address VARCHAR NOT NULL, col1 VARCHAR, PRIMARY KEY (address) ) WITH ( NUMREGIONS = 256, SPLITALGO = 'HexStringSplit' );
Verificación
Ejecute la instrucción
DESCRIBE table sensor;para comprobar que la tabla se creó correctamente.Vaya a la página Overview en cluster management system y haga clic en el nombre de la tabla objetivo. En el área Shard information, compruebe los parámetros startKey y endKey de cada partición.
Especificar explícitamente una columna de clave de partición
Dado que la mayoría de las consultas recuperan datos instantáneos de un solo dispositivo, especifique device_id como la columna de clave de partición.
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);
Verificación
Ejecute la instrucción DESCRIBE TABLE sensor; para comprobar que la tabla se creó correctamente.
Cree una tabla geoespacial
-
Cree una tabla que admita el tipo de datos espaciales genérico Geometry. Esto le permite escribir cualquier tipo de dato espacial.
CREATE TABLE geoms(gid INT, g GEOMETRY, PRIMARY KEY(gid));Escriba datos de cualquier tipo de dato 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))')); -
Cree una tabla para el tipo de dato Point. En esta tabla solo se pueden escribir datos de puntos.
CREATE TABLE pts(gid INT, g GEOMETRY(POINT), PRIMARY KEY(gid));Escriba datos de puntos.
UPSERT INTO pts(gid, g) VALUES(0, ST_MakePoint(0,0)),(1, ST_MakePoint(1,1)); -
Cree una tabla para el tipo de dato Polygon. En esta tabla solo se pueden escribir datos de polígonos.
CREATE TABLE polys(gid INT, g GEOMETRY(POLYGON), PRIMARY KEY(gid));Escriba datos de polígonos.
UPSERT INTO polys(gid,g) VALUES(0,ST_GeomFromText('POLYGON((2 2, 2 8, 8 8, 8 2, 2 2))')); -
Cree una tabla para el tipo de dato LineString. En esta tabla solo se pueden escribir datos de líneas.
CREATE TABLE lines(gid INT, g GEOMETRY(LINESTRING), PRIMARY KEY(gid));Escriba datos de líneas.
UPSERT INTO lines(gid,g) VALUES(0, ST_GeomFromText('LINESTRING(-12.2 4.3, -10.2 4.3)')); -
Cree una tabla para el tipo de dato MULTIPOINT. En esta tabla solo se pueden escribir datos de multipuntos.
CREATE TABLE multipoints(gid INT, g GEOMETRY(MULTIPOINT), PRIMARY KEY(gid));Escriba datos de multipuntos.
UPSERT INTO multipoints(gid,g) VALUES(0, ST_GeomFromText('MULTIPOINT (10 40, 40 30, 20 20, 30 10)')); -
Cree una tabla para el tipo de dato MULTILINESTRING. En esta tabla solo se pueden escribir datos de multilíneas.
CREATE TABLE multilines(gid INT, g GEOMETRY(MULTILINESTRING), PRIMARY KEY(gid));Escriba datos de multilíneas.
UPSERT INTO multilines(gid,g) VALUES(0, ST_GeomFromText('MULTILINESTRING ((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10))')); -
Cree una tabla para el tipo de dato MULTIPOLYGON. En esta tabla solo se pueden escribir datos de multipolígonos.
CREATE TABLE multipolys(gid INT, g GEOMETRY(MULTIPOLYGON), PRIMARY KEY(gid));Escriba datos de multipolígonos.
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)))')); -
Cree una tabla para el tipo de dato GEOMETRYCOLLECTION. En esta tabla solo se pueden escribir datos de colecciones de geometrías.
CREATE TABLE collections(gid INT, g GEOMETRY(GEOMETRYCOLLECTION), PRIMARY KEY(gid));Escriba datos de colecciones de geometrías.
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)))')); -
Cree una tabla con varias columnas del tipo Geometry.
CREATE TABLE mix(gid INT, pt GEOMETRY(POINT), ply GEOMETRY(POLYGON), PRIMARY KEY(gid));