Tous les produits
Search
Centre de documentation

MaxCompute:FAQ sur les commandes Tunnel

Dernière mise à jour :Aug 10, 2026

Cette rubrique apporte des réponses aux questions fréquemment posées (FAQ) concernant les commandes Tunnel.

Catégorie

FAQ

Tunnel Upload

Tunnel Download

Historique Tunnel

Combien de temps les informations de la commande d'historique Tunnel sont-elles conservées ?

Autres problèmes

La commande Tunnel Upload prend-elle en charge les caractères génériques ou les expressions régulières ?

La commande Tunnel Upload ne prend pas en charge les caractères génériques ni les expressions régulières.

Tunnel Upload : Limites et compression

Il n'y a aucune limite de taille de fichier pour un Tunnel Upload, mais une opération unique est limitée à 2 heures. Estimez le volume maximal de données chargeables en fonction de votre vitesse de chargement.

La taille maximale d'un seul enregistrement est de 200 Mo.

Tunnel Upload utilise la compression par défaut. Si votre bande passante le permet, vous pouvez utiliser le paramètre -cp pour désactiver la compression.

Chargements parallèles vers une table ou une partition

Oui, vous pouvez charger des données en parallèle.

Chargements simultanés depuis plusieurs clients

Oui.

Exigence de partitions préexistantes

Vous pouvez utiliser le paramètre -acp dans la commande Tunnel Upload pour créer automatiquement la partition de destination. La valeur par défaut de ce paramètre est false. Pour plus d'informations, reportez-vous à Commandes Tunnel.

Chargement vers des tables non partitionnées

Oui. Dans la syntaxe de la commande Tunnel Upload, le paramètre [/partition] est facultatif. Pour charger des données vers une table non partitionnée, vous n'avez pas besoin de spécifier d'informations de partition. Vous pouvez utiliser la commande suivante :

tunnel upload <path> <table_name>;

Pour une table partitionnée, vous devez spécifier les informations de partition. Sinon, une erreur se produit. Pour plus d'informations sur les paramètres et l'utilisation des commandes Tunnel, reportez-vous à Commandes Tunnel.

Facturation des données compressées

La facturation est basée sur la taille des données après compression.

La commande Tunnel Upload prend-elle en charge la limitation du débit (rate limiting) ?

Non, la limitation du débit n'est pas prise en charge.

Gestion des chargements Tunnel lents

Si le chargement des données est trop lent, envisagez d'utiliser le paramètre -threads pour charger les données par tranches, par exemple en divisant le fichier en 10 tranches. Voici un exemple de commande.

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

Point de terminaison public vs réseau classique

Dans le fichier de configuration odps_config.ini du client MaxCompute, vous devez configurer le point de terminaison Tunnel en plus du point de terminaison standard. Reportez-vous à Point de terminaison pour connaître les valeurs de point de terminaison requises. Le point de terminaison Tunnel n'est pas requis pour la région Chine (Shanghai).

Erreur Tunnel Upload dans DataStudio

  • Symptôme

    Lorsque vous exécutez la commande Tunnel Upload dans DataStudio pour charger des données vers une partition, l'erreur suivante est renvoyée :

    FAILED: error occurred while running tunnel command.
  • Cause

    DataStudio ne prend pas en charge la commande Tunnel Upload.

  • Solution

    Utilisez la fonctionnalité d'importation visuelle des données dans DataWorks. Pour plus d'informations, reportez-vous à Charger des données.

Gestion des données contenant des retours chariot ou des espaces

Si vos données contiennent des caractères de nouvelle ligne ou des espaces, vous pouvez définir un délimiteur personnalisé, puis utiliser -rd et -fd pour spécifier ce délimiteur afin de charger les données. Si vous ne pouvez pas modifier le délimiteur dans les données, vous pouvez charger les données sur une seule ligne, puis utiliser une UDF pour les analyser.

Les données d'exemple suivantes contiennent des retours chariot et peuvent être chargées avec succès en utilisant , comme délimiteur de colonne -rd et @ comme délimiteur de ligne -fd.

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

La commande suivante est un exemple de commande de chargement.

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

Le code suivant fournit un exemple du résultat du chargement.

+-----------+-------------+-------------+-----------+--------+
| 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 |
+-----------+-------------+-------------+-----------+--------+

Résolution des erreurs de dépassement de mémoire

La commande Tunnel Upload est conçue pour gérer de grandes quantités de données. Une erreur de dépassement de mémoire indique généralement que les délimiteurs de ligne et de colonne sont mal définis. Cela peut entraîner le traitement du fichier texte entier comme un seul enregistrement mis en cache en mémoire, ce qui provoque le dépassement.

Dans ce cas, vous pouvez d'abord effectuer un test avec une petite quantité de données. Une fois que -td et -fd sont correctement débogués, vous pouvez charger l'ensemble complet de données.

Téléchargement de scripts depuis un dossier

La commande Tunnel Upload prend en charge le téléchargement d'un fichier unique ou d'un répertoire (premier niveau uniquement). Pour plus d'informations, consultez la section Guide d'utilisation de Tunnel.

Par exemple, vous pouvez exécuter la commande suivante pour télécharger toutes les données du dossier d:\data.

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

Téléchargement groupé de fichiers vers différentes partitions

Vous pouvez utiliser un script Shell. L'exemple ci-dessous présente un script Shell utilisé avec le client MaxCompute dans un environnement Windows. Le principe reste identique sous Linux. Voici le contenu du 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

L'exemple suivant illustre la sortie générée lors de l'exécution du script Shell avec deux fichiers, userlog1 et 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

Une fois le téléchargement terminé, vous pouvez interroger les données de la table via le client MaxCompute. L'exemple ci-dessous présente le résultat de la requête.


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.

Ignorer les données incorrectes lors des téléchargements

Utilisez le paramètre -dbr true dans la commande Tunnel Upload pour ignorer les données incorrectes, telles que les lignes comportant des colonnes supplémentaires, manquantes ou dont les types ne correspondent pas. La valeur par défaut du paramètre -dbr est False, ce qui signifie que les données incorrectes ne sont pas ignorées. Lorsque la valeur est définie sur True, toutes les données non conformes à la définition de la table sont ignorées. Pour plus d'informations, consultez la section Télécharger.

Résolution de l'erreur de conflit d'état

  • Symptôme

    Lorsque vous utilisez la commande Tunnel Upload, l'erreur suivante s'affiche :

    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.       
  • Cause

    Le fichier est déjà en cours de téléchargement et l'opération ne peut pas être dupliquée.

  • Solution

    Ne répétez pas l'opération de téléchargement. Attendez que la tâche de téléchargement existante se termine.

Résolution de l'erreur relative au corps de la requête

  • Symptôme

    Lorsque vous utilisez la commande Tunnel Upload, l'erreur suivante s'affiche :

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

    Cette exception survient lors de l'écriture des données sur le serveur. Elle est généralement provoquée par une déconnexion réseau ou un délai d'attente dépassé pendant le processus de téléchargement. Les causes possibles sont les suivantes :

    • Si votre source de données n'est pas un fichier local mais provient d'une base de données, le processus d'écriture peut expirer en attendant la récupération des données. L'opération expire si aucune donnée n'est téléchargée pendant 600 secondes.

    • Lors du téléchargement de données via un réseau public à l'aide d'un endpoint public, le téléchargement peut expirer en raison d'une connexion réseau instable.

  • Solution

    • Pendant le processus de téléchargement, récupérez d'abord les données, puis appelez le SDK Tunnel pour les télécharger.

    • Un seul bloc peut contenir entre 64 Mo et 100 Go de données. Nous vous recommandons de limiter le nombre d'enregistrements par bloc à moins de 10 000 afin d'éviter les délais d'attente causés par les nouvelles tentatives. Une session peut comporter au maximum 20 000 blocs. Si vos données résident sur une instance ECS, consultez la section Endpoints pour obtenir des informations sur les endpoints.

Résolution de l'erreur « no such partition »

  • Symptôme

    Lorsque vous téléchargez des données à l'aide de Tunnel, l'erreur suivante s'affiche :

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

    La partition de destination pour l'insertion des données n'existe pas.

  • Solution

    Exécutez d'abord la commande show partitions table_name; pour vérifier l'existence d'une partition, puis exécutez la commande alter table table_name add [if not exists] partition partition_spec pour créer la partition correspondante.

Résolution des erreurs d'incompatibilité de colonnes

Ce problème est généralement dû à un délimiteur de ligne incorrect dans le fichier source, ce qui entraîne le traitement de plusieurs enregistrements comme un seul. Vérifiez ce point et redéfinissez le paramètre -rd.

Résolution de l'erreur ODPS-0110061 en multithreading

  • Symptôme

    Lorsque vous téléchargez des données à l'aide de plusieurs threads, l'erreur suivante s'affiche :

    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.)      
  • Cause

    Cette erreur est causée par des opérations d'écriture concurrentes fréquentes sur la même table.

  • Solution

    Réduisez le nombre de threads simultanés, ajoutez un délai entre les requêtes et mettez en œuvre un mécanisme de nouvelle tentative pour les opérations ayant échoué.

Ignorer les en-têtes CSV lors du téléchargement

Vous pouvez ignorer la première ligne d'en-tête en ajoutant le paramètre -h true à la commande Tunnel Upload.

Données manquantes après l'importation CSV

Ce problème est généralement causé par un encodage de données incorrect ou l'utilisation de délimiteurs erronés, ce qui entraîne un téléchargement incorrect des données. Nous vous recommandons de formater correctement les données brutes avant d'exécuter l'opération de téléchargement.

Téléchargement de fichiers TXT avec un script Shell

Exécutez la commande suivante dans la fenêtre de ligne de commande de votre système pour télécharger rapidement des données vers une table MaxCompute en spécifiant les paramètres requis.

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

Pour plus d'informations sur l'utilisation de l'outil de ligne de commande, consultez la section Connexion à l'aide du client odpscmd.

Résolution des incompatibilités de champs pour les importations de dossiers

Ajoutez les paramètres -dbr=false -s true à la commande Tunnel Upload pour valider le format des données.

Une erreur column mismatch survient généralement en raison d'une inadéquation du nombre de colonnes. Cela peut se produire si le délimiteur de colonne est mal défini ou si des lignes vides figurent à la fin du fichier, entraînant une discordance du décompte des colonnes lors du fractionnement par le délimiteur.

Échec silencieux lors du téléchargement du deuxième fichier

Si le paramètre --scan est utilisé pour un téléchargement avec le client MaxCompute, un problème de transmission de paramètres se produit en mode reprise. Supprimez le paramètre --scan=true et réessayez l'opération.

Saut de bloc lors d'une nouvelle tentative après un échec de téléchargement

Chaque bloc correspond à une requête HTTP, et les téléchargements de plusieurs blocs peuvent être simultanés et atomiques. Une requête synchrone pour un bloc aboutit ou échoue sans affecter les autres blocs.

Le nombre de nouvelles tentatives est limité. Si cette limite est dépassée, le téléchargement passe au bloc suivant. Une fois le téléchargement terminé, vous pouvez utiliser l'instruction select count(*) from table; pour vérifier l'absence de perte de données.

Amélioration des vitesses de téléchargement lentes

La commande Tunnel Upload elle-même n'impose aucune limite de vitesse. Les goulots d'étranglement liés à la vitesse de téléchargement sont généralement associés à la bande passante réseau, aux performances du client et aux performances du serveur. Pour améliorer les performances, vous pouvez partitionner vos données, utiliser plusieurs tables ou télécharger des données depuis plusieurs instances ECS.

Prévention des délais d'expiration de session pour les téléchargements volumineux

Nous vous recommandons de diviser les données sources en plusieurs tâches plus petites.

Téléchargements lents dus à un nombre excessif de sessions

Définissez la taille du bloc sur une valeur appropriée. L'ID de bloc maximal est de 20 000. Définissez la durée de la session en fonction de vos besoins métier. Les données ne deviennent visibles qu'après la validation de la session. Évitez de créer des sessions trop fréquemment. Vous pouvez créer au maximum une session toutes les 5 minutes. Utilisez une grande taille de bloc, de préférence supérieure à 64 Mo.

Caractère \r supplémentaire dans la dernière colonne

Le caractère de nouvelle ligne est \r\n sous Windows et \n sous macOS et Linux. La commande Tunnel utilise le caractère de nouvelle ligne du système comme délimiteur de colonne par défaut. Par conséquent, lorsque vous téléchargez un fichier édité sous Windows depuis un système macOS ou Linux, le caractère \r est importé dans la table en tant que donnée.

Gestion des virgules dans les données avec le délimiteur par défaut

Si un champ de description de données contient des virgules, vous pouvez modifier le délimiteur de données par un autre caractère et utiliser le paramètre -fd pour spécifier le nouveau délimiteur lors du téléchargement.

Gestion des délimiteurs d'espace ou du filtrage par expression régulière

La commande Tunnel Upload ne prend pas en charge les expressions régulières. Si vos données utilisent des espaces comme délimiteurs ou nécessitent un filtrage par expression régulière, vous pouvez utiliser les UDF MaxCompute.

Supposons que vos données brutes utilisent des espaces comme délimiteurs de colonnes et des retours chariot comme délimiteurs de lignes, comme illustré dans l'exemple ci-dessous. Vous devez extraire les données entourées de guillemets et filtrer certains caractères tels que « - ». De telles exigences complexes peuvent être traitées à l'aide d'expressions régulières.

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

Procédez comme suit :

  1. Téléchargez les données sous forme de colonne unique. Créez d'abord une table à colonne unique dans votre projet MaxCompute pour recevoir les données. La commande suivante en est un exemple.

    create table userlog1(data string);
  2. Utilisez un délimiteur de colonne inexistant, tel que \u0000, pour télécharger les données sans les diviser en colonnes. Voici un exemple de commande.

    tunnel upload C:\userlog.txt userlog1 -s false -fd "\u0000" -rd "\n";
  3. Après avoir téléchargé les données brutes, écrivez et enregistrez une UDF Python dans MaxCompute Studio. Vous pouvez également utiliser une UDF Java. Pour plus d'informations sur l'écriture et l'enregistrement des UDF, consultez les sections Développer des UDF Java ou Développer des UDF Python.

    Le code ci-dessous fournit un exemple d'UDF. Supposons que la fonction enregistrée soit nommée 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. Après avoir enregistré la fonction, vous pouvez utiliser l'UDF pour traiter les données brutes de la table userlog1. Assurez-vous d'utiliser le nom de colonne correct, qui est data dans cet exemple. Vous pouvez utiliser la syntaxe SQL standard pour créer une table nommée userlog2 afin de stocker les données traitées. La commande suivante en est un exemple.

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

    Une fois le traitement terminé, vous pouvez interroger la table userlog2. Les données sont désormais correctement réparties dans les colonnes.

    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 |
    +----+------+---------+------+----+----+----+----+----+----+----+

Gestion des données incorrectes après le chargement

Nous vous recommandons d'écrire les données dans une table non partitionnée ou dans une seule partition en une seule opération. Évitez d'écrire plusieurs fois dans la même partition, car cela risque de générer des données incorrectes. Vous pouvez exécuter la commande tunnel show bad <sessionid>; dans le client MaxCompute pour vérifier la présence de données incorrectes. Si des données incorrectes ont été générées, vous pouvez les supprimer à l'aide des méthodes suivantes :

  • Exécutez la commande drop table ...; pour supprimer la table entière, ou la commande alter table ... drop partition; pour supprimer la partition cible, puis rechargez les données.

  • Si les données incorrectes peuvent être filtrées à l'aide d'une clause WHERE, utilisez une instruction INSERT avec cette clause pour importer les données correctes dans une nouvelle table ou effectuer une mise à jour sur place. Les noms de la partition ou de la table source et de destination doivent être identiques.

Synchronisation des données géométriques

MaxCompute ne prend pas en charge le type de données geometry. Vous devez convertir les données géométriques au type STRING avant de les synchroniser vers MaxCompute.

Le type geometry est un type de données spécial qui ne fait pas partie des types de données SQL standard. Le framework JDBC générique ne prend pas en charge ce type, ce qui nécessite un traitement spécifique lors de l'importation et de l'exportation des données.

Formats d'exportation pris en charge par Tunnel Download

Les fichiers de données exportés via la commande Tunnel Download peuvent être au format TXT ou CSV.

Frais liés aux téléchargements Tunnel intra-région

Pour télécharger des données au sein d'une même région sans engendrer de frais de trafic sur le réseau public, vous devez configurer l'endpoint Tunnel pour le réseau classique ou un VPC. Dans le cas contraire, les données pourraient être acheminées via un endpoint de réseau public situé dans une autre région, ce qui entraînerait des frais.

Résolution des délais d'expiration récurrents lors du téléchargement

Cette erreur indique généralement que l'endpoint Tunnel est incorrect. Vérifiez que l'endpoint Tunnel est correctement configuré. Une méthode simple pour valider l'endpoint consiste à tester la connectivité réseau à l'aide d'un outil tel que Telnet.

Résolution de l'erreur « no privilege »

  • Symptôme

    Lorsque vous utilisez la commande Tunnel Download, l'erreur suivante s'affiche :

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

    La fonctionnalité de protection des données est activée pour le projet.

  • Solution

    Si vous souhaitez exporter des données d'un projet vers un autre, l'opération doit être effectuée par le propriétaire du projet.

Téléchargement d'un sous-ensemble de données

Tunnel ne prend pas en charge le calcul ni le filtrage des données. Pour télécharger un sous-ensemble spécifique de données, vous pouvez utiliser l'une des méthodes suivantes :

  • Exécutez une tâche SQL pour enregistrer les données à télécharger dans une table temporaire. Une fois le téléchargement terminé, supprimez la table temporaire.

  • Si le volume de données souhaité est faible, vous pouvez utiliser une commande SQL pour interroger les données directement, sans avoir besoin de les télécharger.

Période de conservation de l'historique Tunnel

La conservation n'est pas basée sur le temps. Par défaut, les 500 dernières entrées sont enregistrées.

Flux de travail du chargement Tunnel

Le flux de travail de chargement des données avec Tunnel se déroule comme suit :

  1. Préparez les données sources, telles qu'un fichier source ou une table de données.

  2. Concevez le schéma de la table et les définitions des partitions, effectuez les conversions de types de données nécessaires, puis créez la table dans MaxCompute.

  3. Ajoutez des partitions à la table MaxCompute. Vous pouvez ignorer cette étape si la table n'est pas partitionnée.

  4. Chargez les données dans la partition ou la table spécifiée.

Prise en charge des caractères chinois dans les chemins d'accès

Oui, les caractères chinois sont pris en charge.

Remarques sur l'utilisation des délimiteurs

Lorsque vous utilisez des délimiteurs avec Tunnel, tenez compte des points suivants :

  • Le délimiteur de ligne est rd et le délimiteur de colonne est fd.

  • Le délimiteur de colonne fd ne peut pas contenir le délimiteur de ligne rd.

  • Le délimiteur par défaut pour Tunnel est \r\n sous Windows et \n sous Linux.

  • Au début d'un chargement, un message s'affiche à l'écran indiquant le délimiteur de ligne utilisé pour le chargement en cours, afin que vous puissiez le vérifier et le confirmer. Cette fonctionnalité est disponible à partir de la version v0.21.0.

Les chemins d'accès aux fichiers Tunnel peuvent-ils contenir des espaces ?

Oui. Toutefois, le paramètre contenant le chemin d'accès doit être entouré de guillemets doubles ("").

Prise en charge des fichiers .dbf

Tunnel prend uniquement en charge les fichiers texte et ne prend pas en charge les fichiers binaires.

Vitesses normales de chargement et de téléchargement

Les vitesses de chargement et de téléchargement via Tunnel dépendent fortement des conditions réseau. Dans des conditions réseau normales, la vitesse varie entre 1 Mo/s et 20 Mo/s.

Obtention du nom de domaine Tunnel

Le nom de domaine Tunnel correspond à l' endpoint Tunnel public. Différentes régions et différents réseaux correspondent à différents noms de domaine Tunnel. Pour plus d'informations, consultez la rubrique Endpoints afin d'obtenir l' endpoint Tunnel public approprié.

Dépannage des échecs de chargement et de téléchargement

Récupérez le nom de domaine Tunnel à partir du fichier odps_config.ini situé dans le répertoire ..\odpscmd_public\conf de l'installation du client MaxCompute, puis exécutez la commande curl -i <domain name> (par exemple, curl -i http://dt.odps.aliyun.com) dans une fenêtre de ligne de commande pour tester la connectivité réseau. Si la connexion échoue, vérifiez le réseau de votre appareil ou utilisez le nom de domaine Tunnel correct.

Résolution des erreurs Java heap space

  • Symptôme

    Lors de l'utilisation d'une commande Tunnel pour charger ou télécharger des données, vous pouvez recevoir l'erreur suivante :

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

    • Cause 1 : Lors du chargement des données, une seule ligne de données est trop volumineuse.

    • Cause 2 : La quantité de données à télécharger est trop importante par rapport à la mémoire disponible du programme client.

  • Solution

    • Solution pour la Cause 1

      1. Vérifiez d'abord si le délimiteur est incorrect, ce qui pourrait entraîner la lecture de toutes les données comme une seule ligne volumineuse.

      2. Si le délimiteur est correct et qu'une seule ligne du fichier est très volumineuse, la mémoire du programme client est insuffisante. Vous devez ajuster les paramètres de démarrage du processus client. Pour ce faire, modifiez le script odpscmd situé dans le répertoire bin de l'installation du client et augmentez les valeurs de -Xms64m -Xmx512m dans la commande java -Xms64m -Xmx512m -classpath "${clt_dir}/lib/*:${clt_dir}/conf/"com.aliyun.openservices.odps.console.ODPSConsole "$@".

    • Solution pour la Cause 2 : Modifiez le script odpscmd situé dans le répertoire bin du chemin d'installation du client. Augmentez les valeurs de -Xms64m -Xmx512m dans la commande suivante : java -Xms64m -Xmx512m -classpath "${clt_dir}/lib/*:${clt_dir}/conf/"com.aliyun.openservices.odps.console.ODPSConsole "$@".

Cycle de vie et expiration des sessions

Chaque session a une durée de vie de 24 heures sur le serveur et peut être utilisée à tout moment durant cette période. Une fois la session expirée, elle devient invalide et vous ne pouvez plus effectuer aucune opération avec celle-ci. Vous devez créer une nouvelle session et recharger les données.

Une session peut-elle être partagée ?

Une session peut être partagée entre plusieurs processus et threads. Toutefois, vous devez vous assurer que le même ID de bloc n'est pas utilisé plus d'une fois.

Qu'est-ce que la fonctionnalité de routage Tunnel ?

Si vous ne configurez pas d'endpoint Tunnel, Tunnel achemine automatiquement le trafic vers l'endpoint Tunnel correspondant au réseau où se trouve le service MaxCompute. Si vous configurez un endpoint Tunnel, votre configuration est prioritaire et le routage automatique est désactivé.

Tunnel prend-il en charge la concurrence ?

Oui. La commande suivante en est un exemple :

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