全部产品
Search
文档中心

Tablestore:Gunakan SDK Tablestore untuk mengirimkan data Tablestore ke OSS

更新时间:Jul 06, 2025

Sebelum menggunakan SDK Tablestore untuk mengirimkan data, Anda perlu memahami catatan penggunaan dan operasi. Anda dapat membuat tugas pengiriman di konsol Tablestore untuk mengirimkan data dari tabel Tablestore ke Bucket OSS.

Catatan Penggunaan

  • Pengiriman data tersedia di wilayah China (Hangzhou), China (Shanghai), China (Beijing), China (Shenzhen), dan China (Zhangjiakou).

  • Operasi penghapusan pada data Tablestore diabaikan selama proses pengiriman. Data yang dikirimkan ke OSS tidak akan dihapus meskipun Anda melakukan operasi penghapusan pada data tersebut.

  • Diperlukan waktu maksimal satu menit untuk inisialisasi saat membuat tugas pengiriman.

  • Latensi berada dalam 3 menit ketika data ditulis dengan laju stabil. Latensi P99 berada dalam 10 menit ketika data disinkronkan.

    Catatan

    Latensi P99 menunjukkan latensi rata-rata dari 1% permintaan terlambat selama 10 detik sebelumnya.

Prasyarat

  • Operasi berikut dilakukan di konsol Object Storage Service (OSS):

    OSS telah diaktifkan. Sebuah bucket dibuat di wilayah tempat instance Tablestore berada. Untuk informasi lebih lanjut, lihat Aktifkan OSS.

    Catatan

    Pengiriman data memungkinkan Anda mengirimkan data dari instance Tablestore ke bucket OSS yang berada di wilayah yang sama dengan instance Tablestore. Untuk mengirimkan data ke gudang lain, seperti MaxCompute, submit a ticket.

  • Operasi berikut dilakukan di konsol Tablestore:

    • Endpoint instance Tablestore diperoleh dari tab Detail Instance pada halaman Manajemen Instance. Untuk informasi lebih lanjut, lihat Endpoints.

    • Sebuah tabel data dibuat. Untuk informasi lebih lanjut, lihat Operasi pada tabel data.

  • Operasi berikut dilakukan di konsol Resource Access Management (RAM):

    • Seorang pengguna RAM dibuat dan kebijakan AliyunOTSFullAccess dilampirkan ke pengguna RAM untuk memberikan izin kepada pengguna RAM mengelola Tablestore. Untuk informasi lebih lanjut, lihat Buat pengguna RAM dan Berikan izin kepada pengguna RAM.

      Peringatan

      Jika pasangan AccessKey akun Alibaba Cloud Anda bocor, sumber daya Anda terpapar pada risiko potensial. Kami merekomendasikan agar Anda menggunakan pasangan AccessKey pengguna RAM untuk melakukan operasi. Ini mencegah pasangan AccessKey akun Alibaba Cloud Anda dari kebocoran.

      Pasangan AccessKey dibuat untuk pengguna RAM. Untuk informasi lebih lanjut, lihat Buat pasangan AccessKey.

  • Kredensial akses dikonfigurasi. Untuk informasi lebih lanjut, lihat Konfigurasikan kredensial akses.

Operasi

Operasi

Deskripsi

CreateDeliveryTask

Membuat tugas pengiriman.

ListDeliveryTask

Menampilkan informasi tentang semua tugas pengiriman yang dibuat untuk tabel data.

DescribeDeliveryTask

Mengambil informasi deskriptif tentang tugas pengiriman.

DeleteDeliveryTask

Menghapus tugas pengiriman.

Parameter

Parameter

Deskripsi

tableName

Nama tabel data.

taskName

Nama tugas pengiriman.

Nama harus memiliki panjang 3 hingga 16 karakter dan hanya boleh berisi huruf kecil, angka, dan tanda hubung (-). Nama harus dimulai dan diakhiri dengan huruf kecil atau angka.

taskConfig

Konfigurasi tugas pengiriman, yang mencakup konten berikut:

  • ossPrefix: awalan direktori di bucket OSS. Data Tablestore dikirimkan ke direktori ini. Jalur direktori mendukung variabel waktu berikut: $yyyy, $MM, $dd, $HH, dan $mm.

    • Saat jalur menggunakan variabel waktu, direktori OSS dibuat secara dinamis berdasarkan waktu penulisan data. Dengan cara ini, data dipartisi berdasarkan gaya penamaan partisi hive. Objek di OSS diorganisasikan, dipartisi, dan didistribusikan berdasarkan waktu.

    • Saat jalur tidak menggunakan variabel waktu, semua file dikirimkan ke direktori OSS yang namanya berisi awalan yang ditentukan.

  • ossBucket: nama bucket OSS.

  • ossEndpoint: endpoint wilayah tempat bucket OSS berada.

  • ossStsRole: Nama Sumber Daya Alibaba Cloud (ARN) dari peran terkait layanan Tablestore.

  • format: format penyimpanan data yang dikirimkan. Nilai default: Parquet.

    Secara default, PLAIN digunakan untuk mengkodekan semua jenis data untuk pengiriman.

    Saat ini, hanya Parquet yang didukung. Anda tidak perlu menentukan parameter ini.

  • eventTimeColumn: kolom waktu kejadian. Parameter ini menentukan bahwa data dipartisi berdasarkan waktu data di kolom tersebut. Nilai parameter ini terdiri dari nama dan format (EventTimeFormat) kolom. Nilai valid untuk parameter EventTimeFormat: RFC822, RFC850, RFC1123, RFC3339, dan Unix. Tentukan format sesuai dengan kebutuhan Anda.

    Jika Anda tidak menentukan parameter eventTimeColumn, data dipartisi berdasarkan waktu penulisan data ke Tablestore.

  • parquetSchema: bidang yang ingin Anda kirimkan. Nilai parameter ini terdiri dari bidang sumber, bidang tujuan, dan tipe bidang tujuan. Anda harus menentukan parameter ini.

    Anda dapat menentukan nama bidang sumber dan tujuan serta urutan pengiriman bidang sumber dalam skema. Setelah data dikirimkan ke OSS, data didistribusikan berdasarkan urutan bidang dalam skema.

    Penting

    Tipe bidang sumber harus sesuai dengan tipe bidang tujuan. Jika tidak, bidang tersebut akan dibuang sebagai data kotor. Untuk informasi lebih lanjut, lihat Pemetaan tipe data.

taskType

Tipe tugas pengiriman. Nilai default: BASE_INC. Nilai valid:

  • INC: pengiriman data tambahan. Hanya data tambahan yang disinkronkan.

  • BASE: pengiriman data penuh. Semua data di tabel dipindai dan disinkronkan.

  • BASE_INC: pengiriman data diferensial. Setelah data penuh disinkronkan, Tablestore menyinkronkan data tambahan.

    Saat Tablestore menyinkronkan data tambahan, Anda dapat melihat waktu pengiriman data terakhir dan status saat ini dari tugas pengiriman.

Gunakan SDK Tablestore

Anda dapat menggunakan Tablestore SDK for Java dan Tablestore SDK for Go untuk mengirimkan data ke OSS. Dalam contoh ini, Tablestore SDK for Java digunakan.

Berikut adalah kode sampel yang menunjukkan cara membuat tugas pengiriman untuk tabel data:

// Komentar dalam bahasa Indonesia
import com.alicloud.openservices.tablestore.ClientException;
import com.alicloud.openservices.tablestore.SyncClient;
import com.alicloud.openservices.tablestore.TableStoreException;
import com.alicloud.openservices.tablestore.model.delivery.*;
public class DeliveryTask {

        public static void main(String[] args) {
            // Tentukan nama instance.
            final String instanceName = "yourInstanceName";
            // Tentukan endpoint instance.
            final String endPoint = "yourEndpoint";
            // Dapatkan ID AccessKey dan rahasia AccessKey dari variabel lingkungan.
            final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");            
            final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");

            SyncClient client = new SyncClient(endPoint, accessKeyId, accessKeySecret, instanceName);
            try {
                createDeliveryTask(client);
                System.out.println("end");
            } catch (TableStoreException e) {
                System.err.println("Operasi gagal. Detail:" + e.getMessage() + e.getErrorCode() + e.toString());
                System.err.println("ID Permintaan:" + e.getRequestId());
            } catch (ClientException e) {
                System.err.println("Permintaan gagal. Detail:" + e.getMessage());
            } finally {
                client.shutdown();
            }
        }

        private static void createDeliveryTask(SyncClient client){
            String tableName = "sampleTable";
            String taskName = "sampledeliverytask";
            OSSTaskConfig taskConfig = new OSSTaskConfig();
            taskConfig.setOssPrefix("sampledeliverytask/year=$yyyy/month=$MM");
            taskConfig.setOssBucket("datadeliverytest");
            taskConfig.setOssEndpoint("oss-cn-hangzhou.aliyuncs.com");
            taskConfig.setOssStsRole("acs:ram::17************45:role/aliyunserviceroleforotsdatadelivery");
            // Parameter eventColumn bersifat opsional. Jika Anda menentukan parameter ini, data dipartisi berdasarkan waktu data di kolom yang ditentukan oleh parameter ini. Jika Anda tidak menentukan parameter ini, data dipartisi berdasarkan waktu penulisan data ke Tablestore. 
            EventColumn eventColumn = new EventColumn("Col1", EventTimeFormat.RFC1123);
            taskConfig.setEventTimeColumn(eventColumn);
            taskConfig.addParquetSchema(new ParquetSchema("PK1", "PK1", DataType.UTF8));
            taskConfig.addParquetSchema(new ParquetSchema("PK2", "PK2", DataType.BOOL));
            taskConfig.addParquetSchema(new ParquetSchema("Col1", "Col1", DataType.UTF8));
            CreateDeliveryTaskRequest request = new CreateDeliveryTaskRequest();
            request.setTableName(tableName);
            request.setTaskName(taskName);
            request.setTaskConfig(taskConfig);
            request.setTaskType(DeliveryTaskType.BASE_INC);
            CreateDeliveryTaskResponse response = client.createDeliveryTask(request);
            System.out.println("resquestID: "+ response.getRequestId());
            System.out.println("traceID: " + response.getTraceId());
            System.out.println("create delivery task success");
        }
}