Todos os produtos
Search
Central de documentação

MaxCompute:Perguntas frequentes sobre comandos do Tunnel

Última atualização: Jul 17, 2026

Este tópico responde a perguntas frequentes (FAQs) sobre os comandos do Tunnel.

Categoria

Pergunta frequente

Tunnel Upload

Tunnel Download

Histórico do Tunnel

Por quanto tempo as informações do comando de histórico do Tunnel são retidas?

Outros problemas

O Tunnel Upload aceita curingas ou expressões regulares?

O comando Tunnel Upload não aceita curingas ou expressões regulares.

Tunnel Upload: Limites e compactação

Não há limite de tamanho de arquivo para o Tunnel Upload, mas uma única operação tem duração máxima de 2 horas. Estime o volume máximo de dados passível de upload com base na sua velocidade de transferência.

O tamanho máximo para um único registro é 200 MB.

O Tunnel Upload usa compactação por padrão. Se sua largura de banda permitir, use o parâmetro -cp para desativar a compactação.

Uploads paralelos para uma tabela ou partição

Sim, é possível enviar dados em paralelo.

Uploads simultâneos de vários clientes

Sim.

Necessidade de partições pré-existentes

Use o parâmetro -acp no comando Tunnel Upload para criar automaticamente a partição de destino. O valor padrão desse parâmetro é false. Para mais informações, consulte Comandos do Tunnel.

Upload para tabelas não particionadas

Sim. Na sintaxe do comando Tunnel Upload, o parâmetro [/partition] é opcional. Para enviar dados a uma tabela não particionada, não especifique informações de partição. Use o seguinte comando:

tunnel upload <path> <table_name>;

Para tabelas particionadas, especifique as informações da partição. Caso contrário, ocorrerá um erro. Para mais detalhes sobre os parâmetros e o uso dos comandos do Tunnel, consulte Comandos do Tunnel.

Faturamento para dados compactados

O faturamento considera o tamanho dos dados após a compactação.

O Tunnel Upload aceita limitação de taxa?

Não, a limitação de taxa não é suportada.

Como lidar com uploads lentos do Tunnel

Se o upload de dados estiver muito lento, utilize o parâmetro -threads para enviar os dados em fatias, dividindo o arquivo em 10 partes, por exemplo. Veja um comando de exemplo abaixo.

tunnel upload C:\userlog.txt userlog1 -threads 10 -s false -fd "\u0000" -rd "\n";

Endpoint público versus rede clássica

No arquivo de configuração odps_config.ini do cliente MaxCompute, configure o Tunnel Endpoint além do Endpoint padrão. Consulte Endpoint para obter os valores de endpoint necessários. O Tunnel Endpoint não é obrigatório para a região China (Shanghai).

Erro de Tunnel Upload no DataStudio

  • Sintoma

    Ao executar o comando Tunnel Upload no DataStudio para enviar dados a uma partição, o sistema retorna o seguinte erro:

    FAILED: error occurred while running tunnel command.
  • Causa

    O DataStudio não aceita o comando Tunnel Upload.

  • Solução

    Utilize o recurso visual de importação de dados no DataWorks. Para mais informações, consulte Fazer upload de dados.

Como lidar com dados contendo retornos de carro ou espaços

Se seus dados contiverem caracteres de nova linha ou espaços, defina um delimitador personalizado e use -rd e -fd para especificar esse delimitador no upload. Caso não seja possível alterar o delimitador nos dados, envie-os como uma única linha e utilize uma UDF para analisá-los posteriormente.

Os dados de exemplo abaixo contêm retornos de carro e podem ser enviados com sucesso usando , como delimitador de coluna -rd e @ como delimitador de linha -fd.

shopx,x_id,100@
shopy,y_id,200@
shopz,z_id,300@

O comando a seguir é um exemplo de upload.

tunnel upload d:\data.txt sale_detail/sale_date=201312,region=hangzhou -s false -fd "," -rd "@";

O código abaixo mostra um exemplo do resultado do upload.

+-----------+-------------+-------------+-----------+--------+
| shop_name | customer_id | total_price | sale_date | region |
+-----------+-------------+-------------+-----------+--------+
| shopx     | x_id        | 100.0       | 201312    | hangzhou |
| shopy     | y_id        | 200.0       | 201312    | hangzhou |
| shopz     | z_id        | 300.0       | 201312    | hangzhou |
+-----------+-------------+-------------+-----------+--------+

Resolução de erros de estouro de memória

O comando Tunnel Upload foi projetado para lidar com grandes volumes de dados. Um erro de estouro de memória geralmente indica configuração incorreta dos delimitadores de linha e coluna. Isso pode fazer com que todo o arquivo de texto seja tratado como um único registro e armazenado em cache na memória, causando o estouro.

Nesse caso, teste primeiro com uma pequena quantidade de dados. Após depurar com sucesso os parâmetros -td e -fd, envie todo o conjunto de dados.

Uploads via script a partir de uma pasta

O comando Tunnel Upload permite o envio de um único arquivo ou de um diretório (apenas diretório de primeiro nível). Para mais informações, consulte Guia de Uso do Tunnel.

Por exemplo, execute o comando abaixo para enviar todos os dados da pasta d:\data.

tunnel upload d:\data sale_detail/sale_date=201312,region=hangzhou -s false;

Upload em lote de arquivos para partições diferentes

Utilize um script Shell. O exemplo a seguir mostra um script Shell usado com o cliente MaxCompute em ambiente Windows. O mesmo princípio se aplica ao Linux. O conteúdo do script Shell é:

#!/bin/sh
# First, create a partitioned table named user with dt as the partition key. In this example, the MaxCompute client is installed at C:/odpscmd_public/bin/odpscmd.bat. Adjust the path based on your environment.
C:/odpscmd_public/bin/odpscmd.bat  -e "create table user(data string) partitioned by (dt int);" 
dir=$(ls C:/userlog)  # Define the variable dir to store the names of all files in the source folder.
pt=0 # The variable pt is used as the partition value and starts at 0. It increments by 1 after each file is uploaded. This way, each file is stored in a different partition.
for i in $dir  # Loop through all files in the C:/userlog folder.
do
    let pt=pt+1  # Increment the pt variable by 1 at the end of each loop.
    echo $i  # Display the file name.
    echo $pt # Display the partition name.
    # Use odpscmd to first add a partition, and then upload the file to that partition.
    C:/odpscmd_public/bin/odpscmd.bat  -e "alter table user add partition (dt=$pt);tunnel upload C:/userlog/$i user/dt=$pt -s false -fd "%" -rd "@";"
done

O exemplo a seguir mostra a saída da execução do script Shell com dois arquivos, userlog1 e userlog2.


C:\Program Files\Git>sh new2.sh

ID = 2018093010184361gmgpe62m
OK
userlog1.txt
1

ID = 201809301018471​7ghpnz192

OK
Upload session: 20180930181848c2dbdb0b1e78e146
Start upload:C:\userlog\userlog1.txt
Using @ to split records
Upload in strict schema mode: true
Total bytes:31    Split input to 1 blocks
2018-09-30 18:18:40    upload block: '1'
2018-09-30 18:18:41    upload block complete, blockid=1
OK
userlog2.txt
2

ID = 20180930101852483gux1r292

OK
Upload session: 20180930181853c3dcdb0b1f57b5c4
Start upload:C:\userlog\userlog2.txt
Using @ to split records
Upload in strict schema mode: true
Total bytes:34    Split input to 1 blocks
2018-09-30 18:18:46    upload block: '1'
2018-09-30 18:18:46    upload block complete, blockid=1
OK

Após a conclusão do upload, consulte os dados da tabela no cliente MaxCompute. O exemplo abaixo ilustra o resultado da consulta.


odps@ MaxCompute_DOC>select * from user where dt < 100;

ID = 20180930102040044gnn5f392
Log view:
http://logview.odps.aliyun.com/logview/?h=http://service.cn.maxcompute.aliyun.com/api&p=MaxCompute_DOC&i=20180930102040044gnn5f392&token=NzRrNDAxaGx2RDRsU2QwN08zTGdJSUp4ZEdJPSxPRFBTX09CTzoxMDc5OTI2ODk2OTk5NDIxLDE1Mzg5MDc2NDAseyJTdGF0ZW1lbnQiOlt7IkFjdGlvbiI6WyJvZHBzOlJlYWQiXSwiRWZmZWN0IjoiQWxsb3ciLCJSZXNvdXJjZSI6WyJhY3M6b2RwczoqOnByb2plY3RzL01heENvbXB1dGVfRE9DL2luc3RhbmNlcy8yMDE4MDkzMDEwMjA0MDA0NGdubjVmMzkyIl19XSwiVmVyc2lvbiI6IjEifQ==
Job Queueing...
+------------+------------+
| data       | dt         |
+------------+------------+
| we123#asd  | 1          |
| we1234#asd | 1          |
| we1235#asd | 1          |
| waa123#asd | 2          |
| waa1234#asd | 2          |
| waa1235#asd | 2          |
+------------+------------+
6 records (at most 10000 supported) fetched by instance tunnel.

Como ignorar dados incorretos durante uploads

Utilize o parâmetro -dbr true no comando Tunnel Upload para ignorar dados incorretos, como linhas com colunas extras, colunas ausentes ou tipos de dados incompatíveis. O valor padrão do parâmetro -dbr é False, o que significa que dados incorretos não são ignorados. Quando definido como True, todos os dados fora de conformidade com a definição da tabela serão ignorados. Para mais informações, consulte Upload.

Resolução do erro de conflito de status

  • Sintoma

    Ao usar o comando Tunnel Upload, o sistema retorna o seguinte erro:

    java.io.IOException: RequestId=XXXXXXXXXXXXXXXXXXXXXXXXX, ErrorCode=StatusConflict, ErrorMessage=You cannot complete the specified operation under the current upload or download status.        
            at com.aliyun.odps.tunnel.io.TunnelRecordWriter.close(TunnelRecordWriter.java:93)        
            at com.xgoods.utils.aliyun.maxcompute.OdpsTunnel.upload(OdpsTunnel.java:92)        
            at com.xgoods.utils.aliyun.maxcompute.OdpsTunnel.upload(OdpsTunnel.java:45)        
            at com.xeshop.task.SaleStatFeedTask.doWork(SaleStatFeedTask.java:119)        
            at com.xgoods.main.AbstractTool.excute(AbstractTool.java:90)        
            at com.xeshop.task.SaleStatFeedTask.main(SaleStatFeedTask.java:305)java.io.IOException: RequestId=XXXXXXXXXXXXXXXXXXXXXXXXX, ErrorCode=StatusConflict, ErrorMessage=You cannot complete the specified operation under the current upload or download status.       
  • Causa

    O arquivo já está sendo enviado e a operação não pode ser duplicada.

  • Solução

    Não repita a operação de upload. Aguarde a conclusão da tarefa de upload existente.

Resolução do erro de corpo da requisição

  • Sintoma

    Ao usar o comando Tunnel Upload, o sistema retorna o seguinte erro:

    java.io.IOException: Error writing request body to server
  • Causa

    Essa exceção ocorre durante a gravação de dados no servidor. Geralmente, é causada por desconexão de rede ou tempo limite durante o processo de upload. As causas incluem:

    • Quando a origem dos dados não é um arquivo local e está sendo obtida de uma fonte como um banco de dados, o processo de gravação pode atingir o tempo limite enquanto aguarda a obtenção dos dados. Se nenhum dado for enviado por 600 segundos, a operação expira.

    • Ao enviar dados pela rede pública usando um endpoint público, o upload pode expirar devido a uma conexão de rede instável.

  • Solução

    • Durante o processo de upload, obtenha os dados primeiro e depois chame o SDK do Tunnel para enviá-los.

    • Um único bloco pode enviar de 64 MB a 100 GB de dados. Recomendamos manter o número de registros por bloco abaixo de 10.000 para evitar tempos limite causados por novas tentativas. Uma sessão pode ter no máximo 20.000 blocos. Se seus dados estiverem em uma instância ECS, consulte Endpoints para obter informações sobre endpoints.

Resolução do erro de partição inexistente

  • Sintoma

    Ao enviar dados usando o Tunnel, o sistema retorna o seguinte erro:

    ErrorCode=NoSuchPartition, ErrorMessage=The specified partition does not exist
  • Causa

    A partição de destino para a inserção de dados não existe.

  • Solução

    Execute primeiro o comando show partitions table_name; para verificar se a partição existe e, em seguida, execute alter table table_name add [if not exists] partition partition_spec para criar a partição correspondente.

Resolução de erros de incompatibilidade de colunas

Isso geralmente ocorre porque o delimitador de linha no arquivo de origem está incorreto, fazendo com que vários registros sejam tratados como um único registro. Verifique esse problema e redefina o parâmetro -rd.

Resolução do erro ODPS-0110061 em multithreading

  • Sintoma

    Ao enviar dados usando múltiplas threads, o sistema retorna o seguinte erro:

    FAILED: ODPS-0110061: Failed to run ddltask - Modify DDL meta encounter exception : ODPS-0010000:System internal error - OTS transaction exception - Start of transaction failed. Reached maximum retry times because of OTSStorageTxnLockKeyFail(Inner exception: Transaction timeout because cannot acquire exclusive lock.)      
  • Causa

    Esse erro é causado por operações de gravação simultâneas e frequentes na mesma tabela.

  • Solução

    Reduza o número de threads simultâneas, adicione um atraso entre as requisições e implemente um mecanismo de nova tentativa para operações com falha.

Como ignorar cabeçalhos CSV durante o upload

Ignore a primeira linha de cabeçalho adicionando o parâmetro -h true ao comando Tunnel Upload.

Dados ausentes após importação de CSV

Esse problema geralmente é causado por codificação de dados incorreta ou uso de delimitadores errados, o que leva ao upload incorreto dos dados. Recomendamos formatar corretamente os dados brutos antes de executar a operação de upload.

Upload de arquivos TXT com script Shell

Execute o comando abaixo na janela de linha de comando do seu sistema para enviar rapidamente dados a uma tabela do MaxCompute, especificando os parâmetros necessários.

...\odpscmd\bin>odpscmd -e "tunnel upload "$FILE" project.table"

Para mais informações sobre como executar a ferramenta de linha de comando, consulte Conectar usando o cliente odpscmd.

Resolução de incompatibilidade de campos em importações de pastas

Adicione os parâmetros -dbr=false -s true ao comando Tunnel Upload para validar o formato dos dados.

Um erro de column mismatch geralmente ocorre devido a uma incompatibilidade no número de colunas. Por exemplo, isso pode acontecer se o delimitador de coluna estiver definido incorretamente ou se houver linhas vazias no final do arquivo, causando discrepância na contagem de colunas ao serem divididas pelo delimitador.

Falha silenciosa no upload do segundo arquivo

Se o parâmetro --scan for usado em um upload com o cliente MaxCompute, ocorre um problema na passagem de parâmetros no modo retomável. Remova o parâmetro --scan=true e tente a operação novamente.

Bloco ignorado em nova tentativa após falha no upload

Cada bloco corresponde a uma requisição HTTP, e os uploads de múltiplos blocos podem ser simultâneos e atômicos. Uma requisição síncrona para um bloco tem sucesso ou falha sem afetar outros blocos.

Existe um limite para o número de novas tentativas. Se esse limite for excedido, o upload prossegue para o próximo bloco. Após a conclusão do upload, use a instrução select count(*) from table; para verificar se houve perda de dados.

Melhoria de velocidades lentas de upload

O comando Tunnel Upload não impõe limite de velocidade. Os gargalos de velocidade de upload geralmente estão relacionados à largura de banda da rede, desempenho do cliente e desempenho do servidor. Para melhorar o desempenho, particione seus dados, use várias tabelas ou envie dados de várias instâncias ECS.

Prevenção de tempo limite de sessão para uploads grandes

Recomendamos dividir os dados de origem em várias tarefas menores.

Uploads lentos devido a excesso de sessões

Defina o tamanho do bloco com um valor apropriado. O ID máximo de bloco é 20.000. Configure a duração da sessão conforme suas necessidades de negócios. Os dados tornam-se visíveis somente após o commit da sessão. Evite criar sessões com muita frequência. Crie no máximo uma sessão a cada 5 minutos. Utilize um tamanho de bloco grande, preferencialmente acima de 64 MB.

Caractere \r extra na última coluna

O caractere de nova linha é \r\n no Windows e \n no macOS e Linux. O comando Tunnel usa o caractere de nova linha do sistema como delimitador de coluna padrão. Consequentemente, ao enviar um arquivo editado no Windows a partir de um sistema macOS ou Linux, o caractere \r é importado para a tabela como dado.

Como lidar com vírgulas nos dados usando o delimitador padrão

Se um campo de descrição de dados contiver vírgulas, altere o delimitador de dados para um caractere diferente e use o parâmetro -fd para especificar o novo delimitador durante o upload.

Como lidar com delimitadores de espaço ou filtragem regex

O comando Tunnel Upload não aceita expressões regulares. Se seus dados usarem espaços como delimitadores ou exigirem filtragem por expressão regular, utilize UDFs do MaxCompute.

Suponha que seus dados brutos usem espaços como delimitadores de coluna e retornos de carro como delimitadores de linha, conforme o exemplo a seguir. É necessário extrair dados entre aspas e filtrar caracteres específicos como "-". Tais requisitos complexos podem ser atendidos usando expressões regulares.

10.21.17.2 [24/Jul/2018:00:00:00 +0800] - "GET https://example.com/73477.html" 200 0 81615 81615 "-" "iphone" - HIT - - 0_0_0 001 - - - -
10.17.5.23 [24/Jul/2018:00:00:00 +0800] - "GET https://example.com/73478.html" 206 0 49369 49369 "-" "huawei" - HIT - - 0_0_0 002 - - - -
10.24.7.16 [24/Jul/2018:00:00:00 +0800] - "GET https://example.com/73479.html" 206 0 83821 83821 "-" "vivo" - HIT - - 0_0_0 003 - - - -

Execute as etapas a seguir:

  1. Envie os dados como uma única coluna. Primeiro, crie uma tabela de coluna única no seu projeto MaxCompute para receber os dados. O comando abaixo serve como exemplo.

    create table userlog1(data string);
  2. Use um delimitador de coluna inexistente, como \u0000, para enviar dados sem dividi-los em colunas. Veja um comando de exemplo abaixo.

    tunnel upload C:\userlog.txt userlog1 -s false -fd "\u0000" -rd "\n";
  3. Após enviar os dados brutos, escreva e registre uma UDF Python no MaxCompute Studio. Também é possível usar uma UDF Java. Para mais informações sobre como escrever e registrar UDFs, consulte Desenvolver UDFs Java ou Desenvolver UDFs Python.

    O código a seguir fornece um exemplo da UDF. Suponha que a função registrada se chame ParseAccessLog.

    from odps.udf import annotate
    from odps.udf import BaseUDTF
    import re     # Import the regular expression module.
    regex = '([(\d\.)]+) \[(.*?)\] - "(.*?)" (\d+) (\d+) (\d+) (\d+) "-" "(.*?)" - (.*?) - - (.*?) (.*?) - - - -'             # The regular expression to be used.
    # line -> ip,date,request,code,c1,c2,c3,ua,q1,q2,q3
    @annotate('string -> string,string,string,string,string,string,string,string,string,string,string')  # Make sure that the number of strings matches the actual number of data columns. This example has 11 columns.
    class ParseAccessLog(BaseUDTF):
        def process(self, line):
            try:
                t = re.match(regex, line).groups()
                self.forward(t[0], t[1], t[2], t[3], t[4], t[5], t[6], t[7], t[8], t[9], t[10])
            except:
                pass
  4. Após registrar a função, use a UDF para processar os dados brutos na tabela userlog1. Certifique-se de usar o nome correto da coluna, que neste exemplo é data. Utilize a sintaxe SQL padrão para criar uma tabela chamada userlog2 e armazenar os dados processados. O comando abaixo serve como exemplo.

    create table userlog2 as select ParseAccessLog(data) as (ip,date,request,code,c1,c2,c3,ua,q1,q2,q3) from userlog1;

    Após a conclusão do processamento, consulte a tabela userlog2. Os dados agora estão corretamente divididos em colunas.

    select * from userlog2;
    -- The following result is returned.
    +----+------+---------+------+----+----+----+----+----+----+----+
    | ip | date | request | code | c1 | c2 | c3 | ua | q1 | q2 | q3 |
    +----+------+---------+------+----+----+----+----+----+----+----+
    | 10.21.17.2 | 24/Jul/2018:00:00:00 +0800 | GET https://example.com/73477.html | 200  | 0  | 81615 | 81615 | iphone | HIT | 0_0_0 | 001 |
    | 10.17.5.23 | 24/Jul/2018:00:00:00 +0800 | GET https://example.com/73478.html | 206  | 0  | 4936 | 4936 | huawei | HIT | 0_0_0 | 002 |
    | 10.24.7.16 | 24/Jul/2018:00:00:00 +0800 | GET https://example.com/73479.html | 206  | 0  | 83821 | 83821 | vivo | HIT | 0_0_0 | 003 |
    +----+------+---------+------+----+----+----+----+----+----+----+

Como lidar com dados incorretos após o upload

Recomendamos gravar dados em uma tabela não particionada ou em uma única partição em uma única operação. Não grave na mesma partição várias vezes, pois isso pode gerar dados incorretos. Execute o comando tunnel show bad <sessionid>; no cliente MaxCompute para verificar a presença de dados incorretos. Se houver dados incorretos, exclua-os usando os métodos a seguir:

  • Execute o comando drop table ...; para excluir toda a tabela ou o comando alter table ... drop partition; para excluir a partição de destino e, em seguida, envie os dados novamente.

  • Se os dados incorretos puderem ser filtrados usando uma cláusula WHERE, utilize uma instrução INSERT com a cláusula WHERE para importar os dados corretos para uma nova tabela ou realize uma atualização no local. Os nomes da partição/tabela de origem e destino são os mesmos.

Sincronização de dados geométricos

O MaxCompute não aceita o tipo de dados geometry. Converta os dados geométricos para o tipo STRING antes de sincronizá-los com o MaxCompute.

O tipo geometry é um tipo de dados especial que não faz parte dos tipos de dados SQL padrão. A estrutura JDBC genérica não aceita o tipo geometry. Isso requer tratamento especial para importação e exportação de dados.

Formatos de exportação aceitos pelo Tunnel Download

Os arquivos de dados exportados usando o comando Tunnel Download podem estar no formato TXT ou CSV.

Cobrança para downloads do Tunnel na mesma região

Para baixar dados dentro da mesma região sem incorrer em cobranças de tráfego de rede pública, configure o endpoint do Tunnel para a rede clássica ou VPC. Caso contrário, os dados podem ser roteados por um endpoint de rede pública em outra região, resultando em cobranças.

Resolução de tempos limite recorrentes no download

Esse erro geralmente indica que o endpoint do Tunnel está incorreto. Verifique se o endpoint do Tunnel está configurado corretamente. Uma maneira simples de validar o endpoint é testar a conectividade de rede usando uma ferramenta como Telnet.

Resolução do erro de falta de privilégio

  • Sintoma

    Ao usar o comando Tunnel Download, o sistema retorna o seguinte erro:

    You have NO privilege ‘odps:Select‘ on {acs:odps:*:projects/XXX/tables/XXX}. project ‘XXX‘ is protected.
  • Causa

    O recurso de proteção de dados está ativado para o projeto.

  • Solução

    Para exportar dados de um projeto para outro, o proprietário do projeto deve realizar a operação.

Download de um subconjunto de dados

O Tunnel não aceita computação ou filtragem de dados. Para baixar um subconjunto específico de dados, utilize um dos métodos a seguir:

  • Execute uma tarefa SQL para salvar os dados que deseja baixar em uma tabela temporária. Após a conclusão do download, exclua a tabela temporária.

  • Se a quantidade de dados desejada for pequena, use um comando SQL para consultar os dados diretamente, sem necessidade de baixá-los.

Período de retenção do histórico do Tunnel

A retenção não é baseada em tempo. Por padrão, as últimas 500 entradas são salvas.

Fluxo de trabalho de upload do Tunnel

O fluxo de trabalho de upload de dados com o Tunnel é o seguinte:

  1. Prepare os dados de origem, como um arquivo de origem ou tabela de dados.

  2. Projete o esquema da tabela e as definições de partição, realize conversões de tipo de dados e crie a tabela no MaxCompute.

  3. Adicione partições à tabela do MaxCompute. Pule esta etapa se a tabela não for particionada.

  4. Envie os dados para a partição ou tabela especificada.

Suporte a caracteres chineses em caminhos

Sim, caracteres chineses são suportados.

Observações sobre o uso de delimitadores

Ao usar delimitadores com o Tunnel, observe os seguintes pontos:

  • O delimitador de linha é rd e o delimitador de coluna é fd.

  • O delimitador de coluna fd não pode conter o delimitador de linha rd.

  • O delimitador padrão para o Tunnel é \r\n no Windows e \n no Linux.

  • Quando um upload começa, uma mensagem é exibida na tela indicando o delimitador de linha usado no upload atual para verificação e confirmação. Esse recurso está disponível na v0.21.0 e versões posteriores.

Os caminhos de arquivo do Tunnel podem conter espaços?

Sim. No entanto, o parâmetro que contém o caminho deve estar entre aspas duplas ("").

Suporte a arquivos .dbf

O Tunnel aceita apenas arquivos de texto e não aceita arquivos binários.

Velocidades normais de upload e download

As velocidades de upload e download do Tunnel são fortemente influenciadas pelas condições da rede. Em condições normais de rede, a velocidade varia de 1 MB/s a 20 MB/s.

Obtenção do nome de domínio do Tunnel

O nome de domínio do Tunnel é o endpoint público do Tunnel. Diferentes regiões e redes correspondem a diferentes nomes de domínio do Tunnel. Para mais informações, consulte Endpoints para obter o endpoint público do Tunnel correto.

Solução de problemas de falhas de upload e download

Obtenha o nome de domínio do Tunnel no arquivo odps_config.ini no diretório ..\odpscmd_public\conf da instalação do cliente MaxCompute e execute o comando curl -i <domain name> (por exemplo, curl -i http://dt.odps.aliyun.com) em uma janela de linha de comando para testar a conectividade de rede. Se a conexão falhar, verifique a rede do seu dispositivo ou use o nome de domínio do Tunnel correto.

Resolução de erros de Java heap space

  • Sintoma

    Ao usar um comando do Tunnel para enviar ou baixar dados, você pode receber o seguinte erro:

    Java heap space FAILED: error occurred while running tunnel command
  • Causa

    • Causa 1: Ao enviar dados, uma única linha de dados é muito grande.

    • Causa 2: A quantidade de dados a ser baixada é muito grande para a memória disponível do programa cliente.

  • Solução

    • Solução para a Causa 1

      1. Primeiro, confirme se o delimitador está incorreto, o que poderia causar a leitura de todos os dados como uma única linha grande.

      2. Se o delimitador estiver correto e uma única linha de dados no arquivo for muito grande, o programa cliente tem memória insuficiente. Ajuste os parâmetros de inicialização do processo cliente. Para isso, edite o script odpscmd no diretório bin da instalação do cliente e aumente os valores de -Xms64m -Xmx512m no comando java -Xms64m -Xmx512m -classpath "${clt_dir}/lib/*:${clt_dir}/conf/"com.aliyun.openservices.odps.console.ODPSConsole "$@".

    • Solução para a Causa 2: Edite o script odpscmd no diretório bin do caminho de instalação do cliente. Aumente os valores de -Xms64m -Xmx512m no seguinte comando: java -Xms64m -Xmx512m -classpath "${clt_dir}/lib/*:${clt_dir}/conf/"com.aliyun.openservices.odps.console.ODPSConsole "$@".

Ciclo de vida e expiração da sessão

Cada sessão tem um ciclo de vida de 24 horas no servidor e pode ser usada a qualquer momento dentro desse período. Após a expiração, a sessão torna-se inválida e nenhuma operação pode ser realizada com ela. Crie uma nova sessão e reenvie os dados.

Uma sessão pode ser compartilhada?

Uma sessão pode ser compartilhada entre processos e threads. No entanto, garanta que o mesmo ID de bloco não seja usado mais de uma vez.

O que é o recurso de roteamento do Tunnel?

Se você não configurar um endpoint do Tunnel, o Tunnel roteará automaticamente o tráfego para o endpoint correspondente à rede onde o service MaxCompute está localizado. Se configurar um endpoint do Tunnel, sua configuração terá precedência e o roteamento automático será desativado.

O Tunnel aceita concorrência?

Sim. O comando a seguir serve como exemplo:

tunnel upload E:/1.txt tmp_table_0713 --threads 5;