Utilize tabelas externas RCFile para consultar e gravar dados no formato RCFile no Object Storage Service (OSS) sem mover os dados para o MaxCompute. O OSS gerencia o armazenamento, enquanto o MaxCompute cuida do schema e da execução das consultas.
Restrições
|
Restrição |
Detalhe |
|
Propriedade de cluster |
Não suportada para tabelas externas do OSS |
|
Limite de tamanho de arquivo |
2 GB por arquivo. Divida arquivos maiores que 2 GB antes de referenciá-los. |
|
Região |
O MaxCompute e o OSS devem estar na mesma região |
Tipos de dados suportados
Para obter a lista completa de tipos de dados do MaxCompute, 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_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';
Para descrições dos parâmetros, consulte Parâmetros de sintaxe básica.
Grave dados
Para a sintaxe de gravação, consulte Gravar dados no OSS.
Consulta e análise
Para a sintaxe selecione, consulte Ler dados do OSS.
Para ajuste de plano de consulta, consulte Otimização de consulta.
Exemplo de ponta a ponta
Este exemplo crie uma tabela externa RCFile particionada, sincroniza metadados de partição do OSS, consulta dados e grava um novo registro.
Pré-requisitos
Antes de começar, certifique-se de ter:
Um projeto do MaxCompute. Consulte Criar um projeto do MaxCompute.
Um bucket do OSS na mesma região do seu projeto do MaxCompute. Consulte Criar um bucket e Gerenciar pastas. O MaxCompute pode criar pastas do OSS automaticamente — não é necessário criá-las antes de executar SQL.
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.
Etapa 1: Faça upload dos dados de teste
Faça login no console do OSS e envie o arquivo de dados RCFile para a pasta oss-mc-test/Rcfile/dt=20241223/. Consulte Fazer upload de arquivos para o OSS.
Etapa 2: 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/';
Etapa 3: Sincronize os metadados da partição
Para tabelas externas particionadas, sincronize os metadados da partição do OSS para o MaxCompute após o upload dos dados:
-- Import partition data.
MSCK REPAIR TABLE mc_oss_rcfile_extable ADD PARTITIONS;
Para a sintaxe completa, consulte Sintaxe para adicionar dados de partição a uma tabela externa do OSS.
Etapa 4: Consulte a tabela externa
SELECT * FROM mc_oss_rcfile_extable2_pt WHERE dt=20241223;
Resultado esperado:
+------------+------------+------------+------------+------------------+-------------------+------------------+------------+------------+
| 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 |
+------------+------------+------------+------------+------------------+-------------------+------------------+------------+------------+
Etapa 5: Grave dados
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');
Etapa 6: Verifique a gravação
SELECT * FROM mc_oss_rcfile_extable2_pt WHERE dt=20250521 AND recordId='13';
Resultado esperado:
+------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+
| vehicleid | recordid | patientid | calls | locationlatitute | locationlongtitue | recordtime | direction | dt |
+------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+
| 1 | 13 | 76 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:10 | SW | 20251223 |
+------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+