Escolha entre SQLTask, Tunnel ou DataWorks para exportar resultados de consultas SQL do MaxCompute conforme o tamanho e a complexidade do conjunto de dados.
Todos os exemplos de SDK usam Java.
Visão geral
Você pode exportar resultados de consultas SQL pelos métodos a seguir:
Para pequenos conjuntos de dados, use um SQLTask para recuperar o resultado completo da consulta.
Para exportar uma tabela ou partição inteira, use o Tunnel.
Em consultas SQL complexas, combine SQLTask e Tunnel.
Use o DataWorks para executar consultas SQL, sincronizar dados e configurar tarefas agendadas e dependências.
Use a ferramenta de código aberto DataX para exportar dados do MaxCompute para uma fonte de dados de destino.
Usar SQLTask
O SDK SQLTask chama a interface SQL do MaxCompute. Chame SQLTask.getResult(i) para executar uma consulta e recuperar os resultados.
Notas de uso:
O método SQLTask.getResult(i) exporta apenas resultados de consultas SELECT. Ele não suporta outros comandos, como show tables.
A propriedade READ_TABLE_MAX_ROW controla quantos registros uma instrução SELECT retorna. Configure-a em Project operations.
Instruções SELECT retornam no máximo 10.000 registros ao cliente. Executar uma instrução SELECT em um cliente, inclusive pelo SQLTask, equivale a adicionar
LIMIT N.
Usar Tunnel
Exporte tabelas inteiras ou partições específicas com a Command-line tool do Tunnel ou o Tunnel SDK.
O exemplo a seguir usa um comando Tunnel para exportar dados. Para cenários baseados em SDK sem suporte na CLI, consulte Batch data channel overview.
tunnel d wc_out c:\wc_out.dat;
2016-12-16 19:32:08 - new session: 201612161932082d3c9b0a012f68e7 total lines: 3
2016-12-16 19:32:08 - file [0]: [0, 3), c:\wc_out.dat
downloading 3 records into 1 file
2016-12-16 19:32:08 - file [0] start
2016-12-16 19:32:08 - file [0] OK. total: 21 bytes
download OK
Combinar SQLTask e Tunnel
O SQLTask retorna no máximo 10.000 registros, enquanto o Tunnel não tem esse limite. Combine ambos para exportar conjuntos de dados maiores.
Exemplo:
Odps odps = OdpsUtils.newDefaultOdps(); // Initialize the Odps object.
Instance i = SQLTask.run(odps, "select * from wc_in;");
i.waitForSuccess();
// Create an InstanceTunnel.
InstanceTunnel tunnel = new InstanceTunnel(odps);
// Create a DownloadSession based on the instance ID.
InstanceTunnel.DownloadSession session = tunnel.createDownloadSession(odps.getDefaultProject(), i.getId());
long count = session.getRecordCount();
// Print the number of records.
System.out.println(count);
// The method for retrieving data is the same as with TableTunnel.
TunnelRecordReader reader = session.openRecordReader(0, count);
Record record;
while((record = reader.read()) != null)
{
for(int col = 0; col < session.getSchema().getColumns().size(); ++col)
{
// The columns in the wc_in table are all of the STRING type. You can print the output directly or write it to a local file.
System.out.println(record.get(col));
}
}
reader.close();
Usar a sincronização de dados do DataWorks
Este exemplo usa o modo básico do DataWorks e não se aplica a workspaces em visualização pública. Ao criar um workspace, não selecione Join The Public Preview Of DataStudio.
Use o DataWorks para executar consultas SQL e configurar tarefas de sincronização de dados.
Faça login no console do DataWorks.
No painel de navegação à esquerda, clique em Workspace.
Na coluna Actions do workspace desejado, escolha Shortcuts > Data Development.
-
Crie um workflow.
Clique com o botão direito em Business Flow e selecione Create Workflow.
Insira um Name.
Clique em Create.
-
Crie um nó SQL.
Clique com o botão direito no workflow e escolha .
Defina o Name como runsql e clique em OK.
Configure o nó ODPS SQL e clique em Save.
-
Crie um nó de sincronização de dados.
Clique com o botão direito no workflow e escolha .
Defina o Name como sync2mysql e clique em OK.
Selecione a source e o destino dos dados.
Configure o mapeamento de campos.
Configure o controle de canal.
Clique em Save.
Conecte o nó ODPS SQL ao nó de sincronização de dados para que o nó SQL gere dados a serem exportados pelo nó de sincronização.
-
Configure o agendamento do workflow ou use os padrões e clique em Run. Exemplo de logs de execução:
2016-12-17 23:43:46.394 [job-15598025] INFO JobContainer - Task start time : 2016-12-17 23:43:34 Task end time : 2016-12-17 23:43:46 Total time consumed : 11s Average traffic : 31.36KB/s Record write speed : 1668rec/s Total records read : 16689 Total read/write failures : 0 -
Verifique o resultado da sincronização:
select count(*) from result_in_db;