Todos os produtos
Search
Central de documentação

MaxCompute:UNLOAD

Última atualização: Jul 04, 2026

Exporte dados de uma tabela do MaxCompute para o Object Storage Service (OSS) ou Hologres com instruções UNLOAD e disponibilize-os para outros mecanismos de computação, como Amazon Redshift e BigQuery.

Execute instruções UNLOAD nas seguintes plataformas:

Como funciona

O comando UNLOAD lê dados de uma tabela ou subconsulta do MaxCompute e os grava em um caminho do OSS ou em uma tabela do Hologres. A saída é dividida em vários arquivos com nomes gerados pelo sistema.

Cada execução do UNLOAD gera novos arquivos sem sobrescrever os existentes.

Pré-requisitos

Antes de começar:

  • Permissão SELECT na tabela source do MaxCompute. Consulte Permissões do MaxCompute.

  • Acesso de escrita ao bucket do OSS ou à tabela do Hologres de destino, autorizado por meio do MaxCompute.

Autorizar o MaxCompute a acessar o OSS

Use a autorização com um clique para maior segurança. Consulte Autorização STS.

Os exemplos neste tópico usam a autorização com um clique com a função padrão AliyunODPSDefaultRole .

Autorizar o MaxCompute a acessar o Hologres

Crie uma função RAM, conceda acesso ao MaxCompute e adicione-a à instância do Hologres. Consulte Criar uma tabela externa do Hologres no modo STS.

Exportar para o OSS usando um StorageHandler integrado

Exporte dados como CSV ou TSV usando um StorageHandler integrado. O sistema anexa automaticamente a extensão .csv ou .tsv ao nome do arquivo.

Sintaxe

UNLOAD FROM {<select_statement> | <table_name> [PARTITION (<pt_spec>)]}
INTO
LOCATION <external_location>
STORED BY <StorageHandler>
[WITH SERDEPROPERTIES ('<property_name>'='<property_value>', ...)];

Parâmetros

Parâmetro

Obrigatório

Descrição

select_statement

Não

Cláusula SELECT que consulta dados de uma tabela source particionada ou não particionada. Consulte Sintaxe SELECT.

table_name, pt_spec

Não

Nome da tabela ou combinação tabela-partição. Não há cobrança de taxa de consulta. O formato de pt_spec é (partition_col1=partition_col_value1, partition_col2=partition_col_value2, ...).

external_location

Sim

Caminho do OSS de destino no formato 'oss://<oss_endpoint>/<object>'. Consulte Usar um endpoint compatível com IPv6 para acessar o OSS.

StorageHandler

Sim

Storage handler integrado. Valores válidos: com.aliyun.odps.CsvStorageHandler e com.aliyun.odps.TsvStorageHandler. A configuração segue o mesmo padrão das tabelas externas do MaxCompute. Consulte Criar uma tabela externa do OSS.

property_name, property_value

Não

Pares chave-valor SERDEPROPERTIES. A configuração segue o mesmo padrão das tabelas externas do MaxCompute. Consulte Tabelas externas do OSS.

Principais SERDEPROPERTIES para OSS:

Propriedade

Descrição

'odps.properties.rolearn'='acs:ram::<uid>:role/AliyunODPSDefaultRole'

ARN da função RAM para autenticação STS.

'odps.text.option.gzip.output.enabled'='true'

Comprime o arquivo de saída no formato GZIP. Apenas GZIP é suportado.

Para controlar o número de arquivos de saída, defina o tamanho dos dados (MB) que cada worker lê da tabela source:

SET odps.stage.mapper.split.size=256;

Os dados exportados têm aproximadamente quatro vezes o tamanho compactado na tabela.

Exemplos

Este exemplo exporta dados da tabela sale_detail:

+------------+-------------+-------------+------------+------------+
| shop_name  | customer_id | total_price | sale_date  | region     |
+------------+-------------+-------------+------------+------------+
| s1         | c1          | 100.1       | 2013       | china      |
| s2         | c2          | 100.2       | 2013       | china      |
| s3         | c3          | 100.3       | 2013       | china      |
| null       | c5          | NULL        | 2014       | shanghai   |
| s6         | c6          | 100.4       | 2014       | shanghai   |
| s7         | c7          | 100.5       | 2014       | shanghai   |
+------------+-------------+-------------+------------+------------+

Etapa 1: Faça logon no console do OSS. Crie o diretório mc-unload/data_location/ em um bucket do OSS na região oss-cn-hangzhou. Consulte Criar buckets.Bucket

O caminho do OSS para este bucket é:

oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-unload/data_location

Etapa 2: Faça logon no cliente MaxCompute e execute a instrução UNLOAD.

Exemplo 1: Exportar todos os dados como CSV com compressão GZIP

-- Control output file count: set the data size (MB) per worker.
SET odps.stage.mapper.split.size=256;
-- Export all data from sale_detail as a GZIP-compressed CSV file.
UNLOAD FROM
  (SELECT * FROM sale_detail)
INTO
  LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-unload/data_location'
  STORED BY 'com.aliyun.odps.CsvStorageHandler'
  WITH SERDEPROPERTIES (
    'odps.properties.rolearn'='acs:ram::<uid>:role/AliyunODPSDefaultRole',
    'odps.text.option.gzip.output.enabled'='true'
  );

Instrução equivalente referenciando a tabela diretamente (sem taxa de consulta):

SET odps.stage.mapper.split.size=256;
UNLOAD FROM sale_detail
INTO
  LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-unload/data_location'
  STORED BY 'com.aliyun.odps.CsvStorageHandler'
  WITH SERDEPROPERTIES (
    'odps.properties.rolearn'='acs:ram::<uid>:role/AliyunODPSDefaultRole',
    'odps.text.option.gzip.output.enabled'='true'
  );

Exemplo 2: Exportar uma partição como TSV com compressão GZIP

SET odps.stage.mapper.split.size=256;
UNLOAD FROM sale_detail PARTITION (sale_date='2013', region='china')
INTO
  LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-unload/data_location'
  STORED BY 'com.aliyun.odps.TsvStorageHandler'
  WITH SERDEPROPERTIES (
    'odps.properties.rolearn'='acs:ram::139699392458****:role/AliyunODPSDefaultRole',
    'odps.text.option.gzip.output.enabled'='true'
  );

Etapa 3: Faça logon no console do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSS para verificar os arquivos exportados no diretório de destino.

  • Resultado do Exemplo 1:Export result

  • Resultado do Exemplo 2:Export result

Exportar para o OSS em formato open source

Exporte dados como ORC, Parquet, RCFILE, SEQUENCEFILE, TEXTFILE ou outros formatos open source.

Sintaxe

UNLOAD FROM {<select_statement> | <table_name> [PARTITION (<pt_spec>)]}
INTO
LOCATION <external_location>
[ROW FORMAT SERDE '<serde_class>'
  [WITH SERDEPROPERTIES ('<property_name>'='<property_value>', ...)]
]
STORED AS <file_format>
[PROPERTIES ('<tbproperty_name>'='<tbproperty_value>')];

Parâmetros

Parâmetro

Obrigatório

Descrição

select_statement

Não

Cláusula SELECT que consulta dados de uma tabela source particionada ou não particionada. Consulte Sintaxe SELECT.

table_name, pt_spec

Não

Nome da tabela ou combinação tabela-partição. Não há cobrança de taxa de consulta. O formato de pt_spec é (partition_col1=partition_col_value1, partition_col2=partition_col_value2, ...).

external_location

Sim

Caminho do OSS de destino no formato 'oss://<oss_endpoint>/<object>'.

serde_class

Não

Classe SerDe. A configuração segue o mesmo padrão das tabelas externas do MaxCompute. Consulte Tabelas externas do OSS.

property_name, property_value

Não

Pares chave-valor SERDEPROPERTIES. A configuração segue o mesmo padrão das tabelas externas do MaxCompute. Consulte Tabelas externas do OSS.

file_format

Sim

Formato do arquivo de saída: ORC, PARQUET, RCFILE, SEQUENCEFILE ou TEXTFILE. A configuração segue o mesmo padrão das tabelas externas do MaxCompute. Consulte Tabelas externas do OSS.

tbproperty_name, tbproperty_value

Não

Propriedades de tabela para compressão ou outras configurações. Por exemplo, 'mcfed.parquet.compression'='SNAPPY' ou 'mcfed.parquet.compression'='LZO'.

Principais PROPERTIES para formatos open source:

Propriedade

Descrição

'mcfed.parquet.compression'='SNAPPY'

Comprime a saída Parquet com Snappy.

'mcfed.parquet.compression'='LZO'

Comprime a saída Parquet com LZO.

Se a saída for comprimida com Snappy ou LZO, a extensão do nome do arquivo ( .snappy ou .lzo ) não aparece no nome do arquivo.

Exemplos

Este exemplo usa a mesma tabela sale_detail da seção anterior.

Etapa 1: Faça logon no console do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSS. Crie o diretório mc-unload/data_location/ no seu bucket do OSS. Consulte Criar buckets.Bucket

Etapa 2: Faça logon no cliente MaxCompute e execute a instrução UNLOAD.

Exemplo 1: Exportar todos os dados como Parquet com compressão Snappy

SET odps.stage.mapper.split.size=256;
UNLOAD FROM
  (SELECT * FROM sale_detail)
INTO
  LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-unload/data_location'
  ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
  WITH SERDEPROPERTIES ('odps.properties.rolearn'='acs:ram::<uid>:role/AliyunODPSDefaultRole')
  STORED AS PARQUET
  PROPERTIES ('mcfed.parquet.compression'='SNAPPY');

Exemplo 2: Exportar uma partição como Parquet com compressão Snappy

SET odps.stage.mapper.split.size=256;
UNLOAD FROM sale_detail PARTITION (sale_date='2013', region='china')
INTO
  LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-unload/data_location'
  ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
  WITH SERDEPROPERTIES ('odps.properties.rolearn'='acs:ram::139699392458****:role/AliyunODPSDefaultRole')
  STORED AS PARQUET
  PROPERTIES ('mcfed.parquet.compression'='SNAPPY');

Etapa 3: Faça logon no console do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSSconsole do OSS para verificar os arquivos exportados.

  • Resultado do Exemplo 1:Export result

  • Resultado do Exemplo 2:Export result

Exportar para o Hologres

Exporte dados do MaxCompute para uma tabela não particionada do Hologres via JDBC.

Sintaxe

UNLOAD FROM {<select_statement> | <table_name>}
INTO
LOCATION <external_location>
STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler'
WITH SERDEPROPERTIES (
  'odps.properties.rolearn'='<ram_arn>',
  'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver',
  'odps.federation.jdbc.target.db.type'='holo'
);

Parâmetros

Parâmetro

Obrigatório

Descrição

select_statement

Não

Cláusula SELECT que consulta dados de uma tabela source não particionada. Consulte Sintaxe SELECT.

table_name

Não

Nome da tabela. Não há cobrança de taxa de consulta.

external_location

Sim

URL de conexão JDBC do Hologres no formato: `'jdbc:postgresql://:/?ApplicationName=MaxCompute&[currentSchema=&][useSSL={true

false}&]table=/'`. Consulte Tabelas externas do Hologres.

SERDEPROPERTIES obrigatórias para o Hologres:

Propriedade

Descrição

'odps.properties.rolearn'='<ram_arn>'

ARN da função RAM para autenticação STS. Encontre-o na página Roles no console RAM, em Basic Information.

'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver'

Classe de driver JDBC para conexão com o Hologres.

'odps.federation.jdbc.target.db.type'='holo'

Define o tipo de banco de dados de destino como Hologres.

Os tipos de dados dos campos na tabela de destino do Hologres devem corresponder aos da tabela source do MaxCompute. Para o mapeamento de tipos, consulte Mapeamentos de tipos de dados entre MaxCompute e Hologres .

Exemplo

Este exemplo exporta dados da tabela data_test no MaxCompute para uma tabela do Hologres chamada mc_2_holo:

+------------+------+
| id         | name |
+------------+------+
| 3          | rgege |
| 4          | Gegegegr |
+------------+------+

Etapa 1: Crie a tabela do Hologres mc_2_holo no banco de dados test. Execute a seguinte instrução em Conectar e consultar com HoloWeb.

CREATE TABLE mc_2_holo (id INT, name TEXT);

Etapa 2: Faça logon no cliente MaxCompute e execute a instrução UNLOAD:

UNLOAD FROM
  (SELECT * FROM data_test)
INTO
  LOCATION 'jdbc:postgresql://hgprecn-cn-5y**********-cn-hangzhou-internal.hologres.aliyuncs.com:80/test?ApplicationName=MaxCompute&currentSchema=public&useSSL=false&table=mc_2_holo/'
  STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler'
  WITH SERDEPROPERTIES (
    'odps.properties.rolearn'='acs:ram::13**************:role/aliyunodpsholorole',
    'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver',
    'odps.federation.jdbc.target.db.type'='holo'
  );

Etapa 3: Consulte os dados exportados no Hologres para verificar o resultado:

SELECT * FROM mc_2_holo;

Saída esperada:

id    name
4     Gegegegr
3     rgege

Controlar a nomenclatura de arquivos

Por padrão, o MaxCompute gera nomes de arquivos sem extensões (exceto CSV/TSV de StorageHandlers integrados). Adicione estas propriedades à cláusula PROPERTIES para personalizar a nomenclatura.

Propriedade

Descrição

'odps.external.data.prefix'='<prefix>'

Prefixo personalizado para todos os nomes de arquivos exportados. Máximo de 10 caracteres.

'odps.external.data.enable.extension'='true'

Exibe a extensão do nome do arquivo com base no formato do arquivo e na classe SerDe.

Extensões de nome de arquivo por formato:

Formato de arquivo

SerDe

Extensão

SEQUENCEFILE

org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

.sequencefile

TEXTFILE

org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

.txt

RCFILE

org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe

.rcfile

ORC

org.apache.hadoop.hive.ql.io.orc.OrcSerde

.orc

PARQUET

org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe

.parquet

AVRO

org.apache.hadoop.hive.serde2.avro.AvroSerDe

.avro

JSON

org.apache.hive.hcatalog.data.JsonSerDe

.json

CSV

org.apache.hadoop.hive.serde2.OpenCSVSerde

.csv

Exemplo: Exportar como TEXTFILE com prefixo mf_ e extensão .txt

SET odps.sql.hive.compatible=true;
SET odps.sql.split.hive.bridge=true;
UNLOAD FROM (SELECT col_tinyint, col_binary FROM mf_fun_datatype LIMIT 1)
INTO
  LOCATION 'oss://oss-cn-beijing-internal.aliyuncs.com/mfosscostfee/demo6/'
  STORED AS textfile
  PROPERTIES (
    'odps.external.data.prefix'='mf_',
    'odps.external.data.enable.extension'='true'
  );

Exemplo: Exportar como CSV com prefixo mf_ e extensão .csv

SET odps.sql.hive.compatible=true;
SET odps.sql.split.hive.bridge=true;
UNLOAD FROM (SELECT col_tinyint, col_binary FROM mf_fun_datatype LIMIT 2)
INTO
  LOCATION 'oss://oss-cn-beijing-internal.aliyuncs.com/mfosscostfee/demo6/'
  STORED BY 'com.aliyun.odps.CsvStorageHandler'
  PROPERTIES (
    'odps.external.data.prefix'='mf_',
    'odps.external.data.enable.extension'='true'
  );

Limites

  • Os nomes dos arquivos são gerados automaticamente. Personalize com um prefixo ou extensão via Controlar a nomenclatura de arquivos.

  • A autenticação de assinatura dupla não é suportada para exportações do Hologres.

  • Tabelas particionadas do Hologres não são suportadas como destinos de exportação.

  • A saída em formato open source omite extensões de arquivo por padrão. Defina odps.external.data.enable.extension=true para ativá-las.

Faturamento

  • A operação UNLOAD em si é gratuita. Qualquer subconsulta (cláusula SELECT) é cobrada como um trabalho SQL padrão.

  • Especificar um nome de tabela diretamente em vez de uma subconsulta não gera taxa de consulta.

  • Armazenar dados estruturados no OSS pode reduzir custos em comparação ao armazenamento do MaxCompute. O armazenamento do MaxCompute custa USD 0,018 por GB-mês (cobrado sobre o tamanho compactado com proporção de ~5:1). O armazenamento Standard do OSS também custa USD 0,018 por GB-mês. Para preços de IA, Archive e Cold Archive do OSS, consulte Taxas de armazenamento. Estime a taxa de compressão real e os custos de acesso antes de migrar dados para evitar cobranças inesperadas.

  • O MaxCompute comprime os dados da tabela internamente. Os dados exportados têm aproximadamente quatro vezes o tamanho compactado na tabela.

Próximos passos

Para importar dados em formato CSV ou open source de um armazenamento externo para o MaxCompute, use LOAD.