Cette rubrique présente les fonctionnalités des commandes Tunnel et explique comment les utiliser pour charger et télécharger des données.
Outils pris en charge
Exécutez les commandes Tunnel dans odpscmd et MaxCompute Studio. Pour plus d'informations, consultez Connexion à l'aide d'un client local (odpscmd) et Présentation de MaxCompute Studio.
Fonctionnalités des commandes Tunnel
Les commandes Tunnel disponibles dans le client remplacent l'outil Dship. Elles permettent de charger et de télécharger des données. Voici la liste des commandes :
Upload : charge les données d'un fichier local vers une table MaxCompute. Chaque opération de chargement écrit les données dans une seule table ou une seule partition. Pour une table partitionnée, spécifiez la partition de destination. Pour une table à partitions multiples, spécifiez la partition de niveau le plus bas. Pour plus d'informations, consultez Upload.
Download : télécharge les données d'une table MaxCompute ou les résultats d'une instance spécifique vers un fichier local. Chaque opération de téléchargement permet de télécharger une table ou une partition dans un seul fichier. Pour une table partitionnée, spécifiez la partition source. Pour une table à partitions multiples, spécifiez la partition de niveau le plus bas. Pour plus d'informations, consultez Download.
Resume : si un chargement échoue en raison de problèmes réseau ou d'erreurs du service Tunnel, utilisez la commande
Resumepour reprendre le chargement du fichier. Cette commande reprend l'opération de chargement précédente. La commande Resume ne prend pas actuellement en charge les opérations de téléchargement. Pour plus d'informations, consultez Resume.Show : affiche les informations relatives aux tâches historiques. Pour plus d'informations, consultez Show.
Purge : vide le répertoire de session. Par défaut, cette commande supprime les journaux des trois derniers jours. Pour plus d'informations, consultez Purge.
Help : affiche l'aide. Des formats de commande abrégés sont pris en charge pour chaque commande et option.
-
Upsert : écrit les données en combinant les sémantiques Update et Insert. Cette commande est uniquement prise en charge pour les tables Transaction Table 2.0.
Si aucune donnée correspondante n'est trouvée dans la table de destination, les nouvelles données sont insérées. Si les données existent déjà, elles sont mises à jour.
Limites de chargement et de téléchargement avec Tunnel
La fonctionnalité Tunnel et le kit de développement logiciel (SDK) Tunnel ne prennent pas actuellement en charge les opérations sur les tables externes. Utilisez Tunnel pour charger des données directement dans une table interne MaxCompute. Vous pouvez également charger des données vers OSS à l'aide du SDK Python OSS, puis créer une table externe dans MaxCompute pour mapper ces données. Pour plus d'informations sur les tables externes, consultez Présentation des tables externes.
Les commandes Tunnel ne permettent pas de charger ou de télécharger des données de type ARRAY, MAP ou STRUCT.
-
Le cycle de vie de chaque session Tunnel côté serveur est de 24 heures. Une session peut être utilisée dans les 24 heures suivant sa création. Elle peut également être partagée entre plusieurs processus ou threads. Toutefois, veillez à ne pas réutiliser le même BlockId.
RemarqueSession Tunnel : le serveur crée une session pour chaque chargement ou téléchargement et génère un UploadId ou DownloadId unique pour identifier l'opération. Le cycle de vie d'une session Tunnel côté serveur est de 24 heures. Au-delà de ce délai, la session devient inactive.
Lorsque vous téléchargez des données à l'aide d'une session, notez qu'une session créée par un compte Alibaba Cloud ne peut être utilisée pour les téléchargements que par ce compte Alibaba Cloud ou ses utilisateurs RAM.
Chargement et téléchargement de données de table
Avant de commencer, préparez un fichier de données nommé data.txt et enregistrez-le sous d:\data.txt. Le fichier contient les données suivantes.
shopx,x_id,100
shopy,y_id,200
shopz,z_id
La troisième ligne de données du fichier data.txt ne correspond pas au schéma de la table partitionnée sale_detail qui sera créée. La table sale_detail est définie avec trois colonnes, mais cette ligne n'en contient que deux.
Les étapes suivantes décrivent comment charger et télécharger les données d'une table.
-
Dans le client MaxCompute, exécutez les instructions suivantes pour créer la table partitionnée sale_detail et lui ajouter une partition.
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'); -
Utilisez la commande
uploadpour charger le fichier de données data.txt dans la table partitionnée sale_detail.-
Exemple de commande
tunnel upload d:\data.txt sale_detail/sale_date=201312,region=hangzhou -s false; -
Valeur de retour
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 delimiterRemarqueÉtant donné que le fichier data.txt contient des données incorrectes, l'importation des données échoue. Un ID de session et un message d'erreur sont renvoyés.
-
-
Exécutez l'instruction suivante pour vérifier les données.
-
Exemple de commande
select * from sale_detail where sale_date='201312'; -
Valeurs de retour
ID = 20230505xxxxxxxxxxxvc61z5 +-----------+-------------+-------------+-----------+--------+ | shop_name | customer_id | total_price | sale_date | region | +-----------+-------------+-------------+-----------+--------+ +-----------+-------------+-------------+-----------+--------+RemarqueL'importation des données a échoué en raison de données incorrectes, laissant la table vide.
-
-
Utilisez la commande
showpour interroger l'ID de session du chargement ayant échoué.-
Exemple de commande
tunnel show history; -
Résultat renvoyé
20230505xxxxxxxxxxxb0b02dbb6bd failed 'upload d:\data.txt sale_detail/sale_date=201312,region=Hangzhou -s false'
-
-
Modifiez le fichier de données exemple data.txt afin qu'il contienne les données suivantes, qui correspondent au schéma de table de sale_detail.
shopx,x_id,100 shopy,y_id,200 -
Exécutez la commande
resumepour reprendre le chargement des données. Dans cette commande, 20230505xxxxxxxxxxxb0b02dbb6bd correspond à l'ID de session du chargement ayant échoué.-
Exemple de commande
tunnel resume 20230505xxxxxxxxxxxb0b02dbb6bd --force; -
Valeur de retour
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
-
-
Exécutez l'instruction suivante pour vérifier les données. Le chargement est réussi.
-
Exemple de commande
select * from sale_detail where sale_date='201312'; -
Valeur de retour
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| +-----------+-------------+-------------+-----------+--------+
-
-
Exécutez la commande
downloadpour télécharger les données de la table sale_detail vers un fichier local nommé result.txt.RemarqueLes conventions de nommage pour le chemin local path où les données sont téléchargées sont les suivantes :
Pour enregistrer le fichier directement dans le répertoire bin du client MaxCompute, définissez path sur
filename.extension.Pour enregistrer le fichier dans un autre chemin, tel que le dossier test sur le lecteur D, définissez path sur
D:\test\filename.extension.Si un fichier local portant le même nom existe déjà, il est écrasé.
tunnel download sale_detail/sale_date=201312,region=hangzhou result.txt; -
Vérifiez le contenu du fichier result.txt. Le fichier contient le contenu suivant, ce qui indique que le téléchargement est réussi.
RemarqueLe fichier téléchargé affiche uniquement les valeurs des champs non partitionnés.
shopx,x_id,100.0 shopy,y_id,200.0
Téléchargement de données d'instance
-
Méthode 1 : Utilisez la commande tunnel download pour télécharger les résultats d'exécution d'une instance spécifique vers un fichier local.
-
Exécutez une instruction SELECT pour interroger la table sale_detail.
select * from sale_detail;RemarqueSi les analyses complètes de table sont désactivées pour la table partitionnée sale_detail, cette commande renvoie l'erreur
Table(xxxx) is full scan with all partitions, please specify partition predicates. Pour plus d'informations sur la résolution de ce problème, consultez Annexe : Codes d'erreur. -
Exécutez la commande Tunnel suivante pour télécharger les résultats d'exécution vers un fichier local.
--View the instance ID of the SELECT command show p; --Run the download command tunnel download instance://20170724071705393ge3csfb8 result.txt;
-
-
Méthode 2 : Configurez les paramètres pour générer les résultats des requêtes SQL via InstanceTunnel par défaut.
Après avoir activé l'option
use_instance_tunneldans le client MaxCompute, les requêtes SELECT utilisent InstanceTunnel par défaut pour télécharger les résultats. Cela permet d'éviter les erreurs de délai d'attente et les limites de volume de données lors de la récupération des résultats de requête SQL depuis la plateforme MaxCompute. Vous pouvez activer cette configuration de l'une des deux manières suivantes :RemarquePour plus d'informations sur les contraintes et limites d'InstanceTunnel, consultez Contraintes et limites d'InstanceTunnel.
-
Dans la dernière version du client, cette option est activée par défaut dans le fichier odps_config.ini, et
instance_tunnel_max_recordest défini sur 10000 par défaut.# 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=10000RemarqueLe paramètre
instance_tunnel_max_recordspécifie le nombre maximal de résultats de requête SQL à télécharger via InstanceTunnel. Si vous ne définissez pas ce paramètre, un nombre illimité d'enregistrements peut être téléchargé. -
Exécutez la commande
set console.sql.result.instancetunnel=truepour activer cette fonctionnalité.-
Activez l'option Instance Tunnel.
set console.sql.result.instancetunnel=true; -
Exécutez une requête select.
select * from wc_in;Le résultat suivant est renvoyé.
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
RemarqueLorsque vous utilisez InstanceTunnel pour générer les résultats d'une requête SELECT, le système imprime un message sur la dernière ligne. Dans cet exemple, l'exécution de l'instance a renvoyé un total de 8 enregistrements. De même, vous pouvez exécuter la commande
set console.sql.result.instancetunnel = falsepour désactiver cette fonctionnalité. -
-