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, você pode usar uma data como coluna de partição e definir níveis como
year/month/week/day/hour/minute.O número máximo de partições por tabela é configurável por projeto, com um padrão de 60.000.
Limitações adicionais de tabelas estão documentadas em MaxCompute SQL limits.
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 do OSS usando o parser de dados de texto integrado. Outros formatos são abordados em 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>';
Tabelas transacionais e Delta
-
Cria uma tabela transacional. Você pode executar operações UPDATE ou DELETE neste 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, você pode 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 clusterização hash por padrão, com a chave primária completa como chave de cluster. Se as consultas filtrarem frequentemente 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 distribui 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.
Se você não especificar explicitamente uma chave de cluster, o sistema usa 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. Você deve especificá-la ao criar a tabela.
-
Cláusulas CTAS e LIKE
-
Cria uma nova tabela com base 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 a 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 não copia os dados. Esta cláusula aplica-se a tabelas externas e a 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ão se aplica |
|
IF NOT EXISTS |
Não |
Cria uma tabela apenas se ainda não existir uma com o mesmo nome. |
Sem o IF NOT EXISTS, a criação de uma tabela com nome duplicado retorna um erro. Com o IF NOT EXISTS, a instrução é bem-sucedida mesmo que exista uma tabela com o mesmo nome e um schema diferente. Os metadados da tabela existente permanecem inalterados. |
|
table_name |
Sim |
O 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 |
A 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 de 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 |
O nome da coluna. |
|
|
col_comment |
Não |
O comentário da coluna. |
Deve ser uma string de 1.024 bytes ou menos. |
|
data_type |
Sim |
O tipo de dados da coluna. |
Tipos suportados: BIGINT, DOUBLE, BOOLEAN, DATETIME, DECIMAL, STRING e outros listados em Data types. |
|
NOT NULL |
Não |
Especifica que a coluna não pode conter valores NULL. |
Para mais informações sobre como modificar a propriedade NOT NULL, consulte Partition operations. |
|
default_value |
Não |
O valor padrão para a coluna. |
Se uma operação Nota
Funções como |
|
table_comment |
Não |
O comentário da tabela. |
Deve ser uma string de 1.024 bytes ou menos. |
|
LIFECYCLE |
Não |
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 particionamento automático. Escolha com base em como as colunas de partição são geradas. Partitioned table overview.
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. |
Você pode especificar partições usando PARTITIONED BY ou AUTO PARTITIONED BY, mas não ambos. |
|
col_name |
Sim |
O nome da coluna de partição. |
|
|
data_type |
Sim |
O 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 sendo suportado). Lista completa em Data types. O particionamento elimina varreduras completas na tabela para operações no nível da partição. |
|
col_comment |
Não |
O comentário para a 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 dois bytes, 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 particionamento automático
Uma tabela com particionamento automático gera colunas de partição automaticamente. Os detalhes de uso estão em Partitioned table types.
|
Parâmetro |
Obrigatório |
Descrição |
Observações |
|
AUTO PARTITIONED BY |
Sim |
Especifica as partições para uma tabela com particionamento automático. |
Você pode especificar partições usando PARTITIONED BY ou AUTO PARTITIONED BY, mas não ambos. |
|
auto_partition_expression |
Sim |
A 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 do tipo hora ou data com base em uma unidade de tempo especificada para gerar uma coluna de partição. |
|
auto_partition_column_name |
Não |
O nome da coluna de partição gerada. Se um nome não 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 horário de ingestão dos dados. |
O particionamento por tempo de ingestão é descrito em Auto-partitioned tables based on data ingestion time. |
Parâmetros de tabela clusterizada
Parâmetros de tabela clusterizada
As tabelas clusterizadas são categorizadas em tabelas clusterizadas por hash e tabelas clusterizadas por intervalo.
Tabela clusterizada por 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 skew de dados e alcançar um 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 um 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 as consultas. |
|
number_of_buckets |
Sim |
Especifica o número de buckets hash. |
Este valor é obrigatório e depende do volume de dados. |
Ao selecionar o número de buckets hash, siga estes dois princípios:
Mantenha o tamanho do bucket hash moderado: O tamanho recomendado para 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.
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, o que melhora a eficiência da execução.
Tabela clusterizada por intervalo
|
Parâmetro |
Obrigatório |
Descrição |
Observações |
|
RANGE CLUSTERED BY |
Sim |
Especifica as colunas de cluster de intervalo. |
O MaxCompute realiza 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 clusterizada por hash. |
|
number_of_buckets |
Sim |
Especifica o número de buckets. |
Para uma tabela clusterizada por intervalo, a prática recomendada de potência de 2 (2n) que se aplica a tabelas clusterizadas por 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 clusterizadas por intervalo. Se você omiti-lo, o sistema determinará automaticamente o número ideal de buckets com base no volume de dados. |
Quando uma operação de join ou agregação é realizada em uma tabela clusterizada por intervalo, se a chave de join ou chave de grupo for a chave de clusterização de intervalo ou seu prefixo, você pode eliminar a redistribuição de dados (shuffle remove) para melhorar o desempenho. Você pode executar o comando set odps.optimizer.enable.range.partial.repartitioning=true/false; para ativar ou desativar esse recurso. Ele é desativado por padrão.
-
Benefícios das tabelas clusterizadas:
Pruning de buckets otimizado
Agregações otimizadas
Armazenamento otimizado
-
Limitações das tabelas clusterizadas:
INSERT INTOnão é suportado. Você pode adicionar dados apenas usandoINSERT OVERWRITE.O upload direto de dados para uma tabela clusterizada por intervalo usando o Tunnel não é suportado porque o Tunnel faz o upload de dados de forma não ordenada.
Os 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 do OSS. Outros tipos de tabelas externas estão documentados em External tables.
|
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 à autorização, compressão e parsing de caracteres para a tabela externa. |
|
oss_location |
Sim |
O local de armazenamento no OSS dos dados da tabela externa. Para mais informações, consulte OSS external tables. |
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 de 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 desduplicados 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. Você deve definir este parâmetro como |
Indica que a tabela suporta as propriedades transacionais das tabelas ACID do MaxCompute. A tabela usa o modelo de Controle de Concorrência Multiversão (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. Você pode modificar este parâmetro para uma tabela particionada, e a nova configuração entra em vigor para novas partições. Você não pode 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 para o qual você pode consultar estados de dados históricos usando o Time Travel. Se você 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 usa esta coluna em combinação com as colunas de chave primária para desduplicar 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 quando você cria 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 quando a tabela é criada, e um erro é relatado se esta condição não for atendida.Recursos não suportados:
CLUSTERED BY,EXTERNALeCREATE TABLE ASnão são suportados.
-
Outras limitações:
Atualmente, outros engines não podem operar diretamente em uma Delta Table. Apenas o MaxCompute SQL é suportado.
Você não pode converter uma tabela padrão em uma Delta Table.
Você não pode realizar alterações de schema 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 se aplicam a uma Transactional Table:
-
Você pode definir a propriedade
transactionalapenas ao criar uma tabela. Você não pode usarALTER 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 Você não pode definir uma tabela clusterizada ou uma tabela externa como uma Transactional Table.
Você não pode converter uma tabela interna padrão, tabela externa ou tabela clusterizada em uma Transactional Table, ou vice-versa.
A compactação automática não é suportada. Compacte os arquivos manualmente conforme descrito em Compact files in a 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. O Spark e o PAI suportam apenas operações de leitura.
Antes de executar operações de
update,deleteouinsert overwriteem dados importantes, faça o backup manual deles para outra tabela usando uma instruçãoSELECT...INSERT.
Criar tabela (a partir de existente)
Criar tabela (a partir de existente)
-
Você pode usar a instrução
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] AS <select_statement>;para criar outra tabela e, simultaneamente, copiar dados para a nova tabela.Esta instrução não copia as 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.
Você pode usar 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.
-
Você pode usar a instrução
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] LIKE <existing_table_name>;para criar uma nova tabela com o mesmo schema de uma tabela existente.Esta instrução copia o schema, mas não copia os dados nem a propriedade de ciclo de vida da tabela de origem.
Você pode usar 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 schema 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 as 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 baseada em tempo, 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 horário de ingestão dos 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 clusterizada por hash ou intervalo
-
Crie uma tabela não particionada clusterizada por hash.
CREATE TABLE t1 (a STRING, b STRING, c BIGINT) CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets; -
Crie uma tabela particionada clusterizada por 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 clusterizada por intervalo.
CREATE TABLE t3 (a STRING, b STRING, c BIGINT) RANGE CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets; -
Crie uma tabela particionada clusterizada por 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 do OSS e uma tabela interna do 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 schema 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 schema de uma tabela externa particionada. A tabela interna inclui propriedades de partição.
-
Crie a tabela interna
from_exetbl_like. Consulte a tabela externa do 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 schema 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 Delta table.
CREATE TABLE mf_tt (pk BIGINT NOT NULL PRIMARY KEY, val BIGINT) TBLPROPERTIES ("transactional"="true"); -
Crie uma Delta table e defina as principais propriedades 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 modifique 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 schema e o ciclo de vida da tabela.
Neste exemplo, sale_detail é uma tabela particionada. Quando você usa 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 você usar constantes como valores de coluna na cláusula SELECT, especifique os nomes das 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 os nomes das 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 os nomes das 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 schema 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 schema e o ciclo de vida da tabela.
O schema de sale_detail_like é idêntico ao schema 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 schema 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 schema 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 se a tabela estiver dentro do período de retenção de dados. A restauração requer que o local backup esteja configurado.
A exclusão de 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 o IF EXISTS, a tentativa de excluir uma tabela inexistente retorna uma exceção. Com o IF EXISTS, a instrução é bem-sucedida mesmo que a tabela não exista. |
|
table_name |
Sim |
O 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: Modify and view tables.
Para gerenciar partições de tabelas existentes: Partition operations.
Para gerenciar colunas de tabelas existentes: Column operations.