O MaxCompute lê e grava arquivos no formato Avro armazenados no Object Storage Service (OSS) por meio de tabelas externas, sem mover os dados para o armazenamento interno do MaxCompute.
As tabelas externas Avro permitem:
Consultar arquivos Avro no OSS diretamente com SQL
Gravar dados do MaxCompute no OSS em formato Avro
Particionar dados para filtragem eficiente nas consultas
Usar o parser de dados open-source nativo, sem necessidade de código de serialização personalizado
Limitações
|
Restrição |
Detalhe |
|
Propriedade de cluster |
Tabelas externas do OSS não suportam a propriedade de cluster |
|
Tamanho de arquivo individual |
Máximo de 2 GB. Divida arquivos maiores que 2 GB antes de criar a tabela externa |
|
Região |
O MaxCompute e o OSS devem estar na mesma região |
Tipos de dados suportados
A tabela a seguir lista os tipos de dados do MaxCompute compatíveis com tabelas externas Avro. Para a referência completa de tipos, consulte Tipos de dados (V1.0) e Tipos de dados (V2.0).
|
Tipo de dado |
Suportado |
|
STRING |
Sim |
|
INT |
Sim |
|
FLOAT |
Sim |
|
DOUBLE |
Sim |
|
BOOLEAN |
Sim |
|
ARRAY |
Sim |
|
MAP |
Sim |
|
TINYINT |
Não |
|
SMALLINT |
Não |
|
BIGINT |
Não |
|
BINARY |
Não |
|
DECIMAL(precision,scale) |
Não |
|
VARCHAR(n) |
Não |
|
CHAR(n) |
Não |
|
DATE |
Não |
|
DATETIME |
Não |
|
TIMESTAMP |
Não |
|
TIMESTAMP_NTZ |
Não |
|
STRUCT |
Não |
|
JSON |
Não |
Crie uma tabela externa Avro
Sintaxe
CREATE EXTERNAL TABLE <mc_oss_extable_name>
(
<col_name> <data_type>,
...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
STORED AS avro
LOCATION '<oss_location>';
Parâmetros
Para obter descrições dos parâmetros, consulte Parâmetros de sintaxe básica.
Gravar dados
Para consultar a sintaxe de gravação, veja Gravar dados no OSS.
Consulta e análise
Sobre a sintaxe SELECT, consulte Ler dados do OSS.
Para otimizar o plano de consulta, veja Otimização de consulta.
Exemplo: crie, grave e consulte uma tabela externa Avro
Este exemplo demonstra como criar uma tabela externa Avro particionada, importar metadados de partição, ler dados e gravar uma nova linha.
Pré-requisitos
Antes de começar, verifique se você tem:
Um bucket do OSS na mesma região do projeto do MaxCompute. Consulte Criar um bucket e Gerenciar pastas
Permissões de acesso ao OSS concedidas via conta Alibaba Cloud, usuário do Resource Access Management (RAM) ou 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
O MaxCompute cria pastas automaticamente no OSS. Se uma instrução SQL envolver tabelas externas e funções definidas pelo usuário (UDFs), uma única instrução poderá ler e gravar nas tabelas enquanto aplica as UDFs.
Etapa 1: Carregar dados de teste
Faça login no console do OSS e carregue o arquivo de dados de teste 20250612TableSink na pasta external-table-test/avro/dt=20250521/ do seu bucket. Para instruções de upload, consulte Carregar arquivos.
Etapa 2: Crie uma tabela externa Avro
CREATE EXTERNAL TABLE mc_oss_extable_name_avro_pt
(
vehicleId STRING,
recordId STRING,
patientId STRING,
calls STRING,
locationLatitute STRING,
locationLongtitue STRING,
recordTime STRING,
direction STRING
)
PARTITIONED BY (dt STRING)
STORED AS avro
LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/external-table-test/avro/';
Etapa 3: Importar metadados de partição
Para tabelas externas particionadas, execute MSCK REPAIR TABLE para registrar as partições existentes do OSS no MaxCompute:
MSCK REPAIR TABLE mc_oss_extable_name_avro_pt ADD PARTITIONS;
Etapa 4: Ler dados da tabela externa Avro
SELECT * FROM mc_oss_extable_name_avro_pt WHERE dt=20250521;
Resultado retornado:
+------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
| vehicleid | recordid | patientid | calls | locationlatitute | locationlongtitue | recordtime | direction | dt |
+------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
| 1 | 12 | 76 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:10 | SW | 20250521 |
| 1 | 1 | 51 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | S | 20250521 |
| 1 | 2 | 13 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:01 | NE | 20250521 |
| 1 | 3 | 48 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:02 | NE | 20250521 |
| 1 | 4 | 30 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:03 | W | 20250521 |
| 1 | 5 | 47 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:04 | S | 20250521 |
| 1 | 6 | 9 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:05 | S | 20250521 |
| 1 | 7 | 53 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:06 | N | 20250521 |
| 1 | 8 | 63 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:07 | SW | 20250521 |
| 1 | 9 | 4 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:08 | NE | 20250521 |
| 1 | 10 | 31 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:09 | N | 20250521 |
+------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
Etapa 5: Gravar dados na tabela externa Avro
INSERT INTO mc_oss_extable_name_avro_pt PARTITION (dt='20250521') VALUES ('1','16','76','1','46.81006','-92.08174','9/14/2014 0:10','SW');
Etapa 6: Verifique os dados gravados
SELECT * FROM mc_oss_extable_name_avro_pt WHERE dt=20250521;
Resultado retornado, com a linha recém-inserida (recordId 16) no topo:
+------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
| vehicleid | recordid | patientid | calls | locationlatitute | locationlongtitue | recordtime | direction | dt |
+------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
| 1 | 16 | 76 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:10 | SW | 20250521 |
| 1 | 12 | 76 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:10 | SW | 20250521 |
| 1 | 1 | 51 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | S | 20250521 |
| 1 | 2 | 13 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:01 | NE | 20250521 |
| 1 | 3 | 48 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:02 | NE | 20250521 |
| 1 | 4 | 30 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:03 | W | 20250521 |
| 1 | 5 | 47 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:04 | S | 20250521 |
| 1 | 6 | 9 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:05 | S | 20250521 |
| 1 | 7 | 53 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:06 | N | 20250521 |
| 1 | 8 | 63 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:07 | SW | 20250521 |
| 1 | 9 | 4 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:08 | NE | 20250521 |
| 1 | 10 | 31 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:09 | N | 20250521 |
+------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+