CREATE TABLE crea tablas no particionadas, particionadas, externas o agrupadas en clúster.
Límites
Una tabla particionada admite hasta 6 niveles de partición. Por ejemplo, una tabla particionada por fecha podría usar los niveles
year/month/week/day/hour/minute.De forma predeterminada, una tabla puede tener hasta 60,000 particiones. Este límite se configura por proyecto.
Para consultar otros límites de las tablas, consulte SQL limitations.
Sintaxis
Tabla interna
Crear una tabla interna (no particionada o particionada)
CREATE [OR REPLACE] TABLE [IF NOT EXISTS] <table_name> (
<col_name> <data_type>, ... )
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type> [COMMENT <col_comment>], ...)]
[AUTO PARTITIONED
BY (<auto_partition_expression> [AS <auto_partition_column_name>])
[TBLPROPERTIES('ingestion_time_partition'='true')]
];
Tabla agrupada en clúster
Crear una tabla agrupada en clúster
CREATE TABLE [IF NOT EXISTS] <table_name> (
<col_name> <data_type>, ... )
[CLUSTERED BY | RANGE CLUSTERED BY (<col_name> [, <col_name>, ...])
[SORTED BY (<col_name> [ASC | DESC] [, <col_name> [ASC | DESC] ...])]
INTO <number_of_buckets> BUCKETS];
Tabla externa
Crear una tabla externa
Este ejemplo crea una tabla externa de OSS mediante el analizador sintáctico de datos de texto integrado. Otros formatos se describen en ORC external table.
CREATE EXTERNAL TABLE [IF NOT EXISTS] <mc_oss_extable_name> (
<col_name> <data_type>, ... )
STORED AS '<file_format>'
[WITH SERDEPROPERTIES (options)]
LOCATION '<oss_location>';
Tablas transaccionales y Delta
-
Crea una tabla transaccional. En este tipo de tabla se ejecutan operaciones UPDATE o DELETE. Sin embargo, las tablas transaccionales tienen limitaciones.
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] <table_name> ( <col_name <data_type> [NOT NULL] [DEFAULT <default_value>] [COMMENT <col_comment>], ... [COMMENT <table_comment>] [TBLPROPERTIES ("transactional"="true")]; -
Crea una tabla Delta. Al combinarla con una clave primaria, se realizan operaciones como upserts, consultas incrementales y time travel.
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] <table_name> ( <col_name <data_type> [NOT NULL] [DEFAULT <default_value>] [COMMENT <col_comment>], ... [PRIMARY KEY (<pk_col_name>[, <pk_col_name2>, ...] )]) [COMMENT <table_comment>] [CLUSTERED BY (<pk_col_name>[, <pk_col_name2>, ...] )] [TBLPROPERTIES ("transactional"="true" [, "write.bucket.num" = "N", "acid.data.retain.hours"="hours"...])] [LIFECYCLE <days>];-
Una tabla Delta con clave primaria permite usar un subconjunto de dicha clave como clave de clúster hash.
En una tabla Delta con clave primaria, el sistema utiliza agrupación en clúster hash de forma predeterminada y toma la clave primaria completa como clave de clúster. Si las consultas filtran frecuentemente por un subconjunto de columnas de la clave primaria, especifique explícitamente ese subconjunto como clave de clúster para mejorar el rendimiento del filtrado.
-
Si especifica explícitamente una clave de clúster, el sistema distribuye los datos de la tabla en buckets hash según las columnas indicadas. La clave de clúster debe ser un subconjunto de las columnas de la clave primaria.
Si no especifica explícitamente una clave de clúster, el sistema utiliza el conjunto completo de columnas de la clave primaria como clave de clúster predeterminada.
No es posible modificar la clave de clúster después de crear la tabla. Debe especificarla durante la creación.
-
Cláusulas CTAS y LIKE
-
Crea una nueva tabla basada en una existente y copia los datos, pero no copia las propiedades de partición. Esta cláusula aplica a tablas externas y a tablas en proyectos externos de Lakehouse.
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] AS <select_statement>; -
Crea una nueva tabla con la misma estructura que una existente, pero sin copiar los datos. Esta cláusula aplica a tablas externas y a tablas en proyectos externos de Lakehouse.
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] LIKE <existing_table_name>;
Parámetros
Parámetros comunes
Parámetros generales
|
Parámetro |
Obligatorio |
Descripción |
Observaciones |
|
OR REPLACE |
No |
|
Esto equivale a ejecutar los siguientes comandos:
|
|
EXTERNAL |
No |
Crea una tabla externa. |
N/A |
|
IF NOT EXISTS |
No |
Crea una tabla solo si no existe otra con el mismo nombre. |
Sin IF NOT EXISTS, crear una tabla con un nombre duplicado devuelve un error. Con IF NOT EXISTS, la instrucción se ejecuta correctamente incluso si existe una tabla con el mismo nombre pero diferente esquema. Los metadatos de la tabla existente permanecen sin cambios. |
|
table_name |
Sí |
El nombre de la tabla. |
El nombre de la tabla debe tener 128 bytes o menos y contener solo letras, dígitos y guiones bajos (_). No distingue entre mayúsculas y minúsculas. Se recomienda comenzar el nombre con una letra. |
|
PRIMARY KEY(pk) |
No |
La clave primaria de la tabla. |
Defina una o más columnas como clave primaria para garantizar la unicidad de la combinación de columnas. Sigue la sintaxis estándar de clave primaria de SQL. Las columnas de clave primaria deben ser NOT NULL y no se pueden modificar. Importante
Este parámetro aplica únicamente a una tabla Delta. |
|
col_name |
Sí |
El nombre de la columna. |
|
|
col_comment |
No |
El comentario de la columna. |
Debe ser una cadena de 1,024 bytes o menos. |
|
data_type |
Sí |
El tipo de dato de la columna. |
Tipos compatibles: BIGINT, DOUBLE, BOOLEAN, DATETIME, DECIMAL, STRING y otros listados en Data types. |
|
NOT NULL |
No |
Especifica que la columna no puede contener valores NULL. |
Para obtener más información sobre cómo modificar la propiedad NOT NULL, consulte Partition operations. |
|
default_value |
No |
El valor predeterminado para la columna. |
Si una operación Nota
Funciones como |
|
table_comment |
No |
El comentario de la tabla. |
Debe ser una cadena de 1,024 bytes o menos. |
|
LIFECYCLE |
No |
El ciclo de vida de la tabla, en días. |
Solo se admiten enteros positivos. La unidad es días.
|
Tablas particionadas
Parámetros de tablas particionadas
Parámetros de tablas particionadas
MaxCompute admite tablas estándar y tablas con particiones automáticas. Elija según cómo se generen las columnas de partición. Partitioned table overview.
Parámetros de tablas particionadas estándar
|
Parámetro |
Obligatorio |
Descripción |
Observaciones |
|
PARTITIONED BY |
Sí |
Especifica las particiones para una tabla particionada estándar. |
Puede especificar particiones mediante PARTITIONED BY o AUTO PARTITIONED BY, pero no ambas. |
|
col_name |
Sí |
El nombre de la columna de partición. |
|
|
data_type |
Sí |
El tipo de dato de la columna de partición. |
MaxCompute V1.0 solo admite STRING. La V2.0 agrega TINYINT, SMALLINT, INT, BIGINT y VARCHAR (STRING sigue siendo compatible). Lista completa en Data types. El particionamiento elimina los escaneos completos de tabla para operaciones a nivel de partición. |
|
col_comment |
No |
El comentario para la columna de partición. |
Debe ser una cadena de 1,024 bytes o menos. |
Un valor de partición debe tener 255 bytes o menos. No puede contener caracteres de doble byte, como caracteres chinos. El valor debe comenzar con una letra y contener solo letras, dígitos y los siguientes caracteres: espacio, dos puntos (:), guion bajo (_), signo de dólar ($), numeral (#), punto (.), signo de exclamación (!) y arroba (@). El comportamiento de otros caracteres, como los caracteres de escape \t, \n y /, no está definido.
Parámetros de tablas con particiones automáticas
Una tabla con particiones automáticas genera columnas de partición automáticamente. Los detalles de uso se encuentran en Partitioned table types.
|
Parámetro |
Obligatorio |
Descripción |
Observaciones |
|
AUTO PARTITIONED BY |
Sí |
Especifica las particiones para una tabla con particiones automáticas. |
Puede especificar particiones mediante PARTITIONED BY o AUTO PARTITIONED BY, pero no ambas. |
|
auto_partition_expression |
Sí |
La expresión que define cómo se calcula la columna de partición. Actualmente, solo se utiliza la función TRUNC_TIME para generar la columna de partición. Solo se admite una columna de partición. |
La función TRUNC_TIME trunca datos de una columna de tipo hora o fecha según una unidad de tiempo especificada para generar una columna de partición. |
|
auto_partition_column_name |
No |
El nombre de la columna de partición generada. Si no se especifica un nombre, el sistema usa |
Según el cálculo de la expresión de partición, se genera una columna de partición de tipo STRING. Puede especificar explícitamente un nombre para esta columna, pero no puede modificar directamente su tipo de dato ni su valor. |
|
TBLPROPERTIES('ingestion_time_partition'='true') |
No |
Especifica si se generan columnas de partición según la hora de ingesta de datos. |
El particionamiento por hora de ingesta se describe en Auto-partitioned tables based on data ingestion time. |
Tablas agrupadas en clúster
Parámetros de tablas agrupadas en clúster
Las tablas agrupadas en clúster se clasifican en tablas agrupadas por hash y tablas agrupadas por rango.
Tabla agrupada por hash
|
Parámetro |
Obligatorio |
Descripción |
Observaciones |
|
CLUSTERED BY |
Sí |
Especifica la clave hash. MaxCompute calcula valores hash para las columnas especificadas y distribuye los datos en buckets hash según estos valores. |
Para evitar la dispersión de datos y lograr un buen paralelismo, elija columnas con alta cardinalidad y pocos duplicados para la cláusula |
|
SORTED BY |
Sí |
Especifica el orden de clasificación de las columnas dentro de cada bucket hash. |
Para un rendimiento óptimo, utilice las mismas columnas para SORTED BY y CLUSTERED BY. Después de especificar la cláusula SORTED BY, MaxCompute crea automáticamente un índice y lo utiliza para acelerar las consultas. |
|
number_of_buckets |
Sí |
Especifica el número de buckets hash. |
Este valor es obligatorio y depende del volumen de datos. |
Al seleccionar el número de buckets hash, siga estos dos principios:
Mantenga un tamaño moderado para los buckets hash: el tamaño recomendado para cada bucket es de aproximadamente 500 MB. Por ejemplo, si el tamaño estimado de la partición es de 500 GB, establezca el número de buckets en 1,000. Esto resulta en un tamaño promedio de bucket hash de unos 500 MB. Para tablas muy grandes, puede exceder el límite de 500 MB. Un tamaño de 2 GB a 3 GB por bucket es adecuado.
Para optimizar las operaciones
join, eliminar los pasos de shuffle y clasificación mejora significativamente el rendimiento. Esto requiere que el número de buckets hash en las dos tablas sea múltiplo entre sí, por ejemplo, 256 y 512. Se recomienda establecer el número de buckets hash como una potencia de 2 (2n), como 512, 1024, 2048 o 4096. Esto permite al sistema dividir o fusionar automáticamente los buckets hash y eliminar los pasos de shuffle y clasificación, lo que mejora la eficiencia de ejecución.
Tabla agrupada por rango
|
Parámetro |
Obligatorio |
Descripción |
Observaciones |
|
RANGE CLUSTERED BY |
Sí |
Especifica las columnas de agrupación por rango. |
MaxCompute realiza operaciones de bucketing en las columnas especificadas y distribuye los datos en buckets según los números de bucket. |
|
SORTED BY |
Sí |
Especifica el orden de clasificación de las columnas dentro de cada bucket. |
El uso es el mismo que para una tabla agrupada por hash. |
|
number_of_buckets |
Sí |
Especifica el número de buckets. |
Para una tabla agrupada por rango, no es necesaria la práctica recomendada de potencia de 2 (2n) que aplica a las tablas agrupadas por hash. Cualquier número de buckets es aceptable si los datos están distribuidos uniformemente. Este parámetro es opcional para tablas agrupadas por rango. Si lo omite, el sistema determina automáticamente el número óptimo de buckets según el volumen de datos. |
Cuando se realiza una operación de unión o agregación en una tabla agrupada por rango, si la clave de unión o de grupo es la clave de agrupación por rango o su prefijo, puede eliminar la redistribución de datos (shuffle remove) para mejorar el rendimiento. Ejecute el comando set odps.optimizer.enable.range.partial.repartitioning=true/false; para habilitar o deshabilitar esta función. Está deshabilitada de forma predeterminada.
-
Beneficios de las tablas agrupadas en clúster:
Poda de buckets optimizada
Agregaciones optimizadas
Almacenamiento optimizado
-
Limitaciones de las tablas agrupadas en clúster:
INSERT INTOno es compatible. Solo puede agregar datos medianteINSERT OVERWRITE.No se admite la carga directa de datos a una tabla agrupada por rango mediante Tunnel, ya que Tunnel carga los datos sin orden específico.
Las funciones de copia de seguridad y recuperación no son compatibles.
Tablas externas
Parámetros de tablas externas
Esta sección cubre los parámetros de tablas externas de OSS. Otros tipos de tablas externas se documentan en External tables.
|
Parámetro |
Obligatorio |
Descripción |
|
|
Sí |
Especifica file_format según el formato de datos de la tabla externa. |
|
|
No |
Especifica parámetros relacionados con autorización, compresión y análisis sintáctico de caracteres para la tabla externa. |
|
oss_location |
Sí |
La ubicación de almacenamiento en OSS de los datos de la tabla externa. Para obtener más información, consulte OSS external tables. |
Tablas transaccionales y Delta
Parámetros de tablas transaccionales y Delta
Parámetros de tablas Delta
Una tabla Delta es un formato de tabla que admite lecturas y escrituras casi en tiempo real, almacenamiento y acceso incremental, y actualizaciones en tiempo real. Actualmente, solo se admiten tablas con clave primaria.
|
Parámetro |
Obligatorio |
Descripción |
Observaciones |
|
PRIMARY KEY(PK) |
Sí |
Define la clave primaria para la tabla Delta, la cual puede incluir varias columnas. |
La sintaxis sigue la sintaxis estándar de clave primaria de SQL. Las columnas de clave primaria deben configurarse como NOT NULL y no se pueden modificar. Una vez establecida la clave primaria, los datos se deduplican según las columnas de dicha clave. La restricción de unicidad se aplica dentro de una sola partición o dentro de una tabla no particionada. |
|
transactional |
Sí |
Obligatorio para crear una tabla Delta. Debe establecer este parámetro en |
Indica que la tabla admite las propiedades transaccionales de las tablas ACID de MaxCompute. La tabla utiliza el modelo de control de concurrencia multiversión (MVCC) para garantizar el nivel de aislamiento de instantánea. |
|
write.bucket.num |
No |
El valor predeterminado es 16. El rango válido es |
Especifica el número de buckets para cada partición o para una tabla no particionada. Esto también indica el número de nodos concurrentes para escrituras de datos. Puede modificar este parámetro para una tabla particionada, y la nueva configuración surte efecto para nuevas particiones. No puede modificar este parámetro para una tabla no particionada. Considere las siguientes recomendaciones:
|
|
acid.data.retain.hours |
No |
El valor predeterminado es 24. El rango válido es |
Especifica el intervalo de tiempo en horas durante el cual puede consultar estados históricos de datos mediante Time Travel. Si necesita un historial de Time Travel superior a 168 horas (7 días), póngase en contacto con el soporte técnico de MaxCompute.
|
|
acid.incremental.query.out.of.time.range.enabled |
No |
Valor predeterminado: |
Si es |
|
acid.write.precombine.field |
No |
Especifica un único nombre de columna. |
Si se especifica un nombre de columna, el sistema utiliza esta columna junto con las columnas de clave primaria para deduplicar datos dentro de la misma confirmación. Esto garantiza la unicidad y consistencia de los datos. Nota
Si una sola confirmación de datos supera los 128 MB, se generan varios archivos. Este parámetro no aplica a través de múltiples archivos. |
|
acid.partial.fields.update.enable |
No |
Si se establece en |
Este parámetro se establece al crear la tabla. No se puede modificar después de crear la tabla. |
-
Otros requisitos de parámetros para tablas Delta:
LIFECYCLE: El ciclo de vida de la tabla debe ser mayor o igual al período de retención de time travel, es decir,
lifecycle >= acid.data.retain.hours / 24. Se realiza una comprobación al crear la tabla y se reporta un error si no se cumple esta condición.Funciones no compatibles:
CLUSTERED BY,EXTERNALyCREATE TABLE ASno son compatibles.
-
Otras limitaciones:
Actualmente, otros motores no pueden operar directamente sobre una tabla Delta. Solo se admite MaxCompute SQL.
No puede convertir una tabla estándar en una tabla Delta.
No puede realizar cambios de esquema en las columnas de clave primaria de una tabla Delta.
Parámetros de tablas transaccionales
|
Parámetro |
Obligatorio |
Descripción |
|
|
TBLPROPERTIES("transactional"="true") |
Sí |
Establece la tabla como una tabla transaccional, lo que habilita operaciones |
DELETE)](t2043562.dita#concept_2043562). |
Las siguientes limitaciones aplican a una tabla transaccional:
-
Solo puede establecer la propiedad
transactionalal crear una tabla. No puede usarALTER TABLEpara modificar esta propiedad en una tabla existente. La siguiente instrucción devuelve un error:ALTER TABLE not_txn_tbl SET TBLPROPERTIES("transactional"="true"); -- Error returned. FAILED: Catalog Service Failed, ErrorCode: 151, Error Message: Set transactional is not supported No puede configurar una tabla agrupada en clúster o una tabla externa como tabla transaccional.
No puede convertir una tabla interna estándar, una tabla externa o una tabla agrupada en clúster en una tabla transaccional, ni viceversa.
La compactación automática no es compatible. Compacte manualmente los archivos como se describe en Compact files in a Transactional Table.
La operación
merge partitionno es compatible.El acceso a tablas transaccionales desde otros sistemas es limitado. Por ejemplo, MaxCompute Graph no admite operaciones de lectura ni escritura. Spark y PAI solo admiten operaciones de lectura.
Antes de realizar operaciones
update,deleteoinsert overwritesobre datos importantes, haga una copia de seguridad manual en otra tabla mediante una instrucciónSELECT...INSERT.
Crear tablas a partir de tablas existentes
Crear tabla (a partir de una existente)
-
Utilice la instrucción
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] AS <select_statement>;para crear otra tabla y copiar datos en ella simultáneamente.Esta instrucción no copia las propiedades de partición. Las columnas de partición de la tabla de origen se tratan como columnas normales en la tabla de destino. Tampoco se copia la propiedad de ciclo de vida de la tabla de origen.
Use el parámetro lifecycle para especificar un ciclo de vida para la nueva tabla. Esta instrucción también permite crear una tabla interna y copiar datos desde una tabla externa.
-
Utilice la instrucción
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] LIKE <existing_table_name>;para crear una nueva tabla con el mismo esquema que una tabla existente.Esta instrucción copia el esquema, pero no copia los datos ni la propiedad de ciclo de vida de la tabla de origen.
Use el parámetro lifecycle para especificar un ciclo de vida para la nueva tabla. Esta instrucción también permite crear una tabla interna que copie el esquema de una tabla externa.
Ejemplos
Tabla sin particiones
-
Cree una tabla sin particiones.
CREATE TABLE test1 (key STRING); -
Cree una tabla sin particiones y especifique valores predeterminados para las columnas.
CREATE TABLE test_default( tinyint_name tinyint NOT NULL default 1Y, smallint_name SMALLINT NOT NULL DEFAULT 1S, int_name INT NOT NULL DEFAULT 1, bigint_name BIGINT NOT NULL DEFAULT 1, binary_name BINARY , float_name FLOAT , double_name DOUBLE NOT NULL DEFAULT 0.1, decimal_name DECIMAL(2, 1) NOT NULL DEFAULT 0.0BD, varchar_name VARCHAR(10) , char_name CHAR(2) , string_name STRING NOT NULL DEFAULT 'N', boolean_name BOOLEAN NOT NULL DEFAULT TRUE );
Tabla con particiones
-
Cree una tabla con particiones AUTO PARTITION que genere particiones basadas en una columna de datos temporales mediante una función de tiempo.
-- The sale_date column is truncated by month to generate a partition column named sale_month. The table is then partitioned by this column. CREATE TABLE IF NOT EXISTS auto_sale_detail( shop_name STRING, customer_id STRING, total_price DOUBLE, sale_date DATE ) AUTO PARTITIONED BY (TRUNC_TIME(sale_date, 'month') AS sale_month); -
Cree una tabla con particiones AUTO PARTITION que genere particiones basadas en el momento de ingesta de datos. El sistema recupera automáticamente la hora en que los datos se escriben en MaxCompute y genera particiones mediante una función de tiempo.
-- After the table is created, when data is written, the system automatically captures the data ingestion time (_partitiontime), truncates it by day, generates a partition column named sale_date, and then partitions the table by this column. CREATE TABLE IF NOT EXISTS auto_sale_detail2( shop_name STRING, customer_id STRING, total_price DOUBLE, _partitiontime TIMESTAMP_NTZ) AUTO PARTITIONED BY (TRUNC_TIME(_partitiontime, 'day') AS sale_date) TBLPROPERTIES('ingestion_time_partition'='true');
Tabla agrupada por hash o rango
-
Cree una tabla sin particiones agrupada por hash.
CREATE TABLE t1 (a STRING, b STRING, c BIGINT) CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets; -
Cree una tabla con particiones agrupada por hash.
CREATE TABLE t2 (a STRING, b STRING, c BIGINT) PARTITIONED BY (dt STRING) CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets; -
Cree una tabla sin particiones agrupada por rango.
CREATE TABLE t3 (a STRING, b STRING, c BIGINT) RANGE CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets; -
Cree una tabla con particiones agrupada por rango.
CREATE TABLE t4 (a STRING, b STRING, c BIGINT) PARTITIONED BY (dt STRING) RANGE CLUSTERED BY (c) SORTED BY (c);
Tabla transaccional
-
Cree una tabla transaccional sin particiones.
CREATE TABLE t5(id BIGINT) TBLPROPERTIES ("transactional"="true"); -
Cree una tabla transaccional con particiones.
CREATE TABLE IF NOT EXISTS t6(id BIGINT) PARTITIONED BY (ds STRING) TBLPROPERTIES ("transactional"="true");
Tabla interna
-
Cree una tabla interna copiando datos de una tabla externa con particiones. La tabla interna no incluirá propiedades de partición.
-
Cree una tabla externa de OSS y una tabla interna de MaxCompute. Cree una tabla interna mediante CREATE TABLE AS.
-- Create an OSS external table and insert data into it. CREATE EXTERNAL TABLE max_oss_test(a INT, b INT, c INT) STORED AS TEXTFILE LOCATION "oss://oss-cn-hangzhou-internal.aliyuncs.com/<bucket_name>"; INSERT INTO max_oss_test VALUES (101, 1, 20241108), (102, 2, 20241109), (103, 3, 20241110); SELECT * FROM max_oss_test; -- Result a b c 101 1 20241108 102 2 20241109 103 3 20241110 -- Create an internal table by using CREATE TABLE AS. CREATE TABLE from_exetbl_oss AS SELECT * FROM max_oss_test; -- Query the new internal table. SELECT * FROM from_exetbl_oss; -- The result shows that all data is copied. a b c 101 1 20241108 102 2 20241109 103 3 20241110 -
Ejecute el comando
DESC from_exetbl_oss;para consultar el esquema de la tabla interna. El comando devuelve la siguiente salida.+------------------------------------------------------------------------------------+ | Owner: ALIYUN$*********** | | Project: ***_*****_*** | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2023-01-10 15:16:33 | | LastDDLTime: 2023-01-10 15:16:33 | | LastModifiedTime: 2023-01-10 15:16:33 | +------------------------------------------------------------------------------------+ | InternalTable: YES | Size: 919 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | Comment | +------------------------------------------------------------------------------------+ | a | string | | | | b | string | | | | c | string | | | +------------------------------------------------------------------------------------+
-
-
Cree una tabla interna copiando el esquema de una tabla externa con particiones. La tabla interna incluye propiedades de partición.
-
Cree la tabla interna
from_exetbl_like. Consulte la tabla externa de OSS desde MaxCompute. Cree una tabla interna mediante CREATE TABLE LIKE.-- Query the OSS external table from MaxCompute. SELECT * FROM max_oss_test; -- Result a b c 101 1 20241108 102 2 20241109 103 3 20241110 -- Create an internal table by using CREATE TABLE LIKE. CREATE TABLE from_exetbl_like LIKE max_oss_test; -- Query the new internal table. SELECT * FROM from_exetbl_like; -- Result: Only the table schema is returned. a b c -
Ejecute el comando
DESC from_exetbl_like;para consultar el esquema de la tabla interna. El comando devuelve la siguiente salida.+------------------------------------------------------------------------------------+ | Owner: ALIYUN$************ | | Project: ***_*****_*** | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2023-01-10 15:09:47 | | LastDDLTime: 2023-01-10 15:09:47 | | LastModifiedTime: 2023-01-10 15:09:47 | +------------------------------------------------------------------------------------+ | InternalTable: YES | Size: 0 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | Comment | +------------------------------------------------------------------------------------+ | a | string | | | | b | string | | | +------------------------------------------------------------------------------------+ | Partition Columns: | +------------------------------------------------------------------------------------+ | c | string | | +------------------------------------------------------------------------------------+
-
Tabla Delta
-
Cree una tabla Delta.
CREATE TABLE mf_tt (pk BIGINT NOT NULL PRIMARY KEY, val BIGINT) TBLPROPERTIES ("transactional"="true"); -
Cree una tabla Delta y establezca propiedades clave de la tabla.
CREATE TABLE mf_tt2 ( pk BIGINT NOT NULL, pk2 BIGINT NOT NULL, val BIGINT, val2 BIGINT, PRIMARY KEY (pk, pk2) ) TBLPROPERTIES ( "transactional"="true", "write.bucket.num" = "64", "acid.data.retain.hours"="120" ) LIFECYCLE 7;
Otros métodos
Reemplazar una tabla existente
-
Cree la tabla original
my_tablee inserte datos en ella.CREATE OR REPLACE TABLE my_table(a BIGINT); INSERT INTO my_table(a) VALUES (1),(2),(3); -
Use
OR REPLACEpara crear una nueva tabla con el mismo nombre y modificar sus columnas.CREATE OR REPLACE TABLE my_table(b STRING); -
Consulte la tabla
my_table. La consulta devuelve el siguiente resultado.+------------+ | b | +------------+ +------------+Las siguientes instrucciones SQL no son válidas:
CREATE OR REPLACE TABLE IF NOT EXISTS my_table(b STRING); CREATE OR REPLACE TABLE my_table AS SELECT; CREATE OR REPLACE TABLE my_table LIKE newtable;
Copiar datos y establecer un ciclo de vida
-- Create a new table named sale_detail_ctas1, copy the data from sale_detail to it, and set a lifecycle.
SET odps.sql.allow.fullscan=true;
CREATE TABLE sale_detail_ctas1 LIFECYCLE 10 AS SELECT * FROM sale_detail;
Ejecute el comando DESC EXTENDED sale_detail_ctas1; para consultar detalles como el esquema y el ciclo de vida de la tabla.
En este ejemplo, sale_detail es una tabla con particiones. Cuando utiliza la instrucción CREATE TABLE ... AS select_statement ... para crear la tabla sale_detail_ctas1, las propiedades de partición no se copian. Las columnas de partición de la tabla de origen se convierten en columnas normales en la tabla de destino. Por lo tanto, sale_detail_ctas1 es una tabla sin particiones con cinco columnas.
Usar constantes para valores de columna
Si utiliza constantes como valores de columna en la cláusula SELECT, especifique nombres de columna. De lo contrario, la cuarta y quinta columnas de la tabla creada sale_detail_ctas3 recibirán nombres predeterminados como _c4 y _c5.
-
Especifique nombres de columna.
SET odps.sql.allow.fullscan=true; CREATE TABLE sale_detail_ctas2 AS SELECT shop_name, customer_id, total_price, '2013' AS sale_date, 'China' AS region FROM sale_detail; -
No especifique nombres de columna.
SET odps.sql.allow.fullscan=true; CREATE TABLE sale_detail_ctas3 AS SELECT shop_name, customer_id, total_price, '2013', 'China' FROM sale_detail;
Copiar un esquema y establecer un ciclo de vida
CREATE TABLE sale_detail_like LIKE sale_detail LIFECYCLE 10;
Ejecute el comando DESC EXTENDED sale_detail_like; para consultar detalles como el esquema y el ciclo de vida de la tabla.
El esquema de sale_detail_like es idéntico al esquema de sale_detail. Se copian todas las propiedades, como nombres de columna, comentarios de columna y comentarios de tabla, excepto la propiedad de ciclo de vida. Sin embargo, los datos de sale_detail no se copian a la tabla sale_detail_like.
Copiar un esquema de una tabla externa
-- Create a new table named mc_oss_extable_orc_like that has the same schema as the external table mc_oss_extable_orc.
CREATE TABLE mc_oss_extable_orc_like LIKE mc_oss_extable_orc;
Ejecute el comando DESC mc_oss_extable_orc_like; para consultar detalles como el esquema de la tabla.
+------------------------------------------------------------------------------------+
| Owner: ALIYUN$****@***.aliyunid.com | Project: max_compute_7u************yoq |
| TableComment: |
+------------------------------------------------------------------------------------+
| CreateTime: 2022-08-11 11:10:47 |
| LastDDLTime: 2022-08-11 11:10:47 |
| LastModifiedTime: 2022-08-11 11:10:47 |
+------------------------------------------------------------------------------------+
| InternalTable: YES | Size: 0 |
+------------------------------------------------------------------------------------+
| Native Columns: |
+------------------------------------------------------------------------------------+
| Field | Type | Label | Comment |
+------------------------------------------------------------------------------------+
| id | string | | |
| name | string | | |
+------------------------------------------------------------------------------------+
Nuevos tipos de datos
SET odps.sql.type.system.odps2=true;
CREATE TABLE test_newtype (
c1 TINYINT,
c2 SMALLINT,
c3 INT,
c4 BIGINT,
c5 FLOAT,
c6 DOUBLE,
c7 DECIMAL,
c8 BINARY,
c9 TIMESTAMP,
c10 ARRAY<MAP<BIGINT,BIGINT>>,
c11 MAP<STRING,ARRAY<BIGINT>>,
c12 STRUCT<s1:STRING,s2:BIGINT>,
c13 VARCHAR(20))
LIFECYCLE 1;
Comandos relacionados
ALTER TABLE: Modifica la estructura o las propiedades de una tabla.
TRUNCATE TABLE: Elimina todos los datos de una tabla.
DROP TABLE: Elimina una tabla.
DESC TABLE/VIEW: Muestra información sobre una tabla interna, vista, vista materializada, tabla externa, tabla agrupada o tabla transaccional de MaxCompute.
SHOW: Muestra la instrucción DDL de SQL para una tabla, todas las tablas y vistas de un proyecto, o todas las particiones de una tabla.