Todos os produtos
Search
Central de documentação

MaxCompute:Guia de uso

Última atualização: Jun 26, 2026

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 Resume para 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.

    Nota

    Sessã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
Nota

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.

  1. 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');
  2. Use o comando upload para 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 delimiter
      Nota

      Como 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.

  3. 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 |
      +-----------+-------------+-------------+-----------+--------+
      +-----------+-------------+-------------+-----------+--------+
      Nota

      A importação de dados falhou devido a dados inconsistentes, deixando a tabela vazia.

  4. Use o comando show para 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'
  5. 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
  6. Execute o comando resume para 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
  7. 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|
       +-----------+-------------+-------------+-----------+--------+
  8. Execute o comando download para baixar os dados da tabela sale_detail para um arquivo local chamado result.txt.

    Nota

    As 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;
  9. 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.

    Nota

    O 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.

    1. Execute uma instrução SELECT para consultar a tabela sale_detail.

      select * from sale_detail;
      Nota

      Se 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.

    2. 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_tunnel no 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:

    Nota

    Para 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_record está 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=10000
      Nota

      O parâmetro instance_tunnel_max_record especifica 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=true para 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
      Nota

      Ao 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 = false para desativar esse recurso.