Este tópico descreve como usar o DataX para exportar dados do Tablestore para um arquivo CSV local. Você pode exportar dados de tabelas de dados e de séries temporais do Tablestore.
Contexto
O DataX é uma ferramenta de sincronização de dados offline de código aberto que suporta a transferência de dados entre fontes heterogêneas, como MySQL, Oracle, HDFS, Hive e Tablestore.
Antes de começar, observe o seguinte:
Nomes dos arquivos exportados: o DataX adiciona um sufixo aleatório aos nomes dos arquivos CSV exportados (por exemplo,
output.csv__d737aec2_c9e3_4489_a5d7_361f44c998ce). Remova esse sufixo manualmente após a exportação para obter um arquivo CSV padrão.Custos de rede: se você executar o DataX em uma instância do Elastic Compute Service (ECS), use um endpoint de VPC para evitar taxas de tráfego de saída para a Internet e melhorar o desempenho da rede.
Pré-requisitos
Obtenha o endpoint e o nome da instância do Tablestore, bem como as informações da tabela de origem no Tablestore.
-
Crie um par de AccessKey para a sua conta Alibaba Cloud ou para um usuário do Resource Access Management (RAM). Para mais informações, consulte Create an AccessKey.
ImportantePor questões de segurança, use o Tablestore como um usuário RAM. Crie um usuário RAM, anexe a política
AliyunOTSFullAccessa esse usuário e crie um par de AccessKey para ele. Para mais informações, consulte Access Tablestore with a RAM user's AccessKey pair.
Procedimento
Os exemplos neste tópico usam instâncias do ECS que executam o Alibaba Cloud Linux 3.2104 LTS 64-bit ou o Ubuntu 22.04 64-bit. Para mais informações, consulte What is ECS?.
Etapa 1: Instale as dependências
-
Instale o Python 2 ou o Python 3.
O Python 3 vem pré-instalado em instâncias do ECS que executam o Alibaba Cloud Linux ou o Ubuntu. Para outros sistemas operacionais, instale o Python manualmente.
-
Instale o JDK 1.8 ou posterior. O JDK 1.8 é o recomendado.
Os comandos a seguir instalam o JDK 1.8 no Alibaba Cloud Linux ou no Ubuntu. Para outros sistemas operacionais, instale o 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
Etapa 2: Baixe o DataX
-
Baixe o pacote do DataX.
wget https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202309/datax.tar.gz -
Extraia o pacote.
tar -zxvf datax.tar.gz
Para compilar o DataX a partir do código-fonte, consulte o guia de instalação do DataX.
Etapa 3: Crie um arquivo de configuração
-
Acesse o diretório
bindo DataX.cd datax/bin -
Crie um arquivo de configuração.
vi tablestore_to_csv.jsonOs exemplos a seguir mostram o conteúdo do arquivo de configuração para cada tipo de tabela. Modifique os parâmetros conforme as suas necessidades.
Exporte dados de uma tabela de dados
Para obter informações sobre o schema da tabela de dados de origem chamada
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" } } } ] } }Exporte dados de uma tabela de séries temporais
Para obter informações sobre o schema da tabela de séries temporais de origem chamada
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" } } } ] } }-
A tabela a seguir descreve os parâmetros do Tablestore Reader que você deve modificar.
Parâmetro
Aplica-se a
Descrição
channel
Ambos
A quantidade de threads paralelas de leitura e gravação. Cada channel é uma thread independente. Aumentar esse valor eleva a simultaneidade e o consumo de recursos.
endpoint
Ambos
O endpoint da instância do Tablestore. Se você acessar o Tablestore a partir de uma instância do ECS, use um endpoint de VPC para evitar taxas de tráfego de saída e melhorar o desempenho e a segurança.
accessId
Ambos
O AccessKey ID da sua conta Alibaba Cloud ou do usuário RAM.
accessKey
Ambos
O AccessKey secret da sua conta Alibaba Cloud ou do usuário RAM.
instanceName
Ambos
O nome da instância do Tablestore.
tableName
Ambos
O nome da tabela de origem no Tablestore.
column
Ambos
O array de colunas a serem exportadas.
range
Tabela de dados
O intervalo de chave primária a ser lido. Os arrays
begineendespecificam um valor para cada coluna de chave primária. O intervalo é fechado à esquerda e aberto à direita. UseINF_MIN(infinito negativo) eINF_MAX(infinito positivo) para ler a tabela inteira. A quantidade de colunas em um ponto virtual deve ser igual à de uma chave primária. Este parâmetro é opcional; o padrão lê a partir do infinito negativo.measurementName
Tabela de séries temporais
O nome da métrica da série temporal a ser lida. Caso não seja definido, a leitura incluirá todos os dados da tabela.
timeRange
Tabela de séries temporais
O intervalo de timestamp a ser lido, em milissegundos. O intervalo é fechado à esquerda e aberto à direita. Este parâmetro é opcional; o padrão lê todas as versões.
-
A tabela a seguir descreve os parâmetros do TxtFileWriter que você deve modificar.
Parâmetro
Descrição
path
O diretório local para salvar o arquivo exportado.
fileName
O nome base do arquivo exportado, incluindo a extensão. Exemplo:
output.csv.writeMode
Como o TxtFileWriter lida com arquivos existentes antes da gravação. Valores válidos:
-
truncate: exclui todos os arquivos com o prefixo do valor defileNameno diretório de destino antes da gravação. -
append: grava diretamente no arquivo sem pré-processamento, garantindo que não haja conflitos de nome de arquivo. -
nonConflict: relata um erro e aborta a operação se já existir um arquivo com o prefixo do valor defileNameno diretório.
fileFormat
O formato do arquivo de saída. Valores válidos:
csvetext. -
-
Etapa 4: Execute o job do DataX
-
Execute o job de exportação.
python3 datax.py tablestore_to_csv.jsonApós a conclusão do job, o sistema imprime um resumo:
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 -
Verifique o resultado da exportação.
Acesse o diretório de saída (por exemplo,
/tmp/export/) para confirmar o arquivo exportado. O nome do arquivo inclui um sufixo aleatório:output.csv__d737aec2_c9e3_4489_a5d7_361f44c998cePara visualizar o conteúdo do arquivo, execute:
head -5 output.csv__d737aec2_c9e3_4489_a5d7_361f44c998ceA saída é semelhante a:
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:00Remova o sufixo para obter um nome de arquivo CSV padrão:
mv output.csv__d737aec2_c9e3_4489_a5d7_361f44c998ce output.csvNotaO DataX adiciona um sufixo aleatório para distinguir os arquivos gravados por threads paralelas. Remova o sufixo para obter um nome de arquivo CSV padrão.
Apêndice: Tabelas de origem de exemplo
Apêndice 1: Tabela de dados
O nome da tabela de dados de exemplo é orders. A tabela a seguir descreve o schema da tabela de dados.
|
Nome do campo |
Tipo |
Descrição |
|
order_id (coluna de chave primária) |
String |
O ID do pedido. |
|
user_id |
String |
O ID do usuário. |
|
sku_id |
String |
O ID do product. |
|
price |
Double |
O preço unitário dos products comprados. |
|
num |
Integer |
A quantidade de products comprados. |
|
total_price |
Double |
O valor total do pedido. |
|
order_status |
String |
O status do pedido. |
|
create_time |
String |
A data e a hora de criação do pedido. |
|
modified_time |
String |
A data e a hora da última modificação do pedido. |
Apêndice 2: Tabela de séries temporais
O nome da tabela de séries temporais de exemplo é vehicles_timeseriesdata. A tabela a seguir descreve o schema da tabela de séries temporais.
|
Nome do campo |
Tipo |
Descrição |
|
_m_name |
String |
O nome da grandeza física ou métrica dos dados na série temporal. |
|
_data_source |
String |
O identificador da fonte de dados da série temporal. Este campo pode ficar em branco. |
|
_tags |
String |
As tags da série temporal. |
|
_time |
Integer |
O momento em que os dados são relatados. |
|
vin_id |
String |
O número de identificação do veículo (VIN). |
|
mfrs |
String |
O fabricante. |
|
model |
String |
O modelo do veículo. |
|
speed |
Double |
A velocidade atual do veículo. |
|
gps |
String |
As coordenadas de GPS do veículo no formato |
|
mileage |
Double |
A quilometragem atual do veículo. |
|
emission |
Double |
O valor de emissão. |