Topik ini menjelaskan cara menggunakan DataX untuk mengekspor data dari Tablestore ke file CSV lokal. Anda dapat mengekspor data dari tabel data dan tabel time series di Tablestore.
Latar Belakang
DataX adalah alat open-source untuk sinkronisasi data offline yang mendukung transfer data antar sumber data heterogen, termasuk MySQL, Oracle, HDFS, Hive, dan Tablestore.
Sebelum memulai, perhatikan hal berikut:
Nama file hasil ekspor: DataX menambahkan akhiran acak ke nama file CSV hasil ekspor (misalnya,
output.csv__d737aec2_c9e3_4489_a5d7_361f44c998ce). Hapus akhiran tersebut secara manual setelah ekspor untuk mendapatkan file CSV standar.Biaya jaringan: Jika Anda menjalankan DataX pada instance Elastic Compute Service (ECS), gunakan endpoint VPC untuk menghindari biaya lalu lintas Internet keluar dan meningkatkan kinerja jaringan.
Prasyarat
Endpoint dan nama instans Tablestore serta informasi tabel sumber di Tablestore telah diperoleh.
-
Pasangan AccessKey telah dibuat untuk Akun Alibaba Cloud atau pengguna Resource Access Management (RAM). Untuk informasi selengkapnya, lihat Buat pasangan kunci akses.
PentingDemi keamanan, akses Tablestore sebagai pengguna RAM. Buat pengguna RAM, sematkan kebijakan
AliyunOTSFullAccesske pengguna RAM tersebut, lalu buat pasangan AccessKey untuk pengguna RAM tersebut. Untuk informasi selengkapnya, lihat Gunakan pasangan AccessKey pengguna RAM untuk mengakses Tablestore.
Prosedur
Contoh dalam topik ini menggunakan instance ECS yang menjalankan Alibaba Cloud Linux 3.2104 LTS 64-bit atau Ubuntu 22.04 64-bit. Untuk informasi selengkapnya, lihat Apa itu ECS?
Langkah 1: Instal dependensi
-
Instal Python 2 atau Python 3.
Python 3 sudah pra-instal pada instance ECS yang menjalankan Alibaba Cloud Linux atau Ubuntu. Untuk sistem operasi lain, instal Python secara manual.
-
Instal JDK 1.8 atau versi yang lebih baru. JDK 1.8 direkomendasikan.
Perintah berikut menginstal JDK 1.8 pada Alibaba Cloud Linux atau Ubuntu. Untuk sistem operasi lain, instal JDK secara manual.
Alibaba Cloud Linux
yum -y install java-1.8.0-openjdk-devel.x86_64Ubuntu
apt update && apt upgrade apt install openjdk-8-jdk
Langkah 2: Unduh DataX
-
Unduh paket DataX.
wget https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202309/datax.tar.gz -
Ekstrak paket tersebut.
tar -zxvf datax.tar.gz
Untuk mengompilasi DataX dari kode sumber, lihat panduan instalasi DataX.
Langkah 3: Buat file konfigurasi
-
Masuk ke direktori
binDataX.cd datax/bin -
Buat file konfigurasi.
vi tablestore_to_csv.jsonContoh berikut menunjukkan isi file konfigurasi untuk masing-masing jenis tabel. Sesuaikan parameter sesuai kebutuhan Anda.
Ekspor data dari tabel data
Untuk informasi skema tabel data sumber bernama
orders, lihat Lampiran 1: Tabel data.{ "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" } } } ] } }Ekspor data dari tabel time series
Untuk informasi skema tabel time series sumber bernama
vehicles_timeseriesdata, lihat Lampiran 2: Tabel time series.{ "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" } } } ] } }-
Tabel berikut menjelaskan parameter Tablestore Reader yang perlu Anda sesuaikan.
Parameter
Berlaku untuk
Deskripsi
channel
Keduanya
Jumlah thread baca/tulis paralel. Setiap channel merupakan thread independen. Meningkatkan nilai ini akan meningkatkan konkurensi dan konsumsi resource.
endpoint
Keduanya
Titik akhir instans Tablestore. Jika Anda mengakses Tablestore dari instance ECS, gunakan endpoint VPC untuk menghindari biaya lalu lintas keluar serta meningkatkan kinerja dan keamanan.
accessId
Keduanya
ID AccessKey Akun Alibaba Cloud atau pengguna RAM Anda.
accessKey
Keduanya
Rahasia AccessKey Akun Alibaba Cloud atau pengguna RAM Anda.
instanceName
Keduanya
Nama instans Tablestore.
tableName
Keduanya
Nama tabel sumber di Tablestore.
column
Keduanya
Array kolom yang akan diekspor.
range
Tabel data
Rentang kunci primer yang akan dibaca. Array
begindanendmasing-masing menentukan satu nilai per kolom kunci primer. Rentang bersifat tertutup di kiri dan terbuka di kanan. GunakanINF_MIN(negatif tak hingga) danINF_MAX(positif tak hingga) untuk membaca seluruh tabel. Jumlah kolom pada titik virtual harus sama dengan jumlah kolom kunci primer. Parameter ini opsional; nilai default membaca dari negatif tak hingga.measurementName
Tabel time series
Nama metrik deret waktu yang akan dibaca. Jika tidak ditentukan, semua data dalam tabel akan dibaca.
timeRange
Tabel time series
Rentang waktu yang akan dibaca, dalam milidetik. Rentang bersifat tertutup di kiri dan terbuka di kanan. Parameter ini opsional; nilai default membaca semua versi.
-
Tabel berikut menjelaskan parameter TxtFileWriter yang perlu Anda sesuaikan.
Parameter
Deskripsi
path
Direktori lokal tempat file hasil ekspor disimpan.
fileName
Nama dasar file hasil ekspor, termasuk ekstensi. Contoh:
output.csv.writeMode
Cara TxtFileWriter menangani file yang sudah ada sebelum menulis. Nilai yang valid:
-
truncate: menghapus semua file yang diawali dengan nilaifileNamedi direktori target sebelum menulis. -
append: menulis langsung ke file tanpa pra-pemrosesan, memastikan tidak terjadi konflik nama file. -
nonConflict: melaporkan error dan membatalkan proses jika file yang diawali dengan nilaifileNamesudah ada di direktori.
fileFormat
Format file output. Nilai yang valid:
csvdantext. -
-
Langkah 4: Jalankan pekerjaan DataX
-
Jalankan pekerjaan ekspor.
python3 datax.py tablestore_to_csv.jsonSetelah pekerjaan selesai, ringkasan akan dicetak:
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 -
Verifikasi hasil ekspor.
Periksa direktori output (misalnya,
/tmp/export/) untuk memastikan keberadaan file hasil ekspor. Nama file mencakup akhiran acak:output.csv__d737aec2_c9e3_4489_a5d7_361f44c998ceUntuk melihat pratinjau isi file, jalankan:
head -5 output.csv__d737aec2_c9e3_4489_a5d7_361f44c998ceOutputnya mirip dengan:
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:00Hapus akhiran tersebut untuk mendapatkan nama file CSV standar:
mv output.csv__d737aec2_c9e3_4489_a5d7_361f44c998ce output.csvCatatanDataX menambahkan akhiran acak untuk membedakan file yang ditulis oleh thread paralel. Hapus akhiran tersebut untuk mendapatkan nama file CSV standar.
Lampiran: Tabel sumber sampel
Lampiran 1: Tabel data
Nama tabel data sampel adalah orders. Tabel berikut menjelaskan skema tabel data tersebut.
|
Nama bidang |
Tipe |
Deskripsi |
|
order_id (Kolom kunci primer) |
String |
ID pesanan. |
|
user_id |
String |
ID pengguna. |
|
sku_id |
String |
ID produk. |
|
price |
Double |
Harga satuan produk yang dibeli. |
|
num |
Integer |
Kuantitas produk yang dibeli. |
|
total_price |
Double |
Total harga pesanan. |
|
order_status |
String |
Status pesanan. |
|
create_time |
String |
Waktu saat pesanan dibuat. |
|
modified_time |
String |
Waktu saat pesanan terakhir dimodifikasi. |
Lampiran 2: Tabel time series
Nama tabel time series sampel adalah vehicles_timeseriesdata. Tabel berikut menjelaskan skema tabel time series tersebut.
|
Nama bidang |
Jenis |
Deskripsi |
|
_m_name |
String |
Nama besaran fisik atau metrik untuk data dalam deret waktu. |
|
_data_source |
String |
Identifikasi sumber data untuk deret waktu. Bidang ini dapat dikosongkan. |
|
_tags |
String |
Tag deret waktu. |
|
_time |
Integer |
Waktu saat data dilaporkan. |
|
vin_id |
String |
Nomor identifikasi kendaraan (VIN) kendaraan. |
|
mfrs |
String |
Pabrikan. |
|
model |
String |
Model kendaraan. |
|
speed |
Double |
Kecepatan kendaraan saat ini. |
|
gps |
String |
Koordinat GPS kendaraan dalam format |
|
mileage |
Double |
Kilometer kendaraan saat ini. |
|
emission |
Double |
Nilai emisi. |