Este tópico descreve como criar, ler e gravar dados em tabelas externas RCFile no Object Storage Service (OSS).
Notas de uso
As tabelas externas do OSS não oferecem suporte à propriedade cluster.
O tamanho de um único arquivo não pode exceder 2 GB. Divida os arquivos maiores que esse limite.
O MaxCompute e o OSS devem estar na mesma região.
Evite caracteres especiais (como espaços) nos nomes de diretórios do OSS, pois isso pode causar falhas nas operações de leitura e gravação posteriores.
Tipos de dados compatíveis
Para informações sobre os tipos de dados do MaxCompute, consulte Data types (Version 1.0) e Data types (Version 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 |
|
Criar uma tabela externa
Sintaxe
CREATE EXTERNAL TABLE [IF NOT EXISTS] mc_oss_rcfile_extable
(
<col_name> <data_type>,
...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe'
STORED AS rcfile
LOCATION 'oss_location';
Parâmetros
Para obter mais informações, consulte Basic syntax parameters.
Gravar dados
Para saber mais sobre a sintaxe de gravação de dados do MaxCompute para o OSS, consulte OSS external tables.
Consultas e análise
Para detalhes sobre a sintaxe SELECT, consulte OSS external tables.
Para otimizar planos de consulta, confira OSS external tables.
Exemplo
Este exemplo demonstra como criar uma tabela externa RCFile com o analisador de dados open source integrado, gravar dados no OSS e consultá-los.
-
Pré-requisitos
Possuir um Projeto do MaxCompute criado.
-
Ter um bucket e uma pasta no OSS disponíveis. Para mais detalhes, veja Crie um bucket e Gerencie pastas.
O MaxCompute permite a criação automática de pastas no OSS. Quando uma instrução SQL envolve tabelas externas e funções definidas pelo usuário (UDFs), utilize uma única instrução para ler e gravar dados e executar as UDFs. Crie as pastas manualmente, se necessário.
O MaxCompute opera apenas em regiões específicas. Para evitar problemas de conexão de dados entre regiões, verifique se o bucket do OSS está na mesma região do seu projeto no MaxCompute.
-
Autorização
É necessário ter permissões de acesso ao OSS. Use uma conta da Alibaba Cloud, um usuário do Resource Access Management (RAM) ou uma função do RAM para acessar tabelas externas do OSS. Para detalhes sobre autorização, consulte Authorize access in STS mode for OSS.
Você deve ter a permissão CreateTable no projeto do MaxCompute. Saiba mais sobre permissões de tabela em MaxCompute permissions.
-
Carregue os dados de teste
Acesse o OSS console e envie o arquivo de dados RCFile para a pasta
oss-mc-test/Rcfile/dt=20241223/no bucket do OSS. Para mais instruções, consulte Upload files to OSS. -
Crie uma tabela externa RCFile
CREATE EXTERNAL TABLE mc_oss_rcfile_extable ( vehicleId STRING , recordId STRING, patientId STRING, calls STRING, locationLatitute STRING, locationLongtitue STRING, recordTime STRING, direction STRING ) PARTITIONED BY (dt STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe' STORED AS rcfile LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/Rcfile/'; -
Importe os dados de partição. Se a tabela externa do OSS for particionada, importe os dados de partição correspondentes. Para detalhes, veja Syntax for adding partition data to an OSS external table.
-- Import partition data. MSCK REPAIR TABLE mc_oss_rcfile_extable ADD PARTITIONS; -
Consulte a tabela externa RCFile.
SELECT * FROM mc_oss_rcfile_extable2_pt WHERE dt=20241223; -- The following result is returned: +------------+------------+------------+------------+------------------+-------------------+------------------+------------+------------+ | vehicleid | recordid | patientid | calls | locationlatitute | locationlongtitue | recordtime | direction | dt | +------------+------------+------------+------------+------------------+-------------------+------------------+------------+------------+ | 1 | 1 | 7 | 1 | 39.995353 | 116.410101 | 2025/12/23 10:01 | NW | 20241223 | | 1 | 2 | 15 | 1 | 39.996123 | 116.412345 | 2025/12/24 10:01 | NE | 20241223 | | 2 | 3 | 22 | 2 | 40.001234 | 116.425678 | 2025/12/25 10:01 | SE | 20241223 | | 1 | 4 | 71 | 1 | 39.998888 | 106.419999 | 2025/12/26 10:01 | NW | 20241223 | | 3 | 5 | 50 | 1 | 29.989999 | 116.401111 | 2025/12/27 10:01 | NE | 20241223 | | 2 | 6 | 28 | 3 | 40.003456 | 110.42891 | 2025/12/28 10:01 | NW | 20241223 | | 4 | 7 | 20 | 2 | 39.991234 | 116.435555 | 2025/12/29 10:01 | NE | 20241223 | | 1 | 8 | 13 | 1 | 39.994567 | 116.41789 | 2025/12/30 10:01 | SE | 20241223 | +------------+------------+------------+------------+------------------+-------------------+------------------+------------+------------+ -
Grave dados na tabela externa RCFile.
INSERT INTO TABLE mc_oss_rcfile_extable2_pt PARTITION (dt=20251223) VALUES ('1','13','76','1','46.81006','-92.08174','9/14/2014 0:10','SW'); -
Verifique se os dados foram gravados com sucesso.
SELECT * FROM mc_oss_rcfile_extable2_pt WHERE dt=20250521 AND recordId='13'; -- The following result is returned: +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+ | vehicleid | recordid | patientid | calls | locationlatitute | locationlongtitue | recordtime | direction | dt | +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+ | 1 | 13 | 76 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:10 | SW | 20251223 | +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+