As tabelas externas do Delta Lake no OSS permitem consultar dados no formato Delta Lake diretamente no local, sem movê-los ou convertê-los. Este tópico explica como criar, configurar e consultar essas tabelas.
O MaxCompute oferece suporte a tabelas externas do Delta Lake apenas com uma versão fixa do kit de desenvolvimento de software (SDK) do Delta Lake. Não haverá atualizações do SDK nem desenvolvimento futuro desse recurso. Para novas cargas de trabalho de data lake, utilize tabelas externas do Paimon.
Limitações
Antes de criar uma tabela externa do Delta Lake, verifique as seguintes restrições:
|
Restrição |
Detalhe |
Impacto |
|
Somente leitura, varredura completa |
Suporta apenas leituras completas de todos os dados mapeados para a tabela. Ocultação automática de colunas do sistema, leituras incrementais, leituras de snapshot e operações de escrita não são suportadas. |
Para operações ACID, use tabelas Delta do MaxCompute ou tabelas externas do Paimon. |
|
Ausência da propriedade |
Tabelas externas do OSS não suportam a propriedade |
Omita a cláusula |
|
Limite de 2 GB por arquivo |
Um único arquivo não pode exceder 2 GB. |
Divida os arquivos que ultrapassarem esse limite antes de criar a tabela. |
|
Requisito de mesma região |
O MaxCompute e o bucket do OSS devem estar na mesma região. |
O acesso entre regiões não é suportado e causa falhas na consulta. |
|
Versão fixa do SDK |
O SDK do Delta Lake integrado ao MaxCompute é |
Utilize dados do Delta Lake gravados com uma versão compatível do SDK. |
Tipos de dados suportados
Todos os tipos de dados do MaxCompute listados abaixo são suportados. Para obter detalhes sobre os tipos, consulte Tipos de dados (versão 1.0) e Tipos de dados (versão 2.0).
|
Tipo de dado |
Suportado |
Tipo de dado |
Suportado |
|
TINYINT |
Sim |
STRING |
Sim |
|
SMALLINT |
Sim |
DATE |
Sim |
|
INT |
Sim |
DATETIME |
Sim |
|
BIGINT |
Sim |
TIMESTAMP |
Sim |
|
BINARY |
Sim |
TIMESTAMP_NTZ |
Sim |
|
FLOAT |
Sim |
BOOLEAN |
Sim |
|
DOUBLE |
Sim |
ARRAY |
Sim |
|
DECIMAL(precision,scale) |
Sim |
MAP |
Sim |
|
VARCHAR(n) |
Sim |
STRUCT |
Sim |
|
CHAR(n) |
Sim |
JSON |
Sim |
Criar uma tabela externa
Sintaxe
CREATE EXTERNAL TABLE [IF NOT EXISTS] <mc_oss_extable_name>
(
<col_name> <data_type>,
...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS
INPUTFORMAT 'io.delta.hive.DeltaInputFormat'
OUTPUTFORMAT 'io.delta.hive.DeltaOutputFormat'
LOCATION 'oss_location';
DeltaInputFormat e DeltaOutputFormat são classes de entrada/saída do Delta Lake compatíveis com Hive. A classe ParquetHiveSerDe gerencia a serialização subjacente em Parquet, pois o Delta Lake armazena dados nesse formato. Especifique as três classes para registrar a tabela corretamente.
Para obter detalhes sobre os parâmetros, consulte Parâmetros básicos de sintaxe.
Consultar dados
Para a sintaxe SELECT, consulte Ler dados do OSS.
Para otimização do plano de consulta, consulte Otimização de consultas.
Exemplo: criar e consultar uma tabela externa particionada do Delta Lake
Este exemplo apresenta o fluxo de trabalho completo: upload de dados do Delta Lake para o OSS, criação de uma tabela externa particionada no MaxCompute, importação de metadados de partição e execução de uma consulta.
Pré-requisitos
Antes de começar, certifique-se de ter:
Um bucket do OSS na mesma região do projeto do MaxCompute. Consulte Criar um bucket e Gerenciar pastas
Permissão de acesso ao OSS por meio de uma conta Alibaba Cloud, um usuário do Resource Access Management (RAM) ou uma função do RAM. Consulte Autorizar acesso no modo STS para o OSS
A permissão
CreateTableno projeto do MaxCompute. Consulte Permissões do MaxCompute
Etapas
-
Faça o upload dos dados de teste. Acesse o console do OSS e carregue um arquivo de dados de teste no formato Delta Lake na pasta
oss-mc-test/Demo_delta_pt/dt=20250612/. Para mais detalhes, consulte Fazer upload de arquivos para o OSS.O MaxCompute cria pastas no OSS automaticamente quando instruções SQL referenciam tabelas externas com funções definidas pelo usuário (UDFs). Nos demais casos, crie a pasta manualmente.
-
Crie uma tabela externa do Delta Lake.
CREATE EXTERNAL TABLE test_delta_pt ( id INT ) PARTITIONED BY (dt STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'io.delta.hive.DeltaInputFormat' OUTPUTFORMAT 'io.delta.hive.DeltaOutputFormat' LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/Demo_delta_pt/'; -
Importe os metadados de partição. Para tabelas particionadas, execute
MSCK REPAIR TABLEpara detectar e registrar partições a partir do caminho do OSS. Para mais detalhes, consulte Preencher partições para uma tabela externa do OSS.MSCK REPAIR TABLE test_delta_pt ADD PARTITIONS; -
Consulte a tabela.
SELECT * FROM test_delta_pt WHERE dt='20250612';