Las operaciones DDL de Tablestore crean asignaciones SQL para tablas de datos o índices de búsqueda existentes y gestionan el esquema y los metadatos de las tablas de asignación.
Descripción general de las sentencias DDL
|
Sentencia |
Motor |
Descripción |
|
CREATE TABLE |
tablestore |
Crea una asignación para una tabla de datos. El motor SQL selecciona automáticamente el índice óptimo para las consultas. |
|
CREATE TABLE |
searchindex |
Crea una asignación para un índice de búsqueda. El motor SQL ejecuta las consultas a través del índice de búsqueda especificado. |
|
ALTER TABLE |
- |
Agrega o elimina columnas de atributos en una tabla de asignación existente. |
|
DROP MAPPING TABLE |
- |
Elimina una asignación sin afectar la tabla de datos o el índice subyacente. |
|
DESCRIBE |
- |
Devuelve los nombres de campo, tipos de datos, indicadores de clave principal y nulabilidad de una tabla de asignación. |
|
SHOW INDEX |
- |
Devuelve la información de índices asociada a una tabla de asignación, incluidas las claves principales, los índices secundarios y los índices de búsqueda. |
|
SHOW TABLES |
- |
Enumera todas las tablas de asignación en la instancia actual. |
A diferencia de las bases de datos relacionales tradicionales, CREATE TABLE en Tablestore no crea una tabla física. En su lugar, genera una asignación de acceso SQL para una tabla de datos o un índice de búsqueda existente. DROP MAPPING TABLE solo elimina la asignación y deja intactos los datos subyacentes.
Crear una asignación de tabla de datos
Una sentencia CREATE TABLE con ENGINE='tablestore' crea una asignación para una tabla de datos existente. Una vez creada la asignación, el motor SQL selecciona automáticamente el índice óptimo (clave principal, índice secundario o índice de búsqueda) para ejecutar las consultas.
Sintaxis
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 tablas con una sola columna de clave principal, especifique PRIMARY KEY directamente en la definición de la columna:
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 |
Obligatorio |
Descripción |
|
|
IF NOT EXISTS |
No |
Si se especifica, no se devuelve ningún error cuando la tabla de asignación ya existe. Si no se especifica, se devuelve un error |
|
|
table_name |
Sí |
Nombre de la tabla de asignación. Este nombre debe coincidir con el nombre de la tabla de datos. |
|
|
column_name |
Sí |
Nombre de la columna. Los nombres de columna en SQL deben coincidir con los nombres de columna de la tabla de datos (sin distinción entre mayúsculas y minúsculas). Por ejemplo, si la columna de la tabla de datos es |
|
|
data_type |
Sí |
Tipo de datos SQL de la columna. El tipo de datos debe coincidir con el tipo de datos de la columna en la tabla de datos. Las columnas de clave principal solo admiten BIGINT, VARCHAR(1024) y VARBINARY(1024). Las columnas de atributos también admiten DOUBLE, BOOL, MEDIUMTEXT y MEDIUMBLOB. Para consultar la asignación completa de tipos, consulte Data type mappings in SQL. |
|
|
NOT NULL |
NULL |
No |
Indica si la columna permite valores NULL. Las columnas de clave principal tienen NOT NULL como valor predeterminado. Las columnas de atributos tienen NULL como valor predeterminado. Especifique NOT NULL para las columnas de atributos que deben tener un valor. |
|
PRIMARY KEY |
Sí |
Definición de la clave principal. La clave principal debe coincidir con las columnas de clave principal de la tabla de datos en orden y tipo. |
|
|
ENGINE |
No |
Tipo de motor de ejecución. El valor predeterminado es |
|
|
consistency |
No |
Nivel de consistencia de los resultados de la consulta. Valores válidos: |
|
|
allow_inaccurate_aggregation |
No |
Indica si se sacrifica la precisión de la agregación para mejorar el rendimiento de la consulta. El valor predeterminado es |
Ejemplos
Cree una asignación para exampletable con columnas de clave principal colvalue (VARCHAR) e id (BIGINT), y una columna de atributo content (MEDIUMTEXT):
CREATE TABLE exampletable(colvalue VARCHAR(1024), id BIGINT, content MEDIUMTEXT, PRIMARY KEY(colvalue, id)) ENGINE='tablestore';
Cree una asignación con consistencia fuerte:
CREATE TABLE exampletable2(id BIGINT(20), colvalue VARCHAR(1024), content MEDIUMTEXT, PRIMARY KEY(colvalue, id)) ENGINE_ATTRIBUTE='{"consistency": "strong"}';
Crear una asignación de índice de búsqueda
Para crear una asignación para un índice de búsqueda existente, utilice una sentencia CREATE TABLE con ENGINE='searchindex'. Una vez creada la asignación, el motor SQL ejecuta todas las consultas a través del índice de búsqueda especificado.
Casos de uso
Se requieren capacidades de índice de búsqueda como búsqueda de texto completo, búsqueda vectorial o consultas de tipo anidado.
El enrutamiento de consultas debe fijarse a un índice de búsqueda específico en lugar de depender de la selección automática de índices por parte del motor SQL.
Sintaxis
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 |
Obligatorio |
Descripción |
|
IF NOT EXISTS |
No |
Si se especifica, no se devuelve ningún error cuando la tabla de asignación ya existe. |
|
user_defined_name |
Sí |
Nombre personalizado para la tabla de asignación. El nombre no necesita coincidir con el nombre de la tabla de datos o del índice. |
|
column_name |
Sí |
Nombre de la columna. No se requieren definiciones de clave principal. Las tablas de asignación de índices de búsqueda no admiten el tipo VARCHAR. Utilice MEDIUMTEXT para columnas de cadena. |
|
index_name |
Sí |
Nombre del índice de búsqueda. Se especifica en ENGINE_ATTRIBUTE. El índice debe existir previamente. |
|
table_name |
Sí |
Nombre de la tabla de datos a la que pertenece el índice de búsqueda. Se especifica en ENGINE_ATTRIBUTE. |
Ejemplos
Cree una tabla de asignación search_exampletable1 para el índice de búsqueda exampletable1_index en la tabla de datos exampletable1:
CREATE TABLE search_exampletable1(id BIGINT, colvalue MEDIUMTEXT, content MEDIUMTEXT) ENGINE='searchindex' ENGINE_ATTRIBUTE='{"index_name": "exampletable1_index", "table_name": "exampletable1"}';
Utilice IF NOT EXISTS para evitar errores cuando la asignación ya existe:
CREATE TABLE IF NOT EXISTS search_exampletable1(id BIGINT, colvalue MEDIUMTEXT, content MEDIUMTEXT) ENGINE='searchindex' ENGINE_ATTRIBUTE='{"index_name": "exampletable1_index", "table_name": "exampletable1"}';
Actualizar columnas de la tabla de asignación
La sentencia ALTER TABLE agrega o elimina columnas de atributos en una tabla de asignación existente.
Solo las tablas de asignación creadas con una sentencia
CREATE TABLEadmitenALTER TABLE. Las tablas de asignación vinculadas automáticamente medianteDESCRIBEu otras sentencias no admiten esta operación.Cada sentencia agrega o elimina una columna. Para modificar varias columnas, ejecute la sentencia varias veces.
ALTER TABLEsolo actualiza el esquema de la tabla de asignación y no afecta la estructura de almacenamiento de la tabla de datos.No se pueden agregar ni eliminar columnas de clave principal.
Después de ejecutar esta sentencia, el motor SQL se actualiza de forma asíncrona y tarda hasta 30 segundos en completar el proceso. Es posible que las consultas realizadas durante la actualización no devuelvan la nueva columna.
Sintaxis
ALTER TABLE table_name option column_name [data_type];
Parámetros
|
Parámetro |
Obligatorio |
Descripción |
|
table_name |
Sí |
Nombre de la tabla de asignación. |
|
option |
Sí |
Tipo de operación: |
|
column_name |
Sí |
Nombre de la columna. Al agregar una columna, el nombre no debe duplicar uno existente. Las reglas de mayúsculas y minúsculas para los nombres de columna son las mismas que para |
|
data_type |
Solo para |
Tipo de datos SQL de la columna. El tipo de datos debe coincidir con la columna correspondiente en la tabla de datos. No es necesario para |
Ejemplos
Agregue columnas de atributos a una tabla de asignación:
ALTER TABLE exampletable ADD COLUMN colvalue BIGINT;
ALTER TABLE exampletable ADD COLUMN content MEDIUMTEXT;
Elimine una columna de atributo de una tabla de asignación:
ALTER TABLE exampletable DROP COLUMN colvalue;
Eliminar una asignación
La sentencia DROP MAPPING TABLE elimina una o más tablas de asignación.
Esta sentencia solo elimina la asignación SQL. La tabla de datos subyacente y sus datos no se ven afectados.
Sintaxis
DROP MAPPING TABLE [IF EXISTS] table_name, ...;
Parámetros
|
Parámetro |
Obligatorio |
Descripción |
|
table_name |
Sí |
Nombre de la tabla de asignación. Separe varios nombres con comas (,). |
|
IF EXISTS |
No |
Si se especifica, no se devuelve ningún error cuando la asignación no existe. Si no se especifica, se devuelve un error |
Ejemplos
DROP MAPPING TABLE IF EXISTS exampletable;
Consultar detalles de la tabla
La sentencia DESCRIBE devuelve los nombres de campo, tipos de datos, nulabilidad e indicadores de clave principal de una tabla de asignación.
Sintaxis
DESCRIBE table_name;
Parámetros
|
Parámetro |
Obligatorio |
Descripción |
|
table_name |
Sí |
Nombre de la tabla de asignación. |
Ejemplos
Consulte los detalles de la tabla de asignación exampletable:
DESCRIBE exampletable;
La salida contiene las siguientes columnas:
|
Columna |
Ejemplo |
Descripción |
|
Field |
pk1 |
Nombre del campo. |
|
Type |
varchar(1024) |
Tipo de datos SQL del campo. |
|
Null |
NO |
Indica si el campo permite valores NULL. NO para columnas de clave principal. YES para columnas de atributos. |
|
Key |
PRI |
Indicador de clave principal. PRI indica una columna de clave principal. Un valor vacío indica una columna de atributo. |
Consultar detalles del índice
La sentencia SHOW INDEX devuelve los índices asociados a una tabla de asignación, incluidas las claves principales, los índices secundarios y los índices de búsqueda.
Sintaxis
SHOW INDEX {FROM | IN} table_name;
Parámetros
|
Parámetro |
Obligatorio |
Descripción |
|
table_name |
Sí |
Nombre de la tabla de asignación. |
Ejemplos
Consulte los índices de una asignación de tabla de datos (devuelve claves principales, índices secundarios e índices de búsqueda):
SHOW INDEX IN exampletable;
La columna Index_type indica el tipo de índice: un valor vacío corresponde a un índice de clave principal, GlobalIndex a un índice secundario y SearchIndex a un índice de búsqueda.
Consulte los índices de una asignación de índice de búsqueda:
SHOW INDEX IN search_exampletable1;
Para las tablas de asignación de índices de búsqueda, SHOW INDEX devuelve _system_hidden_pk_field como índice de clave principal (una clave principal oculta generada por el sistema). Cada columna también muestra un valor Search_type como LONG, KEYWORD o TEXT.
Consultar tablas de asignación
SHOW TABLES enumera todas las tablas de asignación en la instancia actual.
Sintaxis
SHOW TABLES;
Salida de ejemplo:
+------------------------+
| Tables_in_myinstance |
+------------------------+
| exampletable |
+------------------------+
| search_exampletable1 |
+------------------------+
Errores comunes
Los siguientes errores pueden ocurrir cuando falla una sentencia DDL.
|
Mensaje de error |
Sentencia |
Causa y solución |
|
Table 'instance.table' doesn't exist |
|
La tabla de datos no existe. |
|
Table 'instance.table' already exists |
|
La asignación ya existe. Para suprimir este error, utilice |
|
Unknown mapping table 'instance.table' |
|
La asignación no existe. Para suprimir este error, utilice |
|
Unsupported alter non-mapping table |
|
La tabla destino no es una tabla de asignación creada con |