Deskripsi masalah
Saat menggunakan Tablestore SDK for Java untuk menulis data ke tabel data, muncul kesalahan berikut:
Jumlah kolom atribut melebihi maksimum:128Penyebab
Ketika menggunakan kelas alat TableStoreWriter untuk menulis data, jumlah maksimum kolom atribut yang dapat ditulis secara default adalah 128.
Solusi
Saat menggunakan Tablestore SDK for Java untuk menginisialisasi TableStoreWriter, Anda dapat memodifikasi parameter MaxColumnsCount untuk meningkatkan jumlah maksimum kolom atribut yang dapat ditulis. Nilai maksimum untuk parameter ini adalah 1.024, yang memungkinkan Anda menulis hingga 1.024 kolom atribut menggunakan TableStoreWriter.
Sebelum menjalankan kode, konfigurasikan pasangan AccessKey akun Alibaba Cloud atau pengguna RAM Anda melalui variabel lingkungan. Untuk informasi lebih lanjut, lihat Konfigurasi Kredensial Akses.
// Tentukan nama instance.
final String instanceName = "yourInstanceName";
// Tentukan titik akhir instance.
final String endPoint = "yourEndpoint";
// Dapatkan ID AccessKey dan rahasia AccessKey dari variabel lingkungan.
String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
ClientConfiguration cc = new ClientConfiguration();
cc.setRetryStrategy(new DefaultRetryStrategy()); // Tentukan kebijakan ulang kustom. Untuk memastikan tingkat keberhasilan yang tinggi, Anda dapat menggunakan kebijakan ulang yang lebih agresif.
AsyncClient asyncClient = new AsyncClient(endPoint, accessKeyId, accessKeySecret, instanceName, cc);
// Inisialisasi TableStoreWriter.
WriterConfig config = new WriterConfig();
config.setMaxBatchSize(4 * 1024 * 1024); // Tentukan ukuran maksimum permintaan impor batch. Secara default, ukuran maksimum permintaan impor batch adalah 4 MB.
config.setMaxColumnsCount(128); // Tentukan jumlah maksimum kolom yang dapat ditulis ke baris. Nilai default: 128.
config.setBufferSize(1024); // Tentukan jumlah maksimum baris data yang dapat di-buffer dalam memori. Nilai default: 1024. Nilai parameter ini harus merupakan kelipatan eksponen dari 2.
config.setMaxBatchRowsCount(100); // Tentukan jumlah maksimum baris yang dapat diimpor secara bersamaan. Nilai default: 100.
config.setConcurrency(10); // Tentukan jumlah maksimum permintaan paralel yang digunakan TableStoreWriter untuk menulis data dalam buffer ke Tablestore. Nilai default: 10.
config.setMaxAttrColumnSize(2 * 1024 * 1024); // Tentukan ukuran maksimum nilai kolom atribut. Secara default, ukuran maksimum nilai kolom atribut adalah 2 MB.
config.setMaxPKColumnSize(1024); // Tentukan ukuran maksimum nilai kolom kunci utama. Secara default, ukuran maksimum nilai kolom kunci utama adalah 1 KB.
config.setFlushInterval(10000); // Tentukan interval waktu operasi flush dipicu dalam buffer. Nilai default: 10. Unit: detik.
// Konfigurasikan callback. OTSWriter menggunakan callback ini untuk melaporkan baris yang berhasil diimpor atau gagal diimpor. Callback ini menghitung jumlah baris yang berhasil diimpor dan jumlah baris yang gagal diimpor.
AtomicLong succeedCount = new AtomicLong();
AtomicLong failedCount = new AtomicLong();
TableStoreCallback<RowChange, ConsumedCapacity> callback = new SampleCallback(succeedCount, failedCount);
ExecutorService executor = Executors.newFixedThreadPool(2);
TableStoreWriter tablestoreWriter = new DefaultTableStoreWriter(asyncClient, tableName, config, callback, executor);Untuk informasi lebih lanjut tentang TableStoreWriter, lihat Gunakan TableStoreWriter untuk Menulis Data Secara Bersamaan.