All Products
Search
Document Center

AnalyticDB:Gunakan tabel eksternal OSS untuk mengekspor data ke OSS dengan kecepatan tinggi

Last Updated:Mar 29, 2026

AnalyticDB for PostgreSQL memungkinkan Anda mengekspor data ke Object Storage Service (OSS) secara paralel menggunakan fitur tabel eksternal OSS (gpossext). Fitur ini mendukung format TEXT dan CSV, serta opsional kompresi GZIP untuk mengurangi ukuran file dan biaya penyimpanan.

Catatan

Fitur ini berlaku untuk instans AnalyticDB for PostgreSQL V6.0. Untuk V7.0, lihat Gunakan tabel eksternal OSS untuk mengimpor dan mengekspor data.

Cara kerja

OSS

Setiap node komputasi mengekspor data langsung ke OSS secara paralel tanpa redistribusi data antar node. Proses ekspor mengikuti tiga langkah: instal ekstensi oss_ext sekali per database, buat tabel eksternal yang dapat ditulis, lalu jalankan pernyataan INSERT INTO ... SELECT.

Prasyarat

Sebelum memulai, pastikan Anda memiliki:

  • Instans AnalyticDB for PostgreSQL V6.0

  • Bucket OSS di wilayah yang sama dengan instans Anda

  • ID AccessKey dan Rahasia AccessKey dengan akses tulis ke bucket tersebut. Untuk membuat pasangan Kunci Akses, lihat Buat pasangan Kunci Akses.

Penting

Tempatkan bucket OSS dan instans AnalyticDB for PostgreSQL di wilayah yang sama untuk memaksimalkan throughput dan menghindari biaya transfer lintas wilayah.

Siapkan ekstensi

Jalankan pernyataan berikut sekali per database untuk menginstal ekstensi oss_ext sebelum mengekspor data:

CREATE EXTENSION IF NOT EXISTS oss_ext;

Perintah ini hanya perlu dijalankan sekali per database—tidak perlu diulang sebelum setiap ekspor.

Mengekspor data ke OSS

Langkah 1: Buat tabel eksternal yang dapat ditulis

CREATE WRITABLE EXTERNAL TABLE table_name
    ( column_name data_type [, ...] | LIKE other_table )
    LOCATION ('ossprotocol')
    FORMAT 'TEXT'
               [( [DELIMITER [AS] 'delimiter']
               [NULL [AS] 'null string']
               [ESCAPE [AS] 'escape' | 'OFF'] )]
          | 'CSV'
               [([QUOTE [AS] 'quote']
               [DELIMITER [AS] 'delimiter']
               [NULL [AS] 'null string']
               [FORCE QUOTE column [, ...]] ]
               [ESCAPE [AS] 'escape'] )]
    [ ENCODING 'encoding' ]
    [ DISTRIBUTED BY (column, [ ... ] ) | DISTRIBUTED RANDOMLY ]

ossprotocol:
    oss://oss_endpoint [prefix=prefix_name|dir=[folder/[folder/]...]/file_name]
     id=userossid key=userosskey bucket=ossbucket compressiontype=[none|gzip] async=[true|false]

Kata kunci WRITABLE wajib digunakan karena mendefinisikan tabel eksternal sebagai hanya-tulis untuk ekspor data.

Parameter koneksi dan path

ParameterDeskripsi
oss://oss_endpointTitik akhir OSS dalam format oss://oss_endpoint. Contoh: oss://oss-cn-hangzhou.aliyuncs.com. Jika diakses dari server Alibaba Cloud, gunakan titik akhir internal (mengandung kata kunci internal) untuk menghindari lalu lintas internet.
idID AccessKey Anda.
keyRahasia AccessKey Anda.
bucketBucket OSS tujuan. Buat bucket tersebut sebelum menjalankan ekspor.
prefixAwalan path untuk file yang diekspor. Ekspresi reguler tidak didukung. File yang diekspor menggunakan awalan ini sebagai awalan nama file. Misalnya, menetapkan prefix=osstest/exp/outfromhdb akan menulis file ke path osstest/exp/ dengan nama file yang diawali outfromhdb. Saling eksklusif dengan dir.
dirDirektori OSS tujuan. Path harus diakhiri dengan /, misalnya, test/mydir/. File yang diekspor diberi nama dalam format filename.x, di mana x adalah angka (nilai mungkin tidak berurutan). Saling eksklusif dengan prefix.

Parameter format

ParameterDeskripsi
FORMATFormat file. Nilai yang didukung: TEXT dan CSV.
ENCODINGPengkodean karakter untuk konten file, seperti UTF-8.
DISTRIBUTED BYKunci distribusi yang menentukan node komputasi mana yang menulis setiap baris.

Karakter kontrol default

Semua karakter kontrol harus berupa karakter satu byte.

Karakter kontrolTEXTCSV
DELIMITER\t (tab), (koma)
QUOTE" (tanda kutip ganda)" (tanda kutip ganda)
ESCAPETidak tersedia" (tanda kutip ganda)
NULL\NString kosong tanpa tanda kutip

Aturan untuk parameter format:

  • Jika Anda menentukan DELIMITER, Anda juga harus menentukan QUOTE.

  • QUOTE dan DELIMITER tidak boleh merupakan karakter yang sama.

  • Jika data pengguna berisi karakter QUOTE, sertakan karakter ESCAPE untuk membedakan data pengguna dari karakter kontrol.

Parameter kinerja dan kompresi

ParameterDefaultNilai validDeskripsi
compressiontypenonenone, gzipFormat kompresi untuk file yang diekspor. Hanya GZIP yang didukung.
num_parallel_worker31–8Jumlah thread kompresi paralel per segmen.
oss_flush_block_size32 MB1–128 MBUkuran setiap blok data yang ditulis ke OSS.
oss_file_max_size1024 MB8–4000 MBUkuran file maksimum. Ketika file mencapai batas ini, data selanjutnya ditulis ke file baru.
oss_connect_timeout10 dtkTimeout koneksi.
oss_dns_cache_timeout60 dtkTimeout untuk resolusi DNS.
oss_speed_limit1024 byte/dtkLaju transfer minimum yang dapat diterima. Harus dikonfigurasi bersama dengan oss_speed_time.
oss_speed_time15 dtkDurasi maksimum laju transfer boleh berada di bawah oss_speed_limit sebelum timeout dipicu. Harus dikonfigurasi bersama dengan oss_speed_limit.
Catatan

Dengan nilai default, timeout terjadi jika laju transfer berada di bawah 1 KB/dtk selama 15 detik berturut-turut. Untuk informasi lebih lanjut, lihat Penanganan kesalahan.

Langkah 2: Jalankan ekspor

INSERT INTO <external_table> SELECT * FROM <source_table>;

Setiap node komputasi mengekspor data lokalnya langsung ke OSS tanpa redistribusi data antar node.

Contoh

Contoh ini mengekspor data dari tabel lokal bernama example ke bucket OSS.

1. Buat tabel sumber:

CREATE TABLE example
    (date text, time text, open float,
     high float, low float, volume int)
    DISTRIBUTED BY (date);

2. Buat tabel eksternal yang dapat ditulis.

Menggunakan prefix untuk menentukan path output:

CREATE WRITABLE EXTERNAL TABLE ossexample_exp
    (date text, time text, open float, high float,
     low float, volume int)
    LOCATION ('oss://oss-cn-hangzhou.aliyuncs.com
    prefix=osstest/exp/outfromhdb id=<your-access-key-id>
    key=<your-access-key-secret> bucket=testbucket')
    FORMAT 'csv'
    DISTRIBUTED BY (date);

Menggunakan dir untuk menentukan path output:

CREATE WRITABLE EXTERNAL TABLE ossexample_exp
    (date text, time text, open float, high float,
     low float, volume int)
    LOCATION ('oss://oss-cn-hangzhou.aliyuncs.com
    dir=osstest/exp/ id=<your-access-key-id>
    key=<your-access-key-secret> bucket=testbucket')
    FORMAT 'csv'
    DISTRIBUTED BY (date);

Ganti placeholder dengan nilai aktual Anda:

PlaceholderDeskripsi
<your-access-key-id>ID AccessKey Anda
<your-access-key-secret>Rahasia AccessKey Anda

3. Ekspor data:

INSERT INTO ossexample_exp SELECT * FROM example;

4. Verifikasi ekspor:

Jalankan EXPLAIN untuk memastikan bahwa setiap node komputasi mengekspor data langsung ke OSS:

EXPLAIN INSERT INTO ossexample_exp SELECT * FROM example;

Output yang diharapkan:

                          QUERY PLAN
---------------------------------------------------------------
 Insert (slice0; segments: 3)  (rows=1 width=92)
   ->  Seq Scan on example  (cost=0.00..0.00 rows=1 width=92)
(2 rows)

segments: 3 menunjukkan bahwa ketiga node komputasi mengekspor data secara paralel. Setelah ekspor selesai, verifikasi bahwa file muncul di Konsol OSS pada path yang ditentukan.

Pertimbangan kinerja

Untuk memaksimalkan throughput ekspor:

  • Gunakan penyimpanan berorientasi kolom dengan kompresi saat membuat tabel sumber. Contohnya:

    WITH (APPENDONLY=true, ORIENTATION=column, COMPRESSTYPE=zlib, COMPRESSLEVEL=5, BLOCKSIZE=1048576)

    Untuk informasi lebih lanjut, lihat CREATE TABLE.

  • Simpan bucket OSS dan instans AnalyticDB for PostgreSQL di wilayah yang sama.

  • Sesuaikan num_parallel_worker, oss_flush_block_size, dan oss_file_max_size berdasarkan volume data dan kondisi jaringan Anda.

Batasan

  • Hanya instans V6.0 yang didukung. Untuk V7.0, gunakan tabel eksternal OSS.

  • Hanya format TEXT dan CSV yang didukung.

  • Hanya kompresi GZIP yang didukung (compressiontype=gzip).

  • prefix dan dir saling eksklusif—tentukan hanya salah satu per tabel eksternal.

  • Ekspresi reguler tidak didukung dalam prefix.

  • Semua karakter kontrol format (DELIMITER, QUOTE, ESCAPE, NULL) harus berupa karakter satu byte.

  • Sintaks tabel eksternal mengikuti konvensi Greenplum Database, kecuali untuk parameter yang terkait lokasi.

Pemecahan masalah

Saat terjadi kesalahan ekspor, log kesalahan mencakup:

FieldDeskripsi
codeKode status HTTP dari permintaan yang gagal.
error_codeKode kesalahan yang dikembalikan oleh OSS.
error_msgPesan kesalahan yang dikembalikan oleh OSS.
req_idUUID dari permintaan yang gagal. Berikan ini kepada dukungan teknis OSS jika masalah berlanjut.

Untuk daftar lengkap kode kesalahan, lihat Tanggapan kesalahan. Untuk memperbaiki kesalahan terkait timeout, sesuaikan parameter oss_speed_limit dan oss_speed_time.Tanggapan kesalahan API OSSTanggapan kesalahan API OSS

Lihat juga