Este tópico descreve como criar, ler e gravar dados em tabelas externas do OSS no formato Hudi.
O MaxCompute suporta o recurso de tabela externa apenas na versão publicada do kit de desenvolvimento de software (SDK) do Hudi. Não haverá novas atualizações de versão nem melhorias de recursos. Use tabelas externas do Paimon para ler dados em formatos de tabela de data lake.
Limitações
Antes de criar uma tabela externa do Hudi, verifique as seguintes restrições:
Tabelas externas do OSS não suportam a propriedade de cluster.
O tamanho máximo de um único arquivo é 2 GB. Divida os arquivos que excederem esse limite antes da leitura.
O MaxCompute e o Object Storage Service (OSS) devem estar na mesma região.
-
As tabelas externas do Hudi permitem apenas a leitura completa dos dados dos arquivos mapeados. As seguintes operações não têm suporte:
Ocultação automática de colunas do sistema
Leituras incrementais
Leituras de snapshot
Operações de gravação
Para operações que exigem atomicidade, consistência, isolamento e durabilidade (ACID), use tabelas Delta do MaxCompute ou tabelas externas do Paimon.
A versão padrão do SDK do Hudi integrada ao MaxCompute é
org.apache.hudi:hudi-hadoop-mr-bundle:0.12.2-emr-1.0.6. O MaxCompute não garante compatibilidade futura ou retroativa do SDK do Hudi. A comunidade open source é responsável pela compatibilidade.Em tabelas externas particionadas, execute
MSCK REPAIR TABLE <table_name> ADD PARTITIONS;após criar a tabela para registrar as partições existentes no OSS no MaxCompute. Consultas em tabelas particionadas não retornam dados até a conclusão dessa etapa.
Tipos de dados suportados
Para obter a referência completa de tipos, consulte Tipos de dados (Versão 1,0) e Tipos de dados (Versão 2,0).
|
Tipo de dado |
Suporte |
Tipo de dado |
Suporte |
|
TINYINT |
✓ |
STRING |
✗ |
|
SMALLINT |
✓ |
DATE |
✗ |
|
INT |
✓ |
DATETIME |
✗ |
|
BIGINT |
✓ |
TIMESTAMP |
✗ |
|
BINARY |
✓ |
TIMESTAMP_NTZ |
✗ |
|
FLOAT |
✗ |
BOOLEAN |
✓ |
|
DOUBLE |
✗ |
ARRAY |
✓ |
|
DECIMAL(precision,scale) |
✓ |
MAP |
✗ |
|
VARCHAR(n) |
✗ |
STRUCT |
✗ |
|
CHAR(n) |
✗ |
JSON |
✗ |
Crie 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 'org.apache.hudi.hadoop.HoodieParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 'oss_location';
Use os valores de INPUTFORMAT, OUTPUTFORMAT e ROW FORMAT SERDE exatamente como mostrado. Para descrições de outros 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 consulta.
Exemplo
Este exemplo cria uma tabela externa particionada do Hudi, registra suas partições e consulta os dados.
Pré-requisitos
Antes de começar, certifique-se de ter:
Um bucket e uma pasta no OSS na mesma região do projeto do MaxCompute. Para criar um bucket, consulte Criar um bucket. Para criar uma pasta, consulte Gerencie pastas. O MaxCompute também permite criar pastas automaticamente no OSS.
Permissões de acesso ao OSS concedidas a uma conta Alibaba Cloud, a um usuário do Resource Access Management (RAM) ou a uma função do RAM. Para mais detalhes, consulte Autorizar acesso no modo STS para o OSS
A permissão CreateTable no projeto do MaxCompute. Para mais detalhes, consulte Permissões do MaxCompute
Etapa 1: Carregar dados de teste
Faça login no console do OSS e carregue o arquivo de dados de teste formatado em Hudi na pasta oss-mc-test/Demo_hudi_pt/dt=20250612/. Para mais detalhes, consulte Carregar arquivos no OSS.
Etapa 2: Criar uma tabela externa do Hudi
Execute a instrução a seguir para criar uma tabela externa particionada do Hudi mapeada para o local do OSS:
CREATE EXTERNAL TABLE vehicle_hudi_pt (
_hoodie_commit_time string,
_hoodie_commit_seqno string,
_hoodie_record_key string,
_hoodie_partition_path string,
_hoodie_file_name STRING,
id STRING,
name STRING
)
PARTITIONED BY (ds STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS
INPUTFORMAT 'org.apache.hudi.hadoop.HoodieParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/Demo_hudi_pt/';
Etapa 3: Registrar partições
Após criar uma tabela externa particionada, registre as partições do OSS no MaxCompute. Sem essa etapa, as consultas não retornam dados.
MSCK REPAIR TABLE vehicle_hudi_pt ADD PARTITIONS;
Para a sintaxe completa de partição, consulte Sintaxe para adicionar dados de partição a uma tabela externa do OSS.
Etapa 4: Consultar a tabela
SELECT * FROM vehicle_hudi_pt WHERE ds='20250612';