全部产品
Search
文档中心

PolarDB:Ekspor tabel lokal secara serial ke OSS

更新时间:Jul 06, 2025

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 SELECTs

    Anda 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 SHOW STATUS LIKE "Oss_outfile_threads_running"; untuk melihat jumlah thread OSSOUTFILE yang sedang berjalan di kluster saat ini.

Catatan

Parameter ini tidak berlaku untuk PolarDB for MySQL 8.0.1.1.38 atau yang lebih baru.

Catatan

Anda dapat menghitung total memori maksimum yang digunakan oleh fitur OSSOUTFILE menggunakan rumus berikut:

loose_max_oss_outfile_threads * loose_oss_outfile_buffer_size

Total 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';
Catatan
  • 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_MARKER memungkinkan 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 ENCLOSED di 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:

  • Informasi server OSS, yang mencakup nama bucket OSS saat ini dan path dasar. Untuk informasi lebih lanjut, lihat Gunakan tabel asing OSS untuk mengakses data OSS.

  • (Opsional) Path tugas ekspor saat ini.

  • Nama file yang akan dibuat di bucket OSS.

Bagian-bagian dipisahkan dengan garis miring (/). Jika path tugas ekspor saat ini berisi beberapa garis miring (/), jalur multi-level digunakan. Setelah file diunggah ke OSS, path lengkapnya adalah: path server OSS + path tugas saat ini. Nama file data yang diekspor harus disertakan dalam outfile_path.

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"}');                 
Catatan
  • 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_endpoint ke titik akhir internal dalam format oss-{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.CSV adalah 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%";
Catatan

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.

Apa yang harus dilakukan selanjutnya

Pemecahan Masalah

Pesan kesalahan "ERROR 1086 (HY000): File 'xxxx' already exists" muncul ketika saya mengekspor data ke OSS.

Kesalahan ini terjadi karena file dengan nama yang sama dengan file yang ingin Anda unggah sudah ada di OSS. Anda dapat menggunakan salah satu solusi berikut untuk menyelesaikan masalah:

  • Hapus file yang ada secara manual dari OSS, lalu jalankan pernyataan SELECT ... INTO OSSOUTFILE ... lagi.

  • Gunakan petunjuk OSS_REPLACE_EXISTED_FILE() untuk memaksa menimpa file yang ada. Format:

    SELECT /*+ OSS_REPLACE_EXISTED_FILE() */ * FROM lineitem INTO OSSOUTFILE 'outserver/tpch/1t/parallel-lineitem.CSV' COLUMNS TERMINATED BY '|@|' OPTIONALLY ENCLOSED BY '"' NULL_MARKER BY "" LINES TERMINATED BY '\n';
    Catatan
    • Jika Anda menggunakan petunjuk hint ini, file yang ada di OSS akan dipaksa ditimpa. Jika fitur kontrol versi OSS dinonaktifkan, Anda tidak dapat memulihkan file yang tertimpa. Lanjutkan dengan hati-hati. Sebelum melakukan operasi ini, Anda dapat mengaktifkan fitur kontrol versi OSS.

    • Untuk menggunakan hints, kluster PolarDB Anda harus menjalankan salah satu versi mesin database berikut:

      • PolarDB for MySQL 8.0.1 dengan versi revisi 8.0.1.1.31 atau yang lebih baru.

      • PolarDB for MySQL 8.0.2 dengan versi revisi 8.0.2.2.9 atau yang lebih baru.

Pesan kesalahan "OSS error: error message: The bucket you access does not belong to you., error code: AccessDenied" muncul ketika saya mengekspor data ke OSS.

Kesalahan ini terjadi karena pengguna RAM atau pasangan AccessKey akun Alibaba Cloud Anda tidak memiliki izin pada bucket OSS. Periksa izin pasangan AccessKey Anda.