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.
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

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.
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
| Parameter | Deskripsi |
|---|---|
oss://oss_endpoint | Titik 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. |
id | ID AccessKey Anda. |
key | Rahasia AccessKey Anda. |
bucket | Bucket OSS tujuan. Buat bucket tersebut sebelum menjalankan ekspor. |
prefix | Awalan 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. |
dir | Direktori 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
| Parameter | Deskripsi |
|---|---|
FORMAT | Format file. Nilai yang didukung: TEXT dan CSV. |
ENCODING | Pengkodean karakter untuk konten file, seperti UTF-8. |
DISTRIBUTED BY | Kunci distribusi yang menentukan node komputasi mana yang menulis setiap baris. |
Karakter kontrol default
Semua karakter kontrol harus berupa karakter satu byte.
| Karakter kontrol | TEXT | CSV |
|---|---|---|
| DELIMITER | \t (tab) | , (koma) |
| QUOTE | " (tanda kutip ganda) | " (tanda kutip ganda) |
| ESCAPE | Tidak tersedia | " (tanda kutip ganda) |
| NULL | \N | String kosong tanpa tanda kutip |
Aturan untuk parameter format:
Jika Anda menentukan
DELIMITER, Anda juga harus menentukanQUOTE.QUOTEdanDELIMITERtidak boleh merupakan karakter yang sama.Jika data pengguna berisi karakter
QUOTE, sertakan karakterESCAPEuntuk membedakan data pengguna dari karakter kontrol.
Parameter kinerja dan kompresi
| Parameter | Default | Nilai valid | Deskripsi |
|---|---|---|---|
compressiontype | none | none, gzip | Format kompresi untuk file yang diekspor. Hanya GZIP yang didukung. |
num_parallel_worker | 3 | 1–8 | Jumlah thread kompresi paralel per segmen. |
oss_flush_block_size | 32 MB | 1–128 MB | Ukuran setiap blok data yang ditulis ke OSS. |
oss_file_max_size | 1024 MB | 8–4000 MB | Ukuran file maksimum. Ketika file mencapai batas ini, data selanjutnya ditulis ke file baru. |
oss_connect_timeout | 10 dtk | — | Timeout koneksi. |
oss_dns_cache_timeout | 60 dtk | — | Timeout untuk resolusi DNS. |
oss_speed_limit | 1024 byte/dtk | — | Laju transfer minimum yang dapat diterima. Harus dikonfigurasi bersama dengan oss_speed_time. |
oss_speed_time | 15 dtk | — | Durasi maksimum laju transfer boleh berada di bawah oss_speed_limit sebelum timeout dipicu. Harus dikonfigurasi bersama dengan oss_speed_limit. |
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:
| Placeholder | Deskripsi |
|---|---|
<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, danoss_file_max_sizeberdasarkan 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).prefixdandirsaling 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:
| Field | Deskripsi |
|---|---|
code | Kode status HTTP dari permintaan yang gagal. |
error_code | Kode kesalahan yang dikembalikan oleh OSS. |
error_msg | Pesan kesalahan yang dikembalikan oleh OSS. |
req_id | UUID 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