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 tabelas de séries temporais no 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, incluindo MySQL, Oracle, HDFS, Hive e Tablestore.
Antes de começar, observe os seguintes pontos:
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 pela Internet e melhorar o desempenho da rede.
Pré-requisitos
Obtenha o endpoint e o nome da instância do Tablestore, além das informações da tabela de origem no Tablestore.
-
Crie um par de AccessKey para sua conta Alibaba Cloud ou para um usuário do Resource Access Management (RAM). Para mais informações, consulte Criar um AccessKey.
ImportantePor motivos de segurança, use o Tablestore como um usuário RAM. Crie um usuário RAM, anexe a política
AliyunOTSFullAccessa ele e crie um par de AccessKey para esse usuário. Para mais informações, consulte Acessar o Tablestore com o par de AccessKey de um usuário RAM.
Procedimento
Os exemplos neste tópico usam instâncias ECS executando Alibaba Cloud Linux 3.2104 LTS 64 bits ou Ubuntu 22.04 64 bits. Para mais informações, consulte O que é o ECS?
Etapa 1: Instalar dependências
-
Instale o Python 2 ou Python 3.
O Python 3 vem pré-instalado em instâncias ECS com Alibaba Cloud Linux ou Ubuntu. Para outros sistemas operacionais, instale o Python manualmente.
-
Instale o JDK 1.8 ou superior. Recomenda-se o JDK 1.8.
Os comandos abaixo instalam o JDK 1.8 no Alibaba Cloud Linux ou Ubuntu. Em 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: Baixar 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: Criar 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 necessário.
Exportar dados de uma tabela de dados
Para informações sobre o esquema da tabela de dados de origem chamada
orders, consulte Apêndice 1: Tabela de dados .{ "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" } } } ] } }Exportar dados de uma tabela de séries temporais
Para informações sobre o esquema da tabela de séries temporais de origem chamada
vehicles_timeseriesdata, consulte Apêndice 2: Tabela de séries temporais .{ "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
Número de threads paralelas de leitura/gravação. Cada canal representa uma thread independente. Aumentar este valor eleva a concorrência e o consumo de recursos.
endpoint
Ambos
O endpoint da instância do Tablestore. Ao acessar o Tablestore a partir de uma instância ECS, use um endpoint de VPC para evitar taxas de tráfego de saída, além de 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 corresponder à da 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. Se não for definido, todos os dados da tabela serão lidos.
timeRange
Tabela de séries temporais
O intervalo de timestamp a ser lido, em milissegundos. O intervalo é fechado à esquerda e aberto à direita. Parâmetro opcional; o padrão lê todas as versões.
-
A tabela a seguir detalha os parâmetros do TxtFileWriter que você deve modificar.
Parâmetro
Descrição
path
Diretório local onde o arquivo exportado será salvo.
fileName
Nome base do arquivo exportado, incluindo a extensão. Exemplo:
output.csv.writeMode
Define como o TxtFileWriter trata arquivos existentes antes da gravação. Valores válidos:
-
truncate: exclui todos os arquivos com o prefixo igual ao valor defileNameno diretório de destino antes de gravar. -
append: grava diretamente no arquivo sem pré-processamento, garantindo que não haja conflitos de nomes. -
nonConflict: reporta um erro e aborta a operação caso já exista um arquivo com o prefixo definido emfileNameno diretório.
fileFormat
Formato do arquivo de saída. Valores válidos:
csvetext. -
-
Etapa 4: Executar o job do DataX
-
Execute o job de exportação.
python3 datax.py tablestore_to_csv.jsonApós a conclusão do job, um resumo é exibido:
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.
Confirme o arquivo exportado verificando o diretório de saída (por exemplo,
/tmp/export/). O nome do arquivo inclui um sufixo aleatório:output.csv__d737aec2_c9e3_4489_a5d7_361f44c998cePara visualizar uma prévia do conteúdo do arquivo, execute:
head -5 output.csv__d737aec2_c9e3_4489_a5d7_361f44c998ceA saída será 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 diferenciar arquivos escritos por threads paralelas. Remova esse sufixo para obter um nome de arquivo CSV padrão.
Apêndice: Tabelas de origem de exemplo
Apêndice 1: Tabela de dados
A tabela de dados de exemplo chama-se orders. A tabela a seguir descreve o esquema dessa tabela de dados.
|
Nome do campo |
Tipo |
Descrição |
|
order_id (coluna de chave primária) |
String |
Identificador do pedido. |
|
user_id |
String |
Identificador do usuário. |
|
sku_id |
String |
Identificador do produto. |
|
price |
Double |
Preço unitário dos produtos adquiridos. |
|
num |
Integer |
Quantidade de produtos adquiridos. |
|
total_price |
Double |
Valor total do pedido. |
|
order_status |
String |
Status atual do pedido. |
|
create_time |
String |
Momento em que o pedido foi criado. |
|
modified_time |
String |
Data da última modificação do pedido. |
Apêndice 2: Tabela de séries temporais
A tabela de séries temporais de exemplo chama-se vehicles_timeseriesdata. A tabela a seguir apresenta o esquema desta tabela de séries temporais.
|
Nome do campo |
Tipo |
Descrição |
|
_m_name |
String |
Nome da grandeza física ou métrica dos dados na série temporal. |
|
_data_source |
String |
Identificador da fonte de dados da série temporal. Este campo pode ficar em branco. |
|
_tags |
String |
Tags associadas à série temporal. |
|
_time |
Integer |
Timestamp de quando o dado foi reportado. |
|
vin_id |
String |
Número de identificação do veículo (VIN). |
|
mfrs |
String |
Fabricante do veículo. |
|
model |
String |
Modelo do veículo. |
|
speed |
Double |
Velocidade atual do veículo. |
|
gps |
String |
Coordenadas GPS do veículo no formato |
|
mileage |
Double |
Quilometragem atual do veículo. |
|
emission |
Double |
Valor da emissão. |