As Delta Tables do MaxCompute são um formato de tabela de alto desempenho para conjuntos de dados analíticos em grande escala, disponíveis como Append Delta Tables (sem chave primária) e PK Delta Tables (com chave primária).
Visão geral
A Delta Table é um formato de tabela de alto desempenho no Alibaba Cloud MaxCompute com suporte a transações ACID, consultas incrementais, time travel, bucketing dinâmico de cluster, atualizações de dados em tempo real e evolução de schema. Os recursos nativos de data lakehouse e computação quase em tempo real do MaxCompute permitem usar SQL padrão para criar, atualizar e consultar Delta Tables sem gerenciar o armazenamento subjacente ou metadados. O MaxCompute mantém e otimiza essas tabelas automaticamente, garantindo equilíbrio entre facilidade de uso e custo-benefício.
Recursos
Categoria | Recurso | Append Delta Table | PK Delta Table |
DML básico | Insert, Update, Delete e Merge Into. | Compatível | Compatível |
Transações ACID | Read Committed/Snapshot Isolation. | Compatível | Compatível |
Chave primária | Defina uma chave primária. | Não compatível | Compatível com atualizações parciais de colunas |
Evolução de schema | Adicionar, excluir, renomear, reordenar e alterar o tipo de dados das colunas. | Compatível | Compatível |
Importação de dados |
| Upload em Stream/Batch Os dados ficam visíveis imediatamente após um upload em stream. | Upsert |
Time travel | Consulte snapshots históricos por ponto no tempo ou número de versão para reprodução de resultados ou análise de auditoria. | Compatível | Compatível |
Computação incremental | Delta Live Materialized View (MV) e Leitura Incremental. | Compatível (Suporte a visualização materializada incremental em andamento.) | Compatível |
Otimização da organização de dados | Mantém automaticamente arquivos de dados incrementais por meio da mesclagem de arquivos pequenos, COMPACTION multinível e classificação de dados. Otimizar a organização de dados para Append Delta Tables e Otimização da organização de dados para PK Delta tables. | Compatível Configuração de bucket desnecessária. O Dynamic Bucketing adapta-se à distribuição de dados automaticamente. | Compatível |
Otimização do desempenho de consulta | Estatísticas no nível de partição e arquivo (como Min/Max), pruning de partição, pruning de coluna e pushdown de predicado. | Compatível | Compatível |
Segurança e conformidade | Criptografia de armazenamento / Mascaramento dinâmico de dados / Controle de acesso no nível de linha. | Compatível | Compatível |
Recuperação de desastres e backup | Snapshots de tabela / Backup local / Recuperação de desastres com redundância de zona. | Compatível | Compatível |
Custo | Compressão de column-store AliORC e armazenamento em camadas. | Compatível | Compatível |
Experiência do usuário
Atualizações de dados em tempo real para serviços em tempo real
As Delta Tables aceitam escritas e upserts em tempo real por meio de Stream Upload. Os dados tornam-se visíveis imediatamente. O MaxCompute equilibra a latência de escrita com o desempenho de consulta usando uma estratégia de armazenamento em camadas:
Garantia de escritas em tempo real: Novos dados são gravados em buckets não clusterizados sem classificação, assegurando baixa latência e alto throughput.
Melhoria no desempenho de consultas SQL: O serviço de Reclusterização Incremental em segundo plano reorganiza assincronamente os dados incrementais em buckets clusterizados e ordenados. O mecanismo de consulta aplica pruning nos dados base ordenados e verifica apenas uma pequena quantidade de dados incrementais, equilibrando atualidade e eficiência.
Processamento e análise eficiente de dados incrementais
O MaxCompute oferece recursos avançados de processamento incremental. Combine a Computação incremental e as Delta Live Materialized Views (visualização) para construir pipelines de processamento de dados em tempo real.
Adaptação ao crescimento dos negócios e superação dos limites de formatos de tabela anteriores
Alocação dinâmica de buckets: As Append Delta Tables alocam buckets dinamicamente sem exigir especificação DDL. Conforme o volume de dados aumenta, o serviço de Dynamic Bucketing divide ou cria buckets automaticamente, adaptando-se às mudanças e evitando skew e fragmentação.
Evolução de schema: As Delta Tables aceitam adição, exclusão, modificação e renomeação de colunas com total compatibilidade retroativa para evitar perda acidental de dados.
Capacidades unificadas de tabela: Uma única Delta Table aceita INSERT INTO, UPDATE, DELETE e MERGE INTO com armazenamento clusterizado ordenado — combinando capacidades que anteriormente exigiam tabelas particionadas, clusterizadas e transacionais separadas.
Suporte a múltiplos mecanismos: Acesse Delta Tables a partir do MaxCompute SQL, MaxFrame, Spark on MaxCompute e mecanismos open-source (Flink, Spark, StarRocks) por meio do Spark Connector e APIs de armazenamento aberto.
Equilíbrio entre desempenho e confiabilidade
As Delta Tables lidam com volumes de dados de terabytes a petabytes com operações rápidas de metadados. As consultas utilizam pruning de partição, pruning de coluna e pushdown de predicado para minimizar a varredura de dados.
Transações ACID: As Delta Tables usam controle de concorrência otimista para permitir múltiplos escritores simultâneos. O sistema detecta conflitos de escrita e tenta novamente automaticamente.
Segurança e conformidade: As Delta Tables oferecem suporte a criptografia de armazenamento, ACLs no nível de tabela e coluna, permissões no nível de linha e mascaramento dinâmico de dados.
Backup e rollback: Um mecanismo de lixeira versionada permite reverter tabelas para um estado íntegro anterior após corrupção de dados ou exclusão acidental.
Operações SQL
DDL
Crie uma Append Delta Table
-- Create an Append Delta Table
CREATE TABLE <table_name> (
<col_name <data_type> [NOT NULL] [DEFAULT <default_value>] [comment <col_comment>], ...
)
[comment <table_comment>]
[RANGE CLUSTERED BY (<col_name> [, <col_name>, ...]) ]
TBLPROPERTIES (
"table.format.version"="2"
["acid.data.retain.hours"="hours"...]
)
[LIFECYCLE <days>];
Parâmetros TBLPROPERTIES:
Parâmetro | Obrigatório | Descrição | Observações |
"table.format.version"="2" | Sim | Declara o formato da tabela como Delta Table. | |
acid.data.retain.hours | Não | O valor padrão é 24. O intervalo de valores é | Intervalo de tempo, em horas, para consulta de estados históricos de dados via Time Travel.
|
acid.incremental.query.out.of.time.range.enabled | Não | O valor padrão é | Se definido como true, o endTimestamp especificado em uma consulta incremental pode ser posterior ao horário de commit mais recente da tabela. Se o endTimestamp for posterior ao horário atual, múltiplas consultas poderão retornar resultados diferentes devido à possível inserção de novos dados. É possível modifique o valor deste parâmetro para uma tabela. |
Crie uma PK Delta Table
-- Create a PK Delta Table
CREATE TABLE <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>]
TBLPROPERTIES (
"table.format.version"="2"
[, "write.bucket.num" = "N", "acid.data.retain.hours"="hours"...]
)
[LIFECYCLE <days>];
Parâmetros:
-
PRIMARY KEY (PK): Obrigatório para PK Delta Tables. Aceita uma ou mais colunas com combinações de valores únicos. 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.
Após defina a chave primária, os dados são deduplicados pelas colunas de chave primária. A restrição de unicidade aplica-se dentro de uma única partição ou em toda uma tabela não particionada.
Parâmetros TBLPROPERTIES:
Parâmetro | Obrigatório | Descrição | Observações |
"table.format.version"="2" | Sim | Declara o formato da tabela como Delta Table. |
|
write.bucket.num | Não | O valor padrão é 16. O intervalo de valores é | Número de buckets por partição ou tabela não particionada, que também define a concorrência de escrita. Modificável para tabelas particionadas (aplica-se a novas partições); não modificável para tabelas não particionadas. Diretrizes:
|
acid.data.retain.hours | Não | O valor padrão é 24. O intervalo de valores é | Intervalo de tempo, em horas, para consulta de estados históricos de dados via Time Travel.
|
acid.incremental.query.out.of.time.range.enabled | Não | O valor padrão é | Se definido como true, o endTimestamp especificado em uma consulta incremental pode ser posterior ao horário de commit mais recente da tabela. Se o endTimestamp for posterior ao horário atual, múltiplas consultas poderão retornar resultados diferentes devido à possível inserção de novos dados. É possível modifique o valor deste parâmetro para uma tabela. |
acid.write.precombine.field | Não | Especifique o nome de uma coluna. | Se um nome de coluna for especificado, o sistema deduplica os dados com base nas colunas de chave primária (PK) e na coluna especificada durante o processamento de arquivos para o mesmo commit. Isso garante a unicidade e consistência dos dados. Nota Se o volume de dados de um único commit exceder 128 MB, múltiplos arquivos serão gerados. Este parâmetro não se aplica a múltiplos arquivos. |
acid.partial.fields.update.enable | Não | Quando definido como | Defina este parâmetro ao criar a tabela. Você não pode modificá-lo após a criação da tabela. |
Observações
|
Item |
Append Delta Table |
PK Delta Table |
Tabela clusterizada |
|
Número de buckets |
Não é necessário especificar write.bucket.num. Os buckets escalam dinamicamente com o volume de dados. |
Especifique a contagem de buckets no DDL. Padrão: 16. |
/ |
|
Política de organização de dados |
Apenas RANGE CLUSTERED BY (CLUSTERED BY não compatível). SORT BY não é necessário — os dados são ordenados pelos campos RANGE CLUSTERED BY por padrão. |
CLUSTERED BY não permitido. Hash cluster é criado automaticamente na chave primária. |
CLUSTERED BY |
|
Ciclo de vida |
Deve satisfazer |
/ |
/ |
Não é possível converter diretamente uma tabela padrão existente em uma Delta Table.
PK Delta Tables não aceitam evolução de schema para colunas de chave primária (PK).
Atualmente, PK Delta Tables não aceitam o tipo de dados JSON.
CREATE TABLE AS não é compatível.
DML
As Delta Tables aceitam operações DML: Inserir ou sobrescrever dados (INSERT INTO | INSERT OVERWRITE), UPDATE | DELETE e MERGE INTO.
DQL
As Delta Tables aceitam análise de consulta de uso geral. Operações DQL (SELECT).
Importação de dados
Append Delta Tables aceitam upload em lote e upload em stream. Sem chave primária, Upsert e Delete não são compatíveis.
PK Delta Tables aceitam a API Tunnel Upsert/Delete. O Upsert insere uma linha se a chave primária não existir, ou atualiza campos que não são de chave primária caso ela exista.
Otimização da organização de dados
Append Delta Tables usam Range Clustering para organização de dados (Otimizar a organização de dados para Append Delta Tables). Por padrão, Row_ID é a chave de clustering e os buckets escalam dinamicamente. Após especificar uma Cluster Key, a reclusterização incremental em segundo plano mantém a ordem dos dados.
PK Delta Tables usam Hash Clustering na chave primária para escritas e atualizações eficientes. Otimização da organização de dados para PK Delta tables.