Este tópico descreve os recursos dos comandos Tunnel e como usá-los para fazer upload e baixe de dados.
Ferramentas compatíveis
Execute comandos Tunnel no odpscmd e no MaxCompute Studio. Para mais informações, consulte Conectar usando um cliente local (odpscmd) e Introdução ao MaxCompute Studio.
Recursos dos comandos Tunnel
Os comandos Tunnel disponíveis no cliente substituem a ferramenta Dship. Use esses comandos para fazer upload e baixe de dados. Os comandos são:
Upload: Faz upload de dados de um arquivo local para uma tabela do MaxCompute. Cada operação de upload pode gravar dados em uma única tabela ou em uma única partição. Em tabelas particionadas, especifique a partição de destino. Para tabelas com particionamento multinível, especifique a partição do nível mais baixo. Para mais informações, consulte Upload.
Download: Baixa dados de uma tabela do MaxCompute ou os resultados de uma instância específica para um arquivo local. Cada operação de baixe pode transferir uma tabela ou uma partição para um único arquivo. Em tabelas particionadas, especifique a partição de origem. Para tabelas com particionamento multinível, especifique a partição do nível mais baixo. Para mais informações, consulte Download.
Resume: Se um upload falhar devido a problemas de rede ou erros no serviço Tunnel, use o comando
Resumepara continuar o upload do arquivo. Esse comando retoma a operação de upload anterior. Atualmente, o comando Resume não oferece suporte a operações de baixe. Para mais informações, consulte Resume.Show: Exibe informações sobre tarefas históricas. Para mais informações, consulte Show.
Purge: Limpa o diretório de sessões. Por padrão, este comando remove logs dos últimos três dias. Para mais informações, consulte Purge.
Help: Exibe informações de ajuda. Formatos curtos de comando são compatíveis com cada comando e opção.
-
Upsert: Grava dados usando uma combinação das semânticas Update e Insert. Este comando é compatível apenas com tabelas Transaction Table 2.0.
Se não houver dados correspondentes na tabela de destino, novos dados serão inseridos. Se os dados já existirem, eles serão atualizados.
Limites de upload e baixe do Tunnel
Atualmente, o recurso Tunnel e o kit de desenvolvimento de software (sdk) do Tunnel não oferecem suporte a operações em tabelas externas. Use o Tunnel para fazer upload de dados diretamente para uma tabela interna do MaxCompute. Como alternativa, faça upload dos dados para o oss usando o sdk Python do oss e crie uma tabela externa no MaxCompute para mapear esses dados. Para mais informações sobre tabelas externas, consulte Visão geral de tabelas externas.
Os comandos Tunnel não oferecem suporte a upload ou baixe de dados dos tipos ARRAY, MAP ou STRUCT.
-
O ciclo de vida de cada sessão do Tunnel no servidor é de 24 horas. Uma sessão pode ser usada dentro de 24 horas após sua criação e também pode ser compartilhada entre processos ou threads. No entanto, garanta que o mesmo BlockId não seja reutilizado.
NotaSessão do Tunnel: O servidor cria uma sessão para cada upload ou baixe e gera um UploadId ou DownloadId exclusivo para identificar a operação. O ciclo de vida de uma sessão do Tunnel no servidor é de 24 horas. Após esse período, a sessão torna-se inativa.
Ao baixar dados usando uma sessão, observe que uma sessão criada por uma conta Alibaba Cloud só pode ser usada para downloads por essa mesma conta Alibaba Cloud ou por seus usuários RAM.
Upload e baixe de dados de tabela
Antes de começar, prepare um arquivo de dados chamado data.txt e salve-o em d:\data.txt. O arquivo contém os seguintes dados.
shopx,x_id,100
shopy,y_id,200
shopz,z_id
A terceira linha de dados no arquivo data.txt não corresponde ao esquema da tabela particionada sale_detail que será criada. A tabela sale_detail é definida com três colunas, mas esta linha possui apenas duas.
As etapas a seguir descrevem como fazer upload e baixe de dados de tabela.
-
No cliente MaxCompute, execute as instruções a seguir para criar a tabela particionada sale_detail e adicionar uma partição a ela.
CREATE TABLE IF NOT EXISTS sale_detail( shop_name STRING, customer_id STRING, total_price DOUBLE) PARTITIONED BY (sale_date STRING,region STRING); alter table sale_detail add partition (sale_date='201312', region='hangzhou'); -
Use o comando
uploadpara fazer upload do arquivo de dados data.txt para a tabela particionada sale_detail.-
Comando de exemplo
tunnel upload d:\data.txt sale_detail/sale_date=201312,region=hangzhou -s false; -
Valor de retorno
Upload session: 20230505xxxxxxxxxxxb0b02dbb6bd Start upload:d:\data.txt Using \r\n to split records Upload in strict schema mode: true Total bytes:42 Split input to 1 blocks 2023-05-05 10:11:35 upload block: '1' ERROR: column mismatch -,expected 3 columns, 2 columns found, please check data or delimiterNotaComo o arquivo data.txt contém dados inconsistentes, a importação de dados falha. Um ID de sessão e uma mensagem de erro são retornados.
-
-
Execute a instrução a seguir para verifique os dados.
-
Comando de exemplo
select * from sale_detail where sale_date='201312'; -
Valores de retorno
ID = 20230505xxxxxxxxxxxvc61z5 +-----------+-------------+-------------+-----------+--------+ | shop_name | customer_id | total_price | sale_date | region | +-----------+-------------+-------------+-----------+--------+ +-----------+-------------+-------------+-----------+--------+NotaA importação de dados falhou devido a dados inconsistentes, deixando a tabela vazia.
-
-
Use o comando
showpara consultar o ID da sessão do upload com falha.-
Comando de exemplo
tunnel show history; -
Resultado retornado
20230505xxxxxxxxxxxb0b02dbb6bd failed 'upload d:\data.txt sale_detail/sale_date=201312,region=Hangzhou -s false'
-
-
Modifique o arquivo de dados de exemplo data.txt para conter os seguintes dados, que correspondem ao esquema da tabela sale_detail.
shopx,x_id,100 shopy,y_id,200 -
Execute o comando
resumepara retomar o upload de dados. Neste comando, 20230505xxxxxxxxxxxb0b02dbb6bd é o ID da sessão do upload com falha.-
Comando de exemplo
tunnel resume 20230505xxxxxxxxxxxb0b02dbb6bd --force; -
Valor de retorno
start resume 20230505xxxxxxxxxxxb0b02dbb6bd Upload session: 20230505xxxxxxxxxxxb0b02dbb6bd Start upload:d:\data.txt Using \r\n to split records Upload in strict schema mode: true Resume 1 blocks 2023-05-05 10:32:39 upload block: '1' 2023-05-05 10:32:40 upload block complete, block id: 1 upload complete, average speed is 0 bytes/s OK
-
-
Execute a instrução a seguir para verifique os dados. O upload foi bem-sucedido.
-
Comando de exemplo
select * from sale_detail where sale_date='201312'; -
Valor de retorno
ID = 20230505xxxxxxxxxxxx7afc9qcg +-----------+-------------+-------------+-----------+--------+ | shop_name | customer_id | total_price | sale_date | region | +-----------+-------------+-------------+-----------+--------+ | shopx | x_id | 100.0 | 201312 | hangzhou| | shopy | y_id | 200.0 | 201312 | hangzhou| +-----------+-------------+-------------+-----------+--------+
-
-
Execute o comando
downloadpara baixar os dados da tabela sale_detail para um arquivo local chamado result.txt.NotaAs convenções de nomenclatura para o caminho local path onde os dados são baixados são as seguintes:
Para salve o arquivo diretamente no diretório bin do cliente MaxCompute, defina path como
filename.extension.Para salve o arquivo em outro caminho, como a pasta test na unidade D, defina path como
D:\test\filename.extension.Se existir um arquivo local com o mesmo nome, ele será sobrescrito.
tunnel download sale_detail/sale_date=201312,region=hangzhou result.txt; -
Verifique o conteúdo do arquivo result.txt. O arquivo contém o seguinte conteúdo, o que indica que o baixe foi bem-sucedido.
NotaO arquivo baixado exibe apenas os valores dos campos que não são de partição.
shopx,x_id,100.0 shopy,y_id,200.0
Baixe de dados de instância
-
Método 1: Use o comando tunnel download para baixar os resultados da execução de uma instância específica para um arquivo local.
-
Execute uma instrução SELECT para consultar a tabela sale_detail.
select * from sale_detail;NotaSe as varreduras completas de tabela estiverem desativadas para a tabela particionada sale_detail, este comando retornará o erro
Table(xxxx) is full scan with all partitions, please specify partition predicates. Para mais informações sobre como resolver esse problema, consulte Apêndice: Códigos de erro. -
Execute o seguinte comando Tunnel para baixar os resultados da execução para um arquivo local.
--View the instance ID of the SELECT command show p; --Run the download command tunnel download instance://20170724071705393ge3csfb8 result.txt;
-
-
Método 2: Configure parâmetros para gerar resultados de consulta SQL via InstanceTunnel por padrão.
Após ative a opção
use_instance_tunnelno cliente MaxCompute, as consultas SELECT usam o InstanceTunnel por padrão para baixar resultados. Isso ajuda a evitar erros de tempo limite e limites de volume de dados ao recuperar resultados de consultas SQL da plataforma MaxCompute. Ative essa configuração de uma das duas maneiras a seguir:NotaPara mais informações sobre as restrições e limites do InstanceTunnel, consulte Restrições e limites do InstanceTunnel.
-
Na versão mais recente do cliente, essa opção está ativada por padrão no arquivo odps_config.ini, e
instance_tunnel_max_recordestá definido como 10000 por padrão.# Download SQL results by instance tunnel use_instance_tunnel=true # The maximum number of records to download when using instance tunnel for SQL results instance_tunnel_max_record=10000NotaO parâmetro
instance_tunnel_max_recordespecifica o número máximo de resultados de consulta SQL a serem baixados pelo InstanceTunnel. Se você não definir esse parâmetro, será possível baixar um número ilimitado de registros. -
Execute o comando
set console.sql.result.instancetunnel=truepara ative esse recurso.-
Ative a opção Instance Tunnel.
set console.sql.result.instancetunnel=true; -
Execute uma consulta select.
select * from wc_in;O seguinte resultado é retornado.
ID = 20170724081946458g14csfb8 Log view: http://logview/xxxxx..... +------------+ | key | +------------+ | slkdfj | | hellp | | apple | | tea | | peach | | apple | | tea | | teaa | +------------+ A total of 8 records fetched by instance tunnel. Max record number: 10000
NotaAo usar o InstanceTunnel para gerar os resultados de uma consulta SELECT, o sistema imprime uma mensagem na última linha. Neste exemplo, a execução da instância retornou um total de 8 registros. Da mesma forma, execute o comando
set console.sql.result.instancetunnel = falsepara desativar esse recurso. -
-