AnalyticDB for PostgreSQL memungkinkan Anda mengekspor data ke Object Storage Service (OSS) secara paralel menggunakan fitur tabel eksternal OSS (gpossext). AnalyticDB for PostgreSQL juga mendukung kompresi GZIP untuk tabel eksternal OSS guna mengurangi ukuran file dan biaya penyimpanan.
Ikhtisar gpossext
gpossext dapat membaca dan menulis data dari serta ke file TEXT dan CSV, baik yang dikompres dalam paket GZIP maupun tidak.
Gambar berikut menunjukkan arsitektur gpossext.

Format TEXT dan CSV
Parameter berikut menentukan format file yang dibaca dari atau ditulis ke OSS. Parameter ini dapat ditentukan dalam parameter DDL tabel eksternal.
\n: karakter yang digunakan sebagai pembatas baris atau jeda baris untuk file TEXT atau CSV.DELIMITER: pembatas kolom.
Jika Anda menentukan parameter DELIMITER, Anda juga harus menentukan parameter QUOTE.
Pembatas kolom yang direkomendasikan meliputi koma (
,), garis vertikal (|), dan karakter khusus seperti\t.
QUOTE: melingkupi setiap kolom data pengguna yang berisi karakter khusus.
String yang berisi karakter khusus harus dilampirkan dalam karakter QUOTE untuk membedakan data pengguna dari karakter kontrol.
Untuk meningkatkan efisiensi, disarankan agar data seperti bilangan bulat tidak dilingkupi dalam karakter QUOTE.
Karakter QUOTE tidak boleh sama dengan yang ditentukan oleh DELIMITER. Nilai default QUOTE adalah sepasang tanda kutip dua ("").
Data pengguna yang berisi karakter QUOTE juga harus berisi karakter ESCAPE untuk membedakan data pengguna dari kode mesin.
ESCAPE: karakter escape.
Tempatkan karakter escape sebelum karakter khusus yang perlu dihindari untuk menunjukkan bahwa itu bukan karakter khusus.
Nilai default ESCAPE sama dengan nilai QUOTE.
Anda juga dapat menggunakan karakter lain seperti backslash (
\) sebagai karakter ESCAPE, yang digunakan oleh MySQL.
Tabel 1. Karakter kontrol default untuk file TEXT dan CSV
Karakter kontrol | TEXT | CSV |
DELIMITER | \t (Tab) | , (Koma) |
QUOTE | " (Tanda kutip dua) | " (Tanda kutip dua) |
ESCAPE | N/A | " (Tanda kutip dua) |
NULL | \N (Backslash n) | String kosong tanpa tanda kutip |
Semua karakter kontrol harus berupa karakter single-byte.
Versi yang didukung
AnalyticDB for PostgreSQL Instans V6.0.
Untuk informasi tentang cara mengimpor atau mengekspor data untuk AnalyticDB for PostgreSQL V7.0, lihat Gunakan Tabel Asing OSS untuk Mengimpor dan Mengekspor Data.
Catatan penggunaan
Sintaks yang digunakan untuk membuat dan menggunakan tabel eksternal sama dengan sintaks Greenplum Database, kecuali untuk sintaks parameter terkait lokasi.
Kinerja impor dan ekspor data bervariasi berdasarkan performa OSS dan sumber daya instans AnalyticDB for PostgreSQL, seperti CPU, I/O, memori, dan sumber daya jaringan. Untuk memaksimalkan kinerja impor dan ekspor, disarankan menggunakan penyimpanan berorientasi kolom dan kompresi saat membuat tabel. Misalnya, Anda dapat menentukan klausa berikut:
"WITH (APPENDONLY=true, ORIENTATION=column, COMPRESSTYPE=zlib, COMPRESSLEVEL=5, BLOCKSIZE=1048576)". Untuk informasi lebih lanjut, lihat CREATE TABLE.Untuk memastikan kinerja impor dan ekspor, bucket OSS dan instans AnalyticDB for PostgreSQL harus berada di wilayah yang sama.
Prosedur
Buat ekstensi tabel eksternal OSS.
Sebelum menggunakan tabel eksternal OSS, Anda harus terlebih dahulu membuat ekstensi tabel eksternal OSS di AnalyticDB for PostgreSQL. Buat ekstensi untuk setiap database yang ingin Anda akses. Jalankan pernyataan berikut untuk membuat ekstensi:
CREATE EXTENSION IF NOT EXISTS oss_ext;Buat tabel eksternal yang dapat ditulis di AnalyticDB for PostgreSQL.
Jalankan pernyataan berikut untuk membuat 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]Tabel berikut menjelaskan parameter.
Parameter
Deskripsi
WRITABLE
Kata kunci tabel eksternal untuk ekspor data. Anda harus menentukan kata kunci ini saat membuat tabel eksternal.
FORMAT
Format file yang didukung, seperti TEXT dan CSV.
ENCODING
Format yang digunakan untuk menyandikan data dalam file, seperti UTF-8.
DISTRIBUTED BY
Klausa yang menulis data dari node komputasi ke OSS berdasarkan kunci distribusi.
oss://oss_endpoint
URL titik akhir OSS dalam format
protocol name://oss_endpoint. Nama protokol adalah oss dan oss_endpoint adalah nama domain yang digunakan untuk mengakses OSS di suatu wilayah. Contoh:oss://oss-cn-hangzhou.aliyuncs.comPentingJika Anda mengakses instans AnalyticDB for PostgreSQL Anda dari server Alibaba Cloud, gunakan titik akhir internal untuk menghindari menghasilkan lalu lintas Internet. Titik akhir internal berisi kata kunci
internal.id
ID AccessKey akun Alibaba Cloud Anda. Untuk informasi tentang cara mendapatkan pasangan AccessKey, lihat Buat pasangan AccessKey.
key
Rahasia AccessKey akun Alibaba Cloud Anda. Untuk informasi tentang cara mendapatkan pasangan AccessKey, lihat Buat pasangan AccessKey.
bucket
Bucket tempat Anda ingin mengekspor file data. Sebelum mengekspor data, Anda harus membuat bucket OSS.
prefix
Awalan jalur objek OSS. Ekspresi reguler tidak didukung.
CatatanAnda hanya dapat menentukan salah satu parameter prefix dan dir.
Saat menggunakan tabel eksternal yang dapat ditulis untuk ekspor data, nama unik dihasilkan untuk setiap file yang diekspor berdasarkan parameter ini.
Sebagai contoh, jika Anda menyetel parameter ini ke osstest/exp/outfromhdb, file akan diekspor ke jalur osstest/exp/, dan semua nama file yang diekspor dimulai dengan outfromhdb.
dir
Direktori OSS yang menyimpan objek data.
CatatanAnda hanya dapat menentukan salah satu parameter prefix dan dir.
Jalur direktori harus diakhiri dengan garis miring maju (
/). Contoh:test/mydir/.Jika Anda menggunakan parameter ini saat membuat tabel eksternal untuk ekspor data, semua data diekspor sebagai beberapa file dalam direktori yang ditentukan. Nama file yang diekspor dalam format
filename.x, di mana x menunjukkan angka. Nilai x mungkin tidak berurutan.
compressiontype
Format kompresi file yang diekspor. Nilai valid:
none (default): File tidak dikompres.
gzip: File dikompres dalam format GZIP.
CatatanHanya format GZIP yang didukung.
num_parallel_worker
Jumlah utas kompresi paralel untuk data yang ditulis ke OSS. Nilai valid: 1 hingga 8. Nilai default: 3. Contoh:
num_parallel_worker=3oss_flush_block_size
Ukuran setiap blok data yang ditulis ke OSS. Nilai valid: 1 hingga 128. Nilai default: 32. Unit: MB. Contoh:
oss_flush_block_size=32oss_file_max_size
Ukuran maksimum setiap file yang ditulis ke OSS. Jika batas terlampaui, data selanjutnya ditulis ke file lain. Nilai valid: 8 hingga 4000. Nilai default: 1024. Unit: MB. Contoh:
oss_file_max_size=1024oss_connect_timeout
Periode waktu habis koneksi. Nilai default: 10. Unit: detik.
oss_dns_cache_timeout
Periode waktu habis untuk resolusi DNS. Nilai default: 60. Unit: detik.
oss_speed_limit
Jumlah minimum data yang ditransmisikan per detik. Jika jumlah data yang ditransmisikan per detik kurang dari nilai yang ditentukan untuk periode waktu tertentu, timeout dipicu. Unit: byte. Nilai default: 1024. 1024 byte sama dengan 1 KB.
Jika Anda mengonfigurasi parameter ini, Anda juga harus mengonfigurasi parameter oss_speed_time.
CatatanJika laju transmisi lebih rendah dari 1 KB/s selama 15 detik berturut-turut saat nilai default digunakan untuk parameter oss_speed_limit dan oss_speed_time, timeout terjadi. Untuk informasi lebih lanjut, lihat Penanganan kesalahan.
oss_speed_time
Periode waktu maksimum selama laju transmisi minimum dapat ditoleransi. Jika laju transmisi lebih rendah dari nilai yang ditentukan untuk periode waktu yang ditentukan, timeout dipicu. Nilai default: 15. Unit: detik.
Jika Anda mengonfigurasi parameter ini, Anda juga harus mengonfigurasi parameter oss_speed_limit.
CatatanJika laju transmisi lebih rendah dari 1 KB/s selama 15 detik berturut-turut saat nilai default digunakan untuk parameter oss_speed_limit dan oss_speed_time, timeout terjadi. Untuk informasi lebih lanjut, lihat Penanganan kesalahan.
Ekspor data secara paralel.
Jalankan pernyataan berikut di database AnalyticDB for PostgreSQL untuk mengekspor data ke OSS secara paralel:
INSERT INTO <External table> SELECT * FROM <Source table>
Contoh
Dalam contoh ini, data dari tabel sumber bernama example diekspor ke OSS.
Jalankan pernyataan berikut untuk membuat ekstensi tabel eksternal OSS:
CREATE EXTENSION IF NOT EXISTS oss_ext;Jalankan pernyataan berikut untuk membuat tabel bernama example yang menyimpan data yang akan diekspor:
CREATE TABLE example (date text, time text, open float, high float, low float, volume int) DISTRIBUTED BY (date);Buat tabel eksternal OSS tempat data diekspor.
Jalankan pernyataan berikut jika parameter prefix digunakan untuk menentukan jalur tabel:
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=XXX key=XXX bucket=testbucket') FORMAT 'csv' DISTRIBUTED BY (date);Jalankan pernyataan berikut jika parameter dir digunakan untuk menentukan jalur tabel:
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=XXX key=XXX bucket=testbucket') FORMAT 'csv' DISTRIBUTED BY (date);
Jalankan pernyataan berikut untuk mengekspor data dari tabel example ke OSS secara paralel:
INSERT INTO ossexample_exp SELECT * FROM example;
Jalankan rencana kueri berikut, yang menunjukkan bahwa setiap node komputasi langsung mengekspor data ke OSS tanpa mendistribusikan ulang data.
EXPLAIN INSERT INTO ossexample_exp SELECT * FROM example;Informasi berikut dikembalikan:
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)Pemecahan masalah SDK
Saat terjadi kesalahan selama proses impor atau ekspor, log kesalahan berisi informasi berikut:
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. Jika masalah berlanjut, Anda dapat memberikan UUID permintaan kepada OSS untuk mendapatkan dukungan teknis.
Untuk informasi lebih lanjut, lihat Tanggapan kesalahan. Anda dapat memperbaiki kesalahan terkait timeout dengan menggunakan parameter terkait oss_ext.