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
SELECTna 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 |
|
|
Não |
Cláusula |
|
|
Não |
Nome da tabela ou combinação tabela-partição. Não há cobrança de taxa de consulta. O formato de |
|
|
Sim |
Caminho do OSS de destino no formato |
|
|
Sim |
Storage handler integrado. Valores válidos: |
|
|
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 |
|
|
ARN da função RAM para autenticação STS. |
|
|
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.![]()
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:

Resultado do Exemplo 2:

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 |
|
|
Não |
Cláusula |
|
|
Não |
Nome da tabela ou combinação tabela-partição. Não há cobrança de taxa de consulta. O formato de |
|
|
Sim |
Caminho do OSS de destino no formato |
|
|
Não |
Classe SerDe. A configuração segue o mesmo padrão das tabelas externas do MaxCompute. Consulte Tabelas externas do OSS. |
|
|
Não |
Pares chave-valor SERDEPROPERTIES. A configuração segue o mesmo padrão das tabelas externas do MaxCompute. Consulte Tabelas externas do OSS. |
|
|
Sim |
Formato do arquivo de saída: |
|
|
Não |
Propriedades de tabela para compressão ou outras configurações. Por exemplo, |
Principais PROPERTIES para formatos open source:
|
Propriedade |
Descrição |
|
|
Comprime a saída Parquet com Snappy. |
|
|
Comprime a saída Parquet com LZO. |
Se a saída for comprimida com Snappy ou LZO, a extensão do nome do arquivo (.snappyou.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.![]()
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:

Resultado do Exemplo 2:

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 |
|
|
|
Não |
Cláusula |
|
|
|
Não |
Nome da tabela. Não há cobrança de taxa de consulta. |
|
|
|
Sim |
URL de conexão JDBC do Hologres no formato: |
false}&]table= |
SERDEPROPERTIES obrigatórias para o Hologres:
|
Propriedade |
Descrição |
|
|
ARN da função RAM para autenticação STS. Encontre-o na página Roles no console RAM, em Basic Information. |
|
|
Classe de driver JDBC para conexão com o Hologres. |
|
|
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¤tSchema=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 |
|
|
Prefixo personalizado para todos os nomes de arquivos exportados. Máximo de 10 caracteres. |
|
|
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 |
|
|
|
TEXTFILE |
|
|
|
RCFILE |
|
|
|
ORC |
|
|
|
PARQUET |
|
|
|
AVRO |
|
|
|
JSON |
|
|
|
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=truepara ativá-las.
Faturamento
A operação
UNLOADem si é gratuita. Qualquer subconsulta (cláusulaSELECT) é 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.