Este tema describe cómo utilizar DataX para exportar datos desde Tablestore hacia un archivo CSV local. Es posible exportar datos tanto de tablas de datos como de tablas de series temporales en Tablestore.
Contexto
DataX es una herramienta de sincronización de datos sin conexión y de código abierto que admite la transferencia de datos entre fuentes heterogéneas, incluidas MySQL, Oracle, HDFS, Hive y Tablestore.
Antes de comenzar, tenga en cuenta lo siguiente:
Nombres de archivos exportados: DataX añade un sufijo aleatorio a los nombres de los archivos CSV exportados (por ejemplo,
output.csv__d737aec2_c9e3_4489_a5d7_361f44c998ce). Elimine manualmente este sufijo después de la exportación para obtener un archivo CSV estándar.Costos de red: Si ejecuta DataX en una instancia de Elastic Compute Service (ECS), utilice un endpoint de VPC para evitar cargos por tráfico saliente a Internet y mejorar el rendimiento de la red.
Requisitos previos
Debe contar con el endpoint y el nombre de la instancia de Tablestore, así como con la información de la tabla de origen en Tablestore.
-
Debe haber creado un par de AccessKey para su cuenta de Alibaba Cloud o para un usuario de Resource Access Management (RAM). Para obtener más información, consulte Create an AccessKey.
ImportantePor motivos de seguridad, se recomienda acceder a Tablestore como usuario de RAM. Cree un usuario de RAM, asigne la política
AliyunOTSFullAccessa dicho usuario y genere un par de AccessKey para él. Para obtener más información, consulte Access Tablestore with a RAM user's AccessKey pair.
Procedimiento
Los ejemplos de este tema utilizan instancias de ECS con Alibaba Cloud Linux 3.2104 LTS de 64 bits o Ubuntu 22.04 de 64 bits. Para obtener más información, consulte What is ECS?.
Paso 1: Instalación de dependencias
-
Instale Python 2 o Python 3.
Python 3 viene preinstalado en las instancias de ECS que ejecutan Alibaba Cloud Linux o Ubuntu. Para otros sistemas operativos, instale Python manualmente.
-
Instale JDK 1.8 o posterior. Se recomienda JDK 1.8.
Los siguientes comandos instalan JDK 1.8 en Alibaba Cloud Linux o Ubuntu. Para otros sistemas operativos, instale JDK manualmente.
Alibaba Cloud Linux
yum -y install java-1.8.0-openjdk-devel.x86_64Ubuntu
apt update && apt upgrade apt install openjdk-8-jdk
Paso 2: Descarga de DataX
-
Descargue el paquete de DataX.
wget https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202309/datax.tar.gz -
Extraiga el paquete.
tar -zxvf datax.tar.gz
Para compilar DataX desde el código fuente, consulte la guía de instalación de DataX.
Paso 3: Creación de un archivo de configuración
-
Vaya al directorio
binde DataX.cd datax/bin -
Cree un archivo de configuración.
vi tablestore_to_csv.jsonA continuación se muestra el contenido del archivo de configuración para cada tipo de tabla. Modifique los parámetros según sus necesidades.
Exportación de datos desde una tabla de datos
Para obtener información sobre el esquema de la tabla de datos de origen denominada
orders, consulte Appendix 1: Data table .{ "job": { "setting": { "speed": { "channel": 1 }, "errorLimit": { "record": 0, "percentage": 0 } }, "content": [ { "reader": { "name": "otsreader", "parameter": { "endpoint": "https://<YOUR-INSTANCE>.<YOUR-REGION>.ots.aliyuncs.com", "accessId": "<YOUR-ACCESS-KEY-ID>", "accessKey": "<YOUR-ACCESS-KEY-SECRET>", "instanceName": "<YOUR-INSTANCE>", "table": "orders", "range": { "begin": [ { "type": "INF_MIN" } ], "end": [ { "type": "INF_MAX" } ] }, "column": [ { "name": "order_id" }, { "name": "user_id" }, { "name": "sku_id" }, { "name": "price" }, { "name": "num" }, { "name": "total_price" }, { "name": "order_status" }, { "name": "create_time" }, { "name": "modified_time" } ] } }, "writer": { "name": "txtfilewriter", "parameter": { "path": "/tmp/export/", "fileName": "output.csv", "writeMode": "truncate", "fileFormat": "csv" } } } ] } }Exportación de datos desde una tabla de series temporales
Para obtener información sobre el esquema de la tabla de series temporales de origen denominada
vehicles_timeseriesdata, consulte Appendix 2: Time series table .{ "job": { "setting": { "speed": { "channel": 1 } }, "content": [ { "reader": { "name": "otsreader", "parameter": { "endpoint": "https://<YOUR-INSTANCE>.<YOUR-REGION>.ots.aliyuncs.com", "accessId": "<YOUR-ACCESS-KEY-ID>", "accessKey": "<YOUR-ACCESS-KEY-SECRET>", "instanceName": "<YOUR-INSTANCE>", "table": "vehicles_timeseriesdata", "mode": "normal", "newVersion": "true", "isTimeseriesTable": "true", "measurementName": "measurement_1", "timeRange": { "begin": 0, "end": 1750000000000 }, "column": [ { "name": "_m_name" }, { "name": "_data_source" }, { "name": "_tags" }, { "name": "_time" }, { "name": "vin_id", "type": "STRING" }, { "name": "mfrs", "type": "STRING" }, { "name": "model", "type": "STRING" }, { "name": "speed", "type": "DOUBLE" }, { "name": "gps", "type": "STRING" }, { "name": "mileage", "type": "DOUBLE" }, { "name": "emission", "type": "DOUBLE" } ] } }, "writer": { "name": "txtfilewriter", "parameter": { "path": "/tmp/export/", "fileName": "output.csv", "writeMode": "truncate", "fileFormat": "csv" } } } ] } }-
La siguiente tabla describe los parámetros de Tablestore Reader que debe modificar.
Parámetro
Aplicable a
Descripción
channel
Ambos
Número de hilos de lectura y escritura paralelos. Cada canal representa un hilo independiente. Aumentar este valor incrementa la concurrencia y el consumo de recursos.
endpoint
Ambos
El endpoint de la instancia de Tablestore. Si accede a Tablestore desde una instancia de ECS, utilice un endpoint de VPC para evitar cargos por tráfico saliente, además de mejorar el rendimiento y la seguridad.
accessId
Ambos
El AccessKey ID de su cuenta de Alibaba Cloud o usuario de RAM.
accessKey
Ambos
El AccessKey secret de su cuenta de Alibaba Cloud o usuario de RAM.
instanceName
Ambos
El nombre de la instancia de Tablestore.
tableName
Ambos
El nombre de la tabla de origen en Tablestore.
column
Ambos
La matriz de columnas que se van a exportar.
range
Tabla de datos
El rango de clave primaria que se va a leer. Las matrices
beginyendespecifican un valor por cada columna de clave primaria. El intervalo es cerrado por la izquierda y abierto por la derecha. UtiliceINF_MIN(infinito negativo) eINF_MAX(infinito positivo) para leer la tabla completa. El número de columnas en un punto virtual debe coincidir con el de la clave primaria. Este parámetro es opcional; el valor predeterminado lee desde infinito negativo.measurementName
Tabla de series temporales
El nombre de la métrica de la serie temporal que se va a leer. Si no se establece, se leen todos los datos de la tabla.
timeRange
Tabla de series temporales
El intervalo de marcas de tiempo que se va a leer, en milisegundos. El intervalo es cerrado por la izquierda y abierto por la derecha. Este parámetro es opcional; el valor predeterminado lee todas las versiones.
-
La siguiente tabla describe los parámetros de TxtFileWriter que debe modificar.
Parámetro
Descripción
path
El directorio local donde se guarda el archivo exportado.
fileName
El nombre base del archivo exportado, incluida la extensión. Ejemplo:
output.csv.writeMode
Define cómo maneja TxtFileWriter los archivos existentes antes de escribir. Valores válidos:
-
truncate: elimina todos los archivos con el prefijo del valorfileNameen el directorio de destino antes de escribir. -
append: escribe directamente en el archivo sin procesamiento previo, lo que garantiza que no haya conflictos de nombres. -
nonConflict: reporta un error y cancela la operación si ya existe un archivo con el prefijo del valorfileNameen el directorio.
fileFormat
El formato del archivo de salida. Valores válidos:
csvytext. -
-
Paso 4: Ejecución del trabajo de DataX
-
Ejecute el trabajo de exportación.
python3 datax.py tablestore_to_csv.jsonUna vez finalizado el trabajo, se imprime un resumen:
2025-03-19 17:21:05.146 [job-0] INFO StandAloneJobContainerCommunicator - Total 200000 records, 23086634 bytes | Speed 1.10MB/s, 10000 records/s | Error 0 records, 0 bytes | All Task WaitWriterTime 0.222s | All Task WaitReaderTime 18.392s | Percentage 100.00% 2025-03-19 17:21:05.147 [job-0] INFO JobContainer - Task Start Time : 2025-03-19 17:20:43 Task End Time : 2025-03-19 17:21:05 Task Duration : 21s Average Transfer Speed : 1.10MB/s Record Write Speed : 10000rec/s Total Records Read : 200000 Failed Records : 0 -
Compruebe el resultado de la exportación.
Revise el directorio de salida (por ejemplo,
/tmp/export/) para confirmar el archivo exportado. El nombre del archivo incluye un sufijo aleatorio:output.csv__d737aec2_c9e3_4489_a5d7_361f44c998cePara previsualizar el contenido del archivo, ejecute:
head -5 output.csv__d737aec2_c9e3_4489_a5d7_361f44c998ceLa salida será similar a la siguiente:
order_id,user_id,sku_id,price,num,total_price,order_status,create_time,modified_time ORD-001,USR-100,SKU-200,29.99,2,59.98,completed,2025-01-01 08:00:00,2025-01-02 10:00:00 ORD-002,USR-101,SKU-201,49.99,1,49.99,pending,2025-01-02 09:00:00,2025-01-02 09:00:00Elimine el sufijo para obtener un nombre de archivo CSV estándar:
mv output.csv__d737aec2_c9e3_4489_a5d7_361f44c998ce output.csvNotaDataX añade un sufijo aleatorio para distinguir los archivos escritos por hilos paralelos. Elimine dicho sufijo para obtener un nombre de archivo CSV estándar.
Apéndice: Tablas de origen de ejemplo
Apéndice 1: Tabla de datos
La tabla de datos de ejemplo se denomina orders. La siguiente tabla describe el esquema de dicha tabla.
|
Nombre del campo |
Tipo |
Descripción |
|
order_id (columna de clave primaria) |
String |
El identificador del pedido. |
|
user_id |
String |
El identificador del usuario. |
|
sku_id |
String |
El identificador del producto. |
|
price |
Double |
El precio unitario de los productos adquiridos. |
|
num |
Integer |
La cantidad de productos adquiridos. |
|
total_price |
Double |
El precio total del pedido. |
|
order_status |
String |
El estado del pedido. |
|
create_time |
String |
La fecha y hora de creación del pedido. |
|
modified_time |
String |
La fecha y hora de la última modificación del pedido. |
Apéndice 2: Tabla de series temporales
La tabla de series temporales de ejemplo se denomina vehicles_timeseriesdata. La siguiente tabla describe el esquema de dicha tabla.
|
Nombre del campo |
Tipo |
Descripción |
|
_m_name |
String |
El nombre de la magnitud física o métrica de los datos en la serie temporal. |
|
_data_source |
String |
El identificador del origen de datos de la serie temporal. Este campo puede dejarse en blanco. |
|
_tags |
String |
Las etiquetas de la serie temporal. |
|
_time |
Integer |
La fecha y hora en que se reportan los datos. |
|
vin_id |
String |
El número de identificación vehicular (VIN) del vehículo. |
|
mfrs |
String |
El fabricante. |
|
model |
String |
El modelo del vehículo. |
|
speed |
Double |
La velocidad actual del vehículo. |
|
gps |
String |
Las coordenadas GPS del vehículo en formato |
|
mileage |
Double |
El kilometraje actual del vehículo. |
|
emission |
Double |
El valor de emisión. |