Topik ini menjelaskan cara menggunakan fitur OSSOUTFILE dari PolarDB untuk mengekspor tabel database ke dalam file CSV di Bucket Object Storage Service (OSS).
Prasyarat
Kluster PolarDB Anda harus menjalankan salah satu versi mesin database berikut:
PolarDB for MySQL 8.0.1 dengan versi revisi 8.0.1.1.30 atau yang lebih baru.
PolarDB for MySQL 8.0.2 dengan versi revisi 8.0.2.2.8 atau yang lebih baru.
Untuk informasi tentang cara memeriksa versi mesin kluster PolarDB, lihat Memeriksa versi mesin.
Peringatan
Anda tidak dapat mengakses kluster PolarDB menggunakan Data Management (DMS) untuk mengekspor file data ke OSS. Jika tidak, pesan kesalahan berikut akan muncul:
Can not issue executeUpdate() or executeLargeUpdate() for SELECTsAnda dapat mengakses kluster PolarDB menggunakan client atau MySQL command-line client MySQL untuk mengekspor file data ke OSS. Untuk informasi lebih lanjut, lihat Hubungkan ke kluster.
Jika Anda ingin melakukan pencadangan tambahan data ke OSS, Anda dapat membuat dan mengonfigurasi jadwal cadangan. Untuk informasi lebih lanjut, lihat Buat jadwal cadangan dan Konfigurasikan jadwal cadangan.
Disarankan untuk menjalankan tugas ekspor pada node baca-saja. Anda dapat menggunakan petunjuk
/*FORCE_SALVE*/dalam pernyataan SQL atau langsung terhubung ke node baca-saja untuk mengekspor data.
Parameter
Parameter | Deskripsi |
loose_oss_outfile_buffer_size | Ukuran memori maksimum yang diizinkan untuk setiap thread OSSOUTFILE. Nilai valid: 102400 hingga 536870912. Nilai default: 134217728. Unit: byte. Semakin besar ukuran memori, semakin cepat ekspornya. |
loose_max_oss_outfile_threads | Jumlah maksimum thread OSSOUTFILE yang dapat dimulai secara bersamaan di PolarDB. Nilai valid: 1 hingga 100. Nilai default: 1. Anda dapat menjalankan pernyataan Catatan Parameter ini tidak berlaku untuk PolarDB for MySQL 8.0.1.1.38 atau yang lebih baru. |
Anda dapat menghitung total memori maksimum yang digunakan oleh fitur OSSOUTFILE menggunakan rumus berikut:
loose_max_oss_outfile_threads * loose_oss_outfile_buffer_sizeTotal memori yang digunakan oleh fitur OSSOUTFILE tidak boleh melebihi 5% dari memori node. Jika tidak, layanan lain di node saat ini mungkin terpengaruh.
Catatan penggunaan
Syntax
SELECT * FROM table_name INTO OSSOUTFILE 'outfile_path' COLUMNS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' NULL_MARKER BY 'NULL' LINES TERMINATED BY '\n';COLUMNS TERMINATED BY: pemisah antara bidang.OPTIONALLY ENCLOSED BY: pengenal di kedua ujung bidang. Setelah OPTIONALLY ditambahkan, pengenal hanya ditambahkan ke kedua ujung bidang bertipe string. Jika tidak, pengenal ditambahkan ke kedua ujung semua jenis bidang.NULL_MARKER BY: menentukan bagaimana nilai NULL dalam tabel database direpresentasikan dalam file teks yang diekspor. Nilai NULL dapat direpresentasikan dalam file data yang diekspor menggunakan metode berikut (dari prioritas tertinggi hingga terendah):NULL_MARKER: secara langsung mendefinisikan representasi keluaran nilai NULL dalam file teks yang diekspor.
NULL_MARKERmemungkinkan Anda menggunakan string arbitrer apa pun sebagai representasi nilai NULL. Metode ini memiliki prioritas tertinggi.ESCAPED BY: menentukan karakter escape tunggal yang mengawali karakter N untuk merepresentasikan nilai NULL. Misalnya, jika Anda menentukan
ESCAPED BY '\', nilai NULL direpresentasikan sebagai \N dalam file data yang diekspor.NULL (default): Jika Anda tidak menggunakan salah satu metode sebelumnya, nilai NULL direpresentasikan menggunakan string "NULL". Metode ini memiliki prioritas terendah. NULL tidak memiliki pengenal
ENCLOSEDdi kedua ujungnya.
LINES TERMINATED BY: pemisah antar baris.
Untuk informasi lebih lanjut, lihat Dokumentasi MySQL.
Parameters
Parameter | Deskripsi |
outfile_path | Path di bucket OSS yang menyimpan file data yang diekspor. Ini mencakup bagian-bagian berikut:
Bagian-bagian dipisahkan dengan garis miring ( |
table_name | Nama tabel database dari mana Anda ingin mengekspor data ke OSS. |
Prosedur
Buat server OSS
CREATE SERVER outserver FOREIGN DATA WRAPPER oss OPTIONS ( EXTRA_SERVER_INFO '{"oss_endpoint": "oss-cn-zhangjiakou-internal.aliyuncs.com", "oss_bucket": "polardb", "oss_access_key_id": "*******", "oss_access_key_secret": "********", "oss_prefix":"B_outfile"}'); Dalam contoh ini, pernyataan di atas digunakan untuk membuat server OSS untuk kluster versi terbaru. Dalam operasi aktual, modifikasi pernyataan berdasarkan versi mesin kluster Anda.
Atur parameter
oss_endpointke titik akhir internal dalam formatoss-{xxx}-internal.aliyuncs.com.
Ekspor data ke OSS
Sebagai contoh, Anda dapat menjalankan pernyataan berikut untuk mengekspor data ke oss://polardb/B_outfile/tpch/1t/parallel-lineitem.CSV.
polardb adalah nama bucket.
B_outfile/tpch/1t/parallel-lineitem.CSVadalah path file dan nama.
SELECT * FROM lineitem INTO OSSOUTFILE 'outserver/tpch/1t/parallel-lineitem.CSV' COLUMNS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' NULL_MARKER BY 'NULL' LINES TERMINATED BY '\n';Monitor penggunaan sumber daya tugas ekspor data
Jika kluster Anda menjalankan PolarDB for MySQL 8.0.1.1.38 atau yang lebih baru, Anda dapat menjalankan pernyataan berikut untuk melihat ukuran memori total dan jumlah total thread yang digunakan oleh tugas ekspor saat ini secara real-time:
polardb adalah nama bucket
SHOW STATUS LIKE "%Oss_outfile_memory_used%";Lihat ukuran memori total (dalam byte) yang digunakan oleh tugas ekspor secara real-time.
SHOW STATUS LIKE "%Oss_outfile_threads_running%";
Jika Anda menjalankan tugas ekspor pada node menggunakan cluster endpoint, Anda hanya dapat memeriksa informasi tentang sumber daya memori yang digunakan oleh tugas tersebut jika Anda menjalankan pernyataan SHOW STATUS dan ekspor pada node yang sama.