Este tema describe las funciones de los comandos de Tunnel y cómo utilizarlos para cargar y descargar datos.
Herramientas compatibles
Puede ejecutar comandos de Tunnel en odpscmd y MaxCompute Studio. Para obtener más información, consulte Connect using a local client (odpscmd) y Introduction to MaxCompute Studio.
Funciones de los comandos de Tunnel
Los comandos de Tunnel disponibles en client reemplazan a la herramienta Dship. Estos comandos permiten cargar y descargar datos. A continuación se detallan:
Upload: Carga datos desde un archivo local hacia una tabla de MaxCompute. Cada operación de carga puede escribir datos en una sola tabla o en una única partition. En tablas particionadas, debe especificar la partición de destino. Si la tabla tiene varios niveles de partición, es necesario indicar la partición del nivel más bajo. Para más información, consulte Upload.
Download: Descarga datos de una tabla de MaxCompute o los resultados de una instancia específica a un archivo local. Cada operación permite descargar una tabla o una partición en un solo archivo. Para tablas particionadas, debe especificar la partición de origen. En tablas con múltiples niveles de partición, indique la partición del nivel más bajo. Para más información, consulte Download.
Resume: Si una carga falla debido a problemas de red o errores del servicio Tunnel, utilice el comando
Resumepara continuar con la transferencia del archivo. Este comando reanuda la operación de carga anterior. Actualmente, Resume no admite operaciones de descarga. Para más información, consulte Resume.Show: Muestra información sobre tareas históricas. Para más información, consulte Show.
Purge: Limpia el directorio de sesiones. De forma predeterminada, este comando elimina los registros de los últimos tres días. Para más información, consulte Purge.
Help: Muestra información de ayuda. Se admiten formatos abreviados para cada comando y opción.
-
Upsert: Escribe datos mediante una combinación de semánticas Update e Insert. Este comando solo es compatible con tablas Transaction Table 2.0.
Si no se encuentran datos coincidentes en la tabla de destino, se insertan nuevos registros. Si los datos ya existen, se actualizan.
Límites de carga y descarga de Tunnel
Actualmente, la función Tunnel y su kit de desarrollo de software (SDK) no admiten operaciones en tablas externas. Puede usar Tunnel para cargar datos directamente en una tabla interna de MaxCompute. Como alternativa, cargue los datos en OSS mediante el SDK de Python de OSS y luego cree una tabla externa en MaxCompute que apunte a dichos datos. Para más información sobre tablas externas, consulte Overview of external tables.
Los comandos de Tunnel no admiten la carga ni la descarga de datos con tipos ARRAY, MAP o STRUCT.
-
El ciclo de vida de cada sesión de Tunnel en el servidor es de 24 horas. Una sesión puede utilizarse dentro de las 24 horas posteriores a su creación y también puede compartirse entre procesos o hilos. No obstante, debe asegurarse de que no se reutilice el mismo BlockId.
NotaSesión de Tunnel: El servidor crea una sesión para cada carga o descarga y genera un UploadId o DownloadId único para identificar la operación. El ciclo de vida de una sesión de Tunnel en el servidor es de 24 horas. Transcurrido ese tiempo, la sesión queda inactiva.
Al descargar datos mediante una sesión, tenga en cuenta que una sesión creada por una cuenta de Alibaba Cloud solo puede ser utilizada para descargas por dicha cuenta o sus usuarios de RAM.
Carga y descarga de datos de tablas
Antes de comenzar, prepare un archivo de datos llamado data.txt y guárdelo en d:\data.txt. El archivo contiene los siguientes datos:
shopx,x_id,100
shopy,y_id,200
shopz,z_id
La tercera fila de datos en el archivo data.txt no coincide con el esquema de la tabla particionada sale_detail que se creará. La tabla sale_detail está definida con tres columnas, pero esta fila solo tiene dos.
Los siguientes pasos describen cómo cargar y descargar datos de tablas.
-
En el cliente de MaxCompute, ejecute las siguientes sentencias para crear la tabla particionada sale_detail y agregarle una partición.
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'); -
Utilice el comando
uploadpara cargar el archivo de datos data.txt en la tabla particionada sale_detail.-
Comando de ejemplo
tunnel upload d:\data.txt sale_detail/sale_date=201312,region=hangzhou -s false; -
Valor devuelto
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 delimiterNotaDado que data.txt contiene datos incorrectos, la importación falla. Se devuelve un ID de sesión y un mensaje de error.
-
-
Ejecute la siguiente sentencia para comprobar los datos.
-
Comando de ejemplo
select * from sale_detail where sale_date='201312'; -
Valores devueltos
ID = 20230505xxxxxxxxxxxvc61z5 +-----------+-------------+-------------+-----------+--------+ | shop_name | customer_id | total_price | sale_date | region | +-----------+-------------+-------------+-----------+--------+ +-----------+-------------+-------------+-----------+--------+NotaLa importación de datos falló debido a datos incorrectos, por lo que la tabla quedó vacía.
-
-
Use el comando
showpara consultar el ID de sesión de la carga fallida.-
Comando de ejemplo
tunnel show history; -
Resultado devuelto
20230505xxxxxxxxxxxb0b02dbb6bd failed 'upload d:\data.txt sale_detail/sale_date=201312,region=Hangzhou -s false'
-
-
Modifique el archivo de datos de ejemplo data.txt para que contenga los siguientes datos, los cuales coinciden con el esquema de la tabla sale_detail.
shopx,x_id,100 shopy,y_id,200 -
Ejecute el comando
resumepara reanudar la carga de datos. En este comando, 20230505xxxxxxxxxxxb0b02dbb6bd corresponde al ID de sesión de la carga fallida.-
Comando de ejemplo
tunnel resume 20230505xxxxxxxxxxxb0b02dbb6bd --force; -
Valor devuelto
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
-
-
Ejecute la siguiente sentencia para verificar los datos. La carga se completó correctamente.
-
Comando de ejemplo
select * from sale_detail where sale_date='201312'; -
Valor devuelto
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| +-----------+-------------+-------------+-----------+--------+
-
-
Ejecute el comando
downloadpara descargar los datos de la tabla sale_detail a un archivo local llamado result.txt.NotaLas convenciones de nomenclatura para la ruta local path donde se descargan los datos son las siguientes:
Para guardar el archivo directamente en el directorio bin del cliente de MaxCompute, establezca path como
filename.extension.Para guardar el archivo en otra ruta, como la carpeta test en la unidad D, establezca path como
D:\test\filename.extension.Si existe un archivo local con el mismo nombre, se sobrescribe.
tunnel download sale_detail/sale_date=201312,region=hangzhou result.txt; -
Verifique el contenido del archivo result.txt. El archivo contiene lo siguiente, lo cual indica que la descarga fue exitosa.
NotaEl archivo descargado muestra únicamente los valores de los campos que no son de partición.
shopx,x_id,100.0 shopy,y_id,200.0
Descarga de datos de instancias
-
Método 1: Utilice el comando tunnel download para descargar los resultados de ejecución de una instancia específica a un archivo local.
-
Ejecute una sentencia SELECT para consultar la tabla sale_detail.
select * from sale_detail;NotaSi los escaneos completos de tabla están deshabilitados para la tabla particionada sale_detail, este comando devuelve el error
Table(xxxx) is full scan with all partitions, please specify partition predicates. Para más información sobre cómo resolver este problema, consulte Appendix: Error codes. -
Ejecute el siguiente comando de Tunnel para descargar los resultados de ejecución a un archivo 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 generar resultados de consultas SQL a través de InstanceTunnel de forma predeterminada.
Después de habilitar la opción
use_instance_tunnelen el cliente de MaxCompute, las consultas SELECT utilizan InstanceTunnel por defecto para descargar resultados. Esto ayuda a evitar errores de tiempo de espera y límites de volumen de datos al recuperar resultados de consultas SQL desde la plataforma MaxCompute. Puede habilitar esta configuración de una de las siguientes dos maneras:NotaPara más información sobre las restricciones y límites de InstanceTunnel, consulte InstanceTunnel constraints and limits.
-
En la versión más reciente de client, esta opción está habilitada de forma predeterminada en el archivo odps_config.ini, y
instance_tunnel_max_recordse establece en 10000 por defecto.# 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=10000NotaEl parámetro
instance_tunnel_max_recordespecifica el número máximo de resultados de consultas SQL que se pueden descargar mediante InstanceTunnel. Si no configura este parámetro, se podrá descargar una cantidad ilimitada de registros. -
Ejecute el comando
set console.sql.result.instancetunnel=truepara habilitar esta función.-
Habilite la opción Instance Tunnel.
set console.sql.result.instancetunnel=true; -
Ejecute una consulta select.
select * from wc_in;Se devuelve el siguiente resultado:
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
NotaCuando utiliza InstanceTunnel para mostrar los resultados de una consulta SELECT, el sistema imprime un mensaje en la última línea. En este ejemplo, la ejecución de la instancia devolvió un total de 8 registros. Del mismo modo, puede ejecutar el comando
set console.sql.result.instancetunnel = falsepara deshabilitar esta función. -
-