Crie e exclua tabelas não particionadas, particionadas, externas, clusterizadas, transacionais e Delta no MaxCompute.
|
Tipo |
Descrição |
Permissão necessária |
Ferramentas de execução |
|
Cria uma tabela não particionada, particionada, externa ou clusterizada. |
Requer a permissão CreateTable no projeto. |
Execute estes comandos em: |
|
|
Exclui uma tabela particionada ou não particionada. |
Requer a permissão Drop na tabela. |
Criar uma tabela
Crie tabelas não particionadas, particionadas, externas ou clusterizadas.
Limitações
Uma tabela particionada pode ter até seis níveis de partição. Por exemplo, use uma data como coluna de partição e defina níveis como
year/month/week/day/hour/minute.O número máximo de partições por tabela é configurável por projeto, com padrão de 60.000.
Limitações adicionais de tabelas estão documentadas em Limites do MaxCompute SQL.
Sintaxe
Tabela interna
Criar uma tabela interna (não particionada ou 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')]
];
Tabela clusterizada
Criar uma tabela clusterizada
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];
Tabela externa
Criar uma tabela externa
Este exemplo cria uma tabela externa OSS usando o analisador de dados de texto integrado. Outros formatos são abordados em Tabela externa ORC.
CREATE EXTERNAL TABLE [IF NOT EXISTS] <mc_oss_extable_name> (
<col_name> <data_type>, ... )
STORED AS '<file_format>'
[WITH SERDEPROPERTIES (options)]
LOCATION '<oss_location>';
Tabelas transacionais e Delta
-
Cria uma tabela transacional. É possível executar operações UPDATE ou DELETE nesse tipo de tabela. No entanto, tabelas transacionais possuem limitações.
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")]; -
Cria uma tabela Delta. Quando combinada com uma chave primária, permite realizar operações como upserts, consultas incrementais e 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>];-
Uma tabela Delta com chave primária permite usar um subconjunto da chave primária como chave de cluster hash.
Em uma tabela Delta com chave primária, o sistema usa clustering hash por padrão, utilizando a chave primária completa como chave de cluster. Se as consultas filtrarem frequentemente por um subconjunto de colunas da chave primária, especifique explicitamente esse subconjunto como chave de cluster para melhorar o desempenho da filtragem.
-
Se você especificar explicitamente uma chave de cluster, o sistema distribuirá os dados da tabela em buckets hash com base nas colunas especificadas. A chave de cluster deve ser um subconjunto das colunas da chave primária.
Caso nenhuma chave de cluster seja especificada explicitamente, o sistema usará o conjunto completo de colunas da chave primária como chave de cluster padrão.
Não é possível modificar a chave de cluster após a criação da tabela. Especifique-a durante a criação.
-
Cláusulas CTAS e LIKE
-
Cria uma nova tabela baseada em uma tabela existente e copia os dados, mas não copia as propriedades de partição. Esta cláusula aplica-se a tabelas externas e tabelas em projetos Lakehouse externos.
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] AS <select_statement>; -
Cria uma nova tabela com a mesma estrutura de uma tabela existente, mas sem copiar os dados. Esta cláusula aplica-se a tabelas externas e tabelas em projetos Lakehouse externos.
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] LIKE <existing_table_name>;
Parâmetros
Parâmetros gerais
Parâmetros gerais
|
Parâmetro |
Obrigatório |
Descrição |
Observações |
|
OR REPLACE |
Não |
|
Isso equivale a executar os seguintes comandos:
|
|
EXTERNAL |
Não |
Cria uma tabela externa. |
N/A |
|
IF NOT EXISTS |
Não |
Cria uma tabela apenas se não existir outra com o mesmo nome. |
Sem IF NOT EXISTS, criar uma tabela com nome duplicado retorna um erro. Com IF NOT EXISTS, a instrução tem êxito mesmo que exista uma tabela com o mesmo nome e esquema diferente. Os metadados da tabela existente permanecem inalterados. |
|
table_name |
Sim |
Nome da tabela. |
O nome da tabela deve ter 128 bytes ou menos e conter apenas letras, dígitos e sublinhados (_). Não diferencia maiúsculas de minúsculas. Recomenda-se iniciar o nome com uma letra. |
|
PRIMARY KEY(pk) |
Não |
Chave primária da tabela. |
Defina uma ou mais colunas como chave primária para garantir a unicidade da combinação de colunas. Segue a sintaxe padrão de chave primária SQL. As colunas da chave primária devem ser NOT NULL e não podem ser modificadas. Importante
Este parâmetro aplica-se apenas a uma Delta Table. |
|
col_name |
Sim |
Nome da coluna. |
|
|
col_comment |
Não |
Comentário da coluna. |
Deve ser uma string de 1.024 bytes ou menos. |
|
data_type |
Sim |
Tipo de dados da coluna. |
Tipos suportados: BIGINT, DOUBLE, BOOLEAN, DATETIME, DECIMAL, STRING e outros listados em Tipos de dados. |
|
NOT NULL |
Não |
Especifica que a coluna não pode conter valores NULL. |
Para obter mais informações sobre como modificar a propriedade NOT NULL, consulte Operações de partição. |
|
default_value |
Não |
Valor padrão para a coluna. |
Se uma operação Nota
Funções como |
|
table_comment |
Não |
Comentário da tabela. |
Deve ser uma string de 1.024 bytes ou menos. |
|
LIFECYCLE |
Não |
Ciclo de vida da tabela, em dias. |
Apenas inteiros positivos são suportados. A unidade é dias.
|
Parâmetros de tabela particionada
Parâmetros de tabela particionada
O MaxCompute suporta tabelas particionadas padrão e com partição automática. Escolha com base em como as colunas de partição são geradas. Visão geral de tabelas particionadas.
Parâmetros de tabela particionada padrão
|
Parâmetro |
Obrigatório |
Descrição |
Observações |
|
PARTITIONED BY |
Sim |
Especifica as partições para uma tabela particionada padrão. |
É possível especificar partições usando PARTITIONED BY ou AUTO PARTITIONED BY, mas não ambos. |
|
col_name |
Sim |
Nome da coluna de partição. |
|
|
data_type |
Sim |
Tipo de dados da coluna de partição. |
O MaxCompute V1.0 suporta apenas STRING. A V2.0 adiciona TINYINT, SMALLINT, INT, BIGINT e VARCHAR (STRING continua suportado). Lista completa em Tipos de dados. O particionamento elimina varreduras completas de tabela para operações no nível de partição. |
|
col_comment |
Não |
Comentário da coluna de partição. |
Deve ser uma string de 1.024 bytes ou menos. |
Um valor de partição deve ter 255 bytes ou menos. Não pode conter caracteres de byte duplo, como caracteres chineses. O valor deve começar com uma letra e conter apenas letras, dígitos e os seguintes caracteres: espaço, dois pontos (:), sublinhado (_), cifrão ($), cerquilha (#), ponto (.), ponto de exclamação (!) e arroba (@). O comportamento de outros caracteres, como os caracteres de escape \t, \n e /, é indefinido.
Parâmetros de tabela com partição automática
Uma tabela com partição automática gera colunas de partição automaticamente. Detalhes de uso estão em Tipos de tabelas particionadas.
|
Parâmetro |
Obrigatório |
Descrição |
Observações |
|
AUTO PARTITIONED BY |
Sim |
Especifica as partições para uma tabela com partição automática. |
É possível especificar partições usando PARTITIONED BY ou AUTO PARTITIONED BY, mas não ambos. |
|
auto_partition_expression |
Sim |
Expressão que define como a coluna de partição é calculada. Atualmente, apenas a função TRUNC_TIME pode ser usada para gerar a coluna de partição. Apenas uma coluna de partição é suportada. |
A função TRUNC_TIME pode truncar dados de uma coluna de tipo tempo ou data com base em uma unidade de tempo especificada para gerar uma coluna de partição. |
|
auto_partition_column_name |
Não |
Nome da coluna de partição gerada. Se nenhum nome for especificado, o sistema usa |
Com base no cálculo da expressão de partição, uma coluna de partição do tipo STRING é gerada. Você pode especificar explicitamente um nome para esta coluna, mas não pode modificar diretamente seu tipo de dados ou valor. |
|
TBLPROPERTIES('ingestion_time_partition'='true') |
Não |
Especifica se as colunas de partição devem ser geradas com base no tempo de ingestão de dados. |
O particionamento por tempo de ingestão é descrito em Tabelas com partição automática baseadas no tempo de ingestão de dados. |
Parâmetros de tabela clusterizada
Parâmetros de tabela clusterizada
As tabelas clusterizadas são categorizadas em tabelas com cluster hash e tabelas com cluster de intervalo.
Tabela com cluster hash
|
Parâmetro |
Obrigatório |
Descrição |
Observações |
|
CLUSTERED BY |
Sim |
Especifica a chave hash. O MaxCompute calcula valores hash para as colunas especificadas e distribui os dados em buckets hash com base nesses valores. |
Para evitar distorção de dados e obter bom paralelismo, escolha colunas com alta cardinalidade e poucas duplicatas para a cláusula |
|
SORTED BY |
Sim |
Especifica a ordem de classificação das colunas dentro de cada bucket hash. |
Para desempenho ideal, use as mesmas colunas para SORTED BY e CLUSTERED BY. Após especificar a cláusula SORTED BY, o MaxCompute cria automaticamente um índice e o utiliza para acelerar consultas. |
|
number_of_buckets |
Sim |
Especifica o número de buckets hash. |
Este valor é obrigatório e depende do volume de dados. Por padrão, o MaxCompute suporta no máximo 1.111 reducers, o que limita o número de buckets hash a 1.111. Execute o comando |
Ao selecionar o número de buckets hash, siga estes dois princípios:
Mantenha o tamanho do bucket hash moderado: O tamanho recomendado de cada bucket hash é de aproximadamente 500 MB. Por exemplo, se o tamanho estimado da partição for 500 GB, defina o número de buckets como 1.000. Isso resulta em um tamanho médio de bucket hash de cerca de 500 MB. Para tabelas muito grandes, você pode exceder o limite de 500 MB. Um tamanho de 2 GB a 3 GB por bucket é adequado. Também é possível executar o comando
set odps.stage.reducer.num=<concurrency>;para exceder o limite de 1.111 buckets hash.Para otimizar operações de
join, remover as etapas de shuffle e classificação melhora significativamente o desempenho. Isso requer que o número de buckets hash nas duas tabelas seja múltiplo um do outro, por exemplo, 256 e 512. Recomenda-se definir o número de buckets hash como uma potência de 2 (2n), como 512, 1024, 2048 ou 4096. Isso permite que o sistema divida ou mescle buckets hash automaticamente e remova as etapas de shuffle e classificação, melhorando a eficiência da execução.
Tabela com cluster de intervalo
|
Parâmetro |
Obrigatório |
Descrição |
Observações |
|
RANGE CLUSTERED BY |
Sim |
Especifica as colunas de cluster de intervalo. |
O MaxCompute executa operações de bucketing nas colunas especificadas e distribui os dados em buckets com base nos números dos buckets. |
|
SORTED BY |
Sim |
Especifica a ordem de classificação das colunas dentro de cada bucket. |
O uso é o mesmo que para uma tabela com cluster hash. |
|
number_of_buckets |
Sim |
Especifica o número de buckets. |
Para uma tabela com cluster de intervalo, a prática recomendada de potência de 2 (2n) que se aplica a tabelas com cluster hash não é necessária. Qualquer número de buckets é aceitável se os dados estiverem distribuídos uniformemente. Este parâmetro é opcional para tabelas com cluster de intervalo. Se omitido, o sistema determina automaticamente o número ideal de buckets com base no volume de dados. |
Quando uma operação de junção ou agregação é realizada em uma tabela com cluster de intervalo, se a chave de junção ou chave de grupo for a chave de cluster de intervalo ou seu prefixo, é possível eliminar a redistribuição de dados (remoção de shuffle) para melhorar o desempenho. Execute o comando set odps.optimizer.enable.range.partial.repartitioning=true/false; para ativar ou desativar esse recurso. Ele está desativado por padrão.
-
Benefícios das tabelas clusterizadas:
Poda de buckets otimizada
Agregações otimizadas
Armazenamento otimizado
-
Limitações das tabelas clusterizadas:
INSERT INTOnão é suportado. Adicione dados apenas usandoINSERT OVERWRITE.O upload direto de dados para uma tabela com cluster de intervalo via Tunnel não é suportado, pois o Tunnel faz upload de dados de maneira não ordenada.
Recursos de backup e recuperação não são suportados.
Parâmetros de tabela externa
Parâmetros de tabela externa
Esta seção aborda os parâmetros de tabelas externas OSS. Outros tipos de tabelas externas estão documentados em Tabelas externas.
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Especifica o file_format com base no formato de dados da tabela externa. |
|
|
Não |
Especifica parâmetros relacionados a autorização, compactação e análise de caracteres para a tabela externa. |
|
oss_location |
Sim |
Local de armazenamento OSS dos dados da tabela externa. Para obter mais informações, consulte Tabelas externas OSS. |
Parâmetros de Transactional Table e Delta Table
Parâmetros de Transactional Table e Delta Table
Parâmetros de Delta Table
Uma Delta Table é um formato de tabela que suporta leituras e gravações quase em tempo real, armazenamento e acesso incrementais e atualizações em tempo real. Atualmente, apenas tabelas com chave primária são suportadas.
|
Parâmetro |
Obrigatório |
Descrição |
Observações |
|
PRIMARY KEY(PK) |
Sim |
Define a chave primária para a Delta Table, que pode incluir várias colunas. |
A sintaxe segue a sintaxe padrão de chave primária SQL. As colunas da chave primária devem ser definidas como NOT NULL e não podem ser modificadas. Após a definição da chave primária, os dados são deduplicados com base nas colunas da chave primária. A restrição de unicidade é aplicada dentro de uma única partição ou dentro de uma tabela não particionada. |
|
transactional |
Sim |
Obrigatório para criar uma Delta Table. Defina este parâmetro como |
Indica que a tabela suporta as propriedades transacionais das tabelas ACID do MaxCompute. A tabela usa o modelo Multi-Version Concurrency Control (MVCC) para garantir o nível de isolamento de snapshot. |
|
write.bucket.num |
Não |
O valor padrão é 16. O intervalo válido é |
Especifica o número de buckets para cada partição ou para uma tabela não particionada. Isso também indica o número de nós concorrentes para gravação de dados. Modifique este parâmetro para uma tabela particionada, e a nova configuração entrará em vigor para novas partições. Não é possível modificar este parâmetro para uma tabela não particionada. Considere as seguintes recomendações:
|
|
acid.data.retain.hours |
Não |
O valor padrão é 24. O intervalo válido é |
Especifica o intervalo de tempo em horas durante o qual é possível consultar estados históricos de dados usando Time Travel. Se precisar de um histórico de Time Travel superior a 168 horas (7 dias), entre em contato com o suporte técnico do MaxCompute.
|
|
acid.incremental.query.out.of.time.range.enabled |
Não |
Valor padrão: |
Se |
|
acid.write.precombine.field |
Não |
Especifica um único nome de coluna. |
Se um nome de coluna for especificado, o sistema usará esta coluna em combinação com as colunas da chave primária para deduplicar dados dentro do mesmo commit. Isso garante a unicidade e consistência dos dados. Nota
Se um único commit de dados exceder 128 MB, vários arquivos serão gerados. Este parâmetro não se aplica a múltiplos arquivos. |
|
acid.partial.fields.update.enable |
Não |
Se definido como |
Este parâmetro é definido ao criar a tabela. Ele não pode ser modificado após a criação da tabela. |
-
Outros requisitos de parâmetros para Delta Tables:
LIFECYCLE: O ciclo de vida da tabela deve ser maior ou igual ao período de retenção do time travel, ou seja,
lifecycle >= acid.data.retain.hours / 24. Uma verificação é realizada ao criar a tabela, e um erro é relatado se essa condição não for atendida.Recursos não suportados:
CLUSTERED BY,EXTERNALeCREATE TABLE ASnão são suportados.
-
Outras limitações:
Atualmente, outros mecanismos não podem operar diretamente em uma Delta Table. Apenas MaxCompute SQL é suportado.
Não é possível converter uma tabela padrão em uma Delta Table.
Não é possível realizar alterações de esquema nas colunas de chave primária de uma Delta Table.
Parâmetros de Transactional Table
|
Parâmetro |
Obrigatório |
Descrição |
|
|
TBLPROPERTIES("transactional"="true") |
Sim |
Define a tabela como uma Transactional Table, habilitando operações de |
DELETE)](t2043562.dita#concept_2043562). |
As seguintes limitações aplicam-se a uma Transactional Table:
-
Defina a propriedade
transactionalapenas ao criar uma tabela. Não useALTER TABLEpara modificar esta propriedade em uma tabela existente. A seguinte instrução retorna um erro:ALTER TABLE not_txn_tbl SET TBLPROPERTIES("transactional"="true"); -- Error returned. FAILED: Catalog Service Failed, ErrorCode: 151, Error Message: Set transactional is not supported Não é possível definir uma tabela clusterizada ou uma tabela externa como Transactional Table.
Não é possível converter uma tabela interna padrão, tabela externa ou tabela clusterizada em uma Transactional Table, ou vice-versa.
Compactação automática não é suportada. Compacte arquivos manualmente conforme descrito em Compactar arquivos em uma Transactional Table.
A operação
merge partitionnão é suportada.O acesso a Transactional Tables a partir de outros sistemas é limitado. Por exemplo, o MaxCompute Graph não suporta operações de leitura ou gravação. Spark e PAI suportam apenas operações de leitura.
Antes de executar operações de
update,deleteouinsert overwriteem dados importantes, faça backup manual deles em outra tabela usando uma instruçãoSELECT...INSERT.
Criar tabela (a partir de existente)
Criar tabela (a partir de existente)
-
Use a instrução
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] AS <select_statement>;para criar outra tabela e copiar dados simultaneamente para a nova tabela.Esta instrução não copia propriedades de partição. As colunas de partição da tabela de origem são tratadas como colunas regulares na tabela de destino. A propriedade de ciclo de vida da tabela de origem também não é copiada.
Use o parâmetro lifecycle para especificar um ciclo de vida para a nova tabela. Esta instrução também suporta a criação de uma tabela interna e a cópia de dados de uma tabela externa.
-
Use a instrução
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] LIKE <existing_table_name>;para criar uma nova tabela com o mesmo esquema de uma tabela existente.Esta instrução copia o esquema, mas não copia dados nem a propriedade de ciclo de vida da tabela de origem.
Use o parâmetro lifecycle para especificar um ciclo de vida para a nova tabela. Esta instrução também suporta a criação de uma tabela interna que copia o esquema de uma tabela externa.
Exemplos
Tabela não particionada
-
Crie uma tabela não particionada.
CREATE TABLE test1 (key STRING); -
Crie uma tabela não particionada e especifique valores padrão para colunas.
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 );
Tabela particionada
-
Crie uma tabela particionada AUTO PARTITION que gera partições com base em uma coluna de dados temporal usando uma função de tempo.
-- 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); -
Crie uma tabela particionada AUTO PARTITION que gera partições com base no tempo de ingestão de dados. O sistema recupera automaticamente o horário em que os dados são gravados no MaxCompute e gera partições usando uma função de tempo.
-- 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');
Tabela com cluster hash ou de intervalo
-
Crie uma tabela não particionada com cluster hash.
CREATE TABLE t1 (a STRING, b STRING, c BIGINT) CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets; -
Crie uma tabela particionada com cluster hash.
CREATE TABLE t2 (a STRING, b STRING, c BIGINT) PARTITIONED BY (dt STRING) CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets; -
Crie uma tabela não particionada com cluster de intervalo.
CREATE TABLE t3 (a STRING, b STRING, c BIGINT) RANGE CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets; -
Crie uma tabela particionada com cluster de intervalo.
CREATE TABLE t4 (a STRING, b STRING, c BIGINT) PARTITIONED BY (dt STRING) RANGE CLUSTERED BY (c) SORTED BY (c);
Tabela transacional
-
Crie uma tabela transacional não particionada.
CREATE TABLE t5(id BIGINT) TBLPROPERTIES ("transactional"="true"); -
Crie uma tabela transacional particionada.
CREATE TABLE IF NOT EXISTS t6(id BIGINT) PARTITIONED BY (ds STRING) TBLPROPERTIES ("transactional"="true");
Tabela interna
-
Crie uma tabela interna copiando dados de uma tabela externa particionada. A tabela interna não incluirá propriedades de partição.
-
Crie uma tabela externa OSS e uma tabela interna MaxCompute. Crie uma tabela interna usando 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 -
Execute o comando
DESC from_exetbl_oss;para visualizar o esquema da tabela interna. O comando retorna a seguinte saída.+------------------------------------------------------------------------------------+ | 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 | | | +------------------------------------------------------------------------------------+
-
-
Crie uma tabela interna copiando o esquema de uma tabela externa particionada. A tabela interna inclui propriedades de partição.
-
Crie a tabela interna
from_exetbl_like. Consulte a tabela externa OSS a partir do MaxCompute. Crie uma tabela interna usando 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 -
Execute o comando
DESC from_exetbl_like;para visualizar o esquema da tabela interna. O comando retorna a seguinte saída.+------------------------------------------------------------------------------------+ | 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 | | +------------------------------------------------------------------------------------+
-
Tabela Delta
-
Crie uma tabela Delta.
CREATE TABLE mf_tt (pk BIGINT NOT NULL PRIMARY KEY, val BIGINT) TBLPROPERTIES ("transactional"="true"); -
Crie uma tabela Delta e defina propriedades-chave da tabela.
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;
Outros métodos
Substituir uma tabela existente
-
Crie a tabela original
my_tablee insira dados nela.CREATE OR REPLACE TABLE my_table(a BIGINT); INSERT INTO my_table(a) VALUES (1),(2),(3); -
Use
OR REPLACEpara criar uma nova tabela com o mesmo nome e modificar suas colunas.CREATE OR REPLACE TABLE my_table(b STRING); -
Consulte a tabela
my_table. A consulta retorna o seguinte resultado.+------------+ | b | +------------+ +------------+As seguintes instruções SQL são invá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 dados e definir um 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;
Execute o comando DESC EXTENDED sale_detail_ctas1; para visualizar detalhes como o esquema e o ciclo de vida da tabela.
Neste exemplo, sale_detail é uma tabela particionada. Ao usar a instrução CREATE TABLE ... AS select_statement ... para criar a tabela sale_detail_ctas1, as propriedades de partição não são copiadas. As colunas de partição da tabela de origem tornam-se colunas regulares na tabela de destino. Portanto, sale_detail_ctas1 é uma tabela não particionada com cinco colunas.
Usar constantes para valores de coluna
Se usar constantes como valores de coluna na cláusula SELECT, especifique nomes de colunas. Caso contrário, a quarta e a quinta colunas na tabela criada sale_detail_ctas3 receberão nomes padrão como _c4 e _c5.
-
Especifique nomes de colunas.
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; -
Não especifique nomes de colunas.
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 um esquema e definir um ciclo de vida
CREATE TABLE sale_detail_like LIKE sale_detail LIFECYCLE 10;
Execute o comando DESC EXTENDED sale_detail_like; para visualizar detalhes como o esquema e o ciclo de vida da tabela.
O esquema de sale_detail_like é idêntico ao esquema de sale_detail. Todas as propriedades, como nomes de colunas, comentários de colunas e comentários de tabela, são copiadas, exceto a propriedade de ciclo de vida. No entanto, os dados em sale_detail não são copiados para a tabela sale_detail_like.
Copiar um esquema de uma tabela 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;
Execute o comando DESC mc_oss_extable_orc_like; para visualizar detalhes como o esquema da tabela.
+------------------------------------------------------------------------------------+
| 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 | | |
+------------------------------------------------------------------------------------+
Novos tipos de dados
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;
DROP TABLE
Exclui uma tabela não particionada ou uma tabela particionada.
Precauções
Tenha cuidado ao excluir uma tabela. Uma tabela excluída só pode ser restaurada se o backup e a restauração estiverem ativados para o projeto e a tabela estiver dentro do período de retenção de dados. A restauração requer que o backup local esteja configurado.
Excluir uma tabela reduz o uso de armazenamento do projeto MaxCompute.
Sintaxe
DROP TABLE [IF EXISTS] <table_name>;
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
IF EXISTS |
Não |
Sem IF EXISTS, tentar excluir uma tabela inexistente retorna uma exceção. Com IF EXISTS, a instrução tem êxito mesmo que a tabela não exista. |
|
table_name |
Sim |
Nome da tabela a ser excluída. |
Exemplos
-- Drop the sale_detail table. The statement succeeds regardless of whether the table exists.
DROP TABLE IF EXISTS sale_detail;
Referências
Para copiar dados de tabela para outra tabela: CLONE TABLE.
Para modificar e visualizar informações da tabela: Modificar e visualizar tabelas.
Para gerenciar partições de tabelas existentes: Operações de partição.
Para gerenciar colunas de tabelas existentes: Operações de coluna.