As tabelas externas SequenceFile permitem consultar e gravar dados armazenados no formato Hadoop SequenceFile no Object Storage Service (OSS) diretamente do MaxCompute, sem carregar os dados previamente. Esse recurso é ideal para acessar cargas de trabalho existentes do Hadoop ou Hive a partir do MaxCompute ou compartilhar dados entre sistemas.
Limitações
|
Limitação |
Detalhes |
|
Propriedade |
Incompatível. Não inclua a propriedade |
|
Tamanho de arquivo único |
Não pode exceder 2 GB. Divida arquivos maiores que 2 GB antes de referenciá-los em uma tabela externa. |
|
Região |
O MaxCompute e o OSS devem estar na mesma região. |
Tipos de dados compatíveis
Os tipos de dados do MaxCompute a seguir são compatíveis com tabelas externas SequenceFile. Para a especificação completa de tipos, consulte Tipos de dados (Versão 1.0) e Tipos de dados (Versão 2.0).
|
Tipo de dado |
Compatível |
Tipo de dado |
Compatível |
|
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 |
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>)]
STORED AS sequencefile
LOCATION '<oss_location>';
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Nome da tabela externa no MaxCompute. |
|
|
Sim |
Definições das colunas. Todos os tipos de dados compatíveis estão listados na tabela acima. |
|
|
Não |
Descrição opcional para a tabela. |
|
|
Não |
Define as colunas de partição. Se os dados no OSS estiverem organizados em partições estilo Hive (por exemplo, |
|
|
Sim |
Especifica o formato de armazenamento SequenceFile. |
|
|
Sim |
Caminho do OSS onde os dados SequenceFile estão armazenados, no formato |
Para obter a referência completa de parâmetros, consulte Parâmetros de sintaxe básica.
Gravar dados
Para consultar a sintaxe de gravação de dados do MaxCompute para o OSS, consulte Gravar dados no OSS.
Consultar e analisar dados
Para a sintaxe SELECT, consulte Ler dados do OSS.
Para dicas de desempenho de consulta, consulte Otimização de consultas.
Exemplo: crie, consulte e grave em uma tabela externa SequenceFile
Este exemplo demonstra como criar uma tabela externa SequenceFile particionada, carregar um conjunto de dados de teste do OSS, consultar os dados e gravar uma nova linha.
Pré-requisitos
Antes de começar, verifique se você tem:
Um projeto do MaxCompute. Consulte Criar um projeto.
Um bucket e uma pasta no OSS na mesma região do seu projeto do MaxCompute. Consulte Criar um bucket e Gerencie pastas.
Permissões 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 seu projeto do MaxCompute. Consulte Permissões do MaxCompute.
O MaxCompute oferece suporte à criação automática de pastas no OSS. Se uma instrução SQL envolver tabelas externas e funções definidas pelo usuário (UDFs), use uma única instrução para ler e gravar nas tabelas e utilizar as UDFs. Também é possível criar a pasta manualmente no console do OSS antes de executar as instruções abaixo.
Etapa 1: Carregar dados de teste
Faça login no console do OSS e carregue o arquivo de teste 20250611TableSink na pasta external-table-test/sequence/dt=20250521/ do seu bucket do OSS. Para instruções de upload, consulte Carregar arquivos no OSS.
Etapa 2: Crie a tabela externa
Crie uma tabela externa SequenceFile particionada que aponte para o caminho do OSS onde os dados de teste estão armazenados.
CREATE EXTERNAL TABLE mc_oss_extable_name_sequencefile1_pt
(
vehicleId STRING,
recordId STRING,
patientId STRING,
calls STRING,
locationLatitute STRING,
locationLongtitue STRING,
recordTime STRING,
direction STRING
)
PARTITIONED BY (dt STRING)
STORED AS sequencefile
LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/external-table-test/sequence/';
Etapa 3: Importar dados da partição
Como a tabela é particionada, execute MSCK REPAIR TABLE para detectar e registrar as partições existentes no OSS.
MSCK REPAIR TABLE mc_oss_extable_name_sequencefile1_pt ADD PARTITIONS;
Etapa 4: Selecione os dados
SELECT * FROM mc_oss_extable_name_sequencefile1_pt WHERE dt=20250521;
A consulta retorna 11 linhas do conjunto de dados de teste:
+------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
| 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
Insira uma nova linha na partição.
INSERT INTO mc_oss_extable_name_sequencefile1_pt PARTITION (dt='20250521')
VALUES
('1','16','76','1','46.81006','-92.08174','9/14/2014 0:10','SW');
Etapa 6: Verifique a gravação
Consulte a linha recém-inserida para confirme se a gravação ocorreu corretamente.
SELECT * FROM mc_oss_extable_name_sequencefile1_pt WHERE dt=20250521 AND recordId='16';
Saída esperada:
+------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
| vehicleid | recordid | patientid | calls | locationlatitute | locationlongtitue | recordtime | direction | dt |
+------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
| 1 | 16 | 76 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:10 | SW | 20250521 |
+------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
Próximos passos
Para entender como as tabelas externas funcionam com funções definidas pelo usuário (UDFs), consulte Parâmetros de sintaxe básica.
Para otimizar o desempenho de consultas em grandes conjuntos de dados SequenceFile, consulte Otimização de consultas.