Tabel eksternal OSS memungkinkan Anda memindahkan data secara massal antara Object Storage Service (OSS) dan AnalyticDB for PostgreSQL — termasuk lintas akun Alibaba Cloud.
Batasan
Instans AnalyticDB for PostgreSQL dan bucket OSS harus berada di wilayah yang sama.
Format objek yang didukung
Tabel eksternal OSS mendukung format berikut:
Objek CSV dan TEXT tanpa kompresi
Objek CSV dan TEXT terkompresi GZIP
Objek biner ORC
Untuk pemetaan tipe data ORC, lihat bagian "Pemetaan tipe data antara ORC dan AnalyticDB for PostgreSQL" dalam Pemetaan tipe data untuk tabel eksternal OSS.
Prasyarat
Sebelum memulai, pastikan Anda telah membuat objek-objek berikut secara berurutan:
Server OSS — mendaftarkan bucket OSS sebagai sumber data Foreign Data Wrapper (FDW) di AnalyticDB for PostgreSQL. Lihat bagian "Buat server OSS" dalam Gunakan tabel eksternal OSS untuk analisis data lake.
Pemetaan pengguna — memetakan pengguna database ke kredensial AccessKey yang mengizinkan akses ke OSS. Lihat bagian "Buat pemetaan pengguna ke server OSS" dalam Gunakan tabel eksternal OSS untuk analisis data lake.
Tabel eksternal OSS — menentukan skema dan lokasi data di OSS. Lihat bagian "Buat tabel eksternal OSS" dalam Gunakan tabel eksternal OSS untuk analisis data lake.
Ketiga objek ini membentuk rantai: server mengidentifikasi bucket OSS, pemetaan pengguna menyediakan kredensial untuk mengaksesnya, dan tabel eksternal mengekspos data OSS sebagai tabel yang dapat dikueri.
Impor data dari OSS
Langkah-langkah berikut menjelaskan contoh lengkap yang mengimpor file CSV dari OSS ke tabel AnalyticDB for PostgreSQL.
Unggah file CSV ke OSS. Contoh ini menggunakan file bernama
example.csv. Untuk langkah persiapan, lihat bagian "Persiapan" dalam Gunakan tabel eksternal OSS untuk analisis data lake. Untuk instruksi pengunggahan, lihat Unggah objek.Gunakan format encoding yang sama untuk objek OSS dan database Anda untuk menghindari overhead konversi. Encoding default database adalah UTF-8.
Hubungkan ke database AnalyticDB for PostgreSQL. Lihat Koneksi klien.
Buat server OSS.
Parameter Deskripsi endpointTitik akhir internal untuk bucket OSS. Hanya titik akhir internal yang didukung. Lihat bagian "Cloud publik Alibaba Cloud" dalam Wilayah dan titik akhir. bucketNama bucket OSS. Bucket harus berada di wilayah yang sama dengan instans AnalyticDB for PostgreSQL. CREATE SERVER oss_serv FOREIGN DATA WRAPPER oss_fdw OPTIONS ( endpoint 'oss-cn-********.aliyuncs.com', bucket 'adb-pg' );Buat pemetaan pengguna.
Untuk transfer data lintas akun, gunakan ID AccessKey dan Rahasia AccessKey dari akun Alibaba Cloud yang memiliki bucket OSS.
CREATE USER MAPPING FOR PUBLIC SERVER oss_serv OPTIONS ( id 'LTAI****************', key 'yourAccessKeySecret' );Buat tabel eksternal OSS bernama
ossexample.CREATE FOREIGN TABLE ossexample ( date text, time text, open float, high float, low float, volume int ) SERVER oss_serv OPTIONS (dir 'oss_adb/', format 'csv');Impor data menggunakan salah satu metode berikut. Metode 1: INSERT (disarankan untuk memuat ke tabel yang sudah ada) Buat tabel lokal dengan skema yang sama seperti tabel eksternal, lalu masukkan data tersebut.
CREATE TABLE adbexample ( date text, time text, open float, high float, low float, volume int ) WITH (APPENDONLY=TRUE, ORIENTATION=COLUMN, COMPRESSTYPE=ZSTD, COMPRESSLEVEL=5); INSERT INTO adbexample SELECT * FROM ossexample;Metode 2: CREATE TABLE AS (membuat tabel dan memuat data dalam satu langkah)
CREATE TABLE adbexample AS SELECT * FROM ossexample DISTRIBUTED BY (volume);Semua node komputasi membaca objek OSS secara paralel menggunakan mekanisme polling. Secara default, empat objek dibaca secara paralel. Untuk throughput terbaik, atur jumlah objek paralel menjadi kelipatan total jumlah core node komputasi (jumlah node komputasi × core per node). Lihat bagian "Pisahkan objek besar" dalam Praktik terbaik untuk melakukan operasi pada tabel eksternal OSS.
Jika impor gagal — misalnya karena ketidakcocokan encoding file atau ketidaksesuaian tipe data — periksa apakah skema tabel eksternal sesuai dengan struktur objek OSS dan pengaturan encoding konsisten.
Ekspor data ke OSS
Buat tabel eksternal OSS yang mengarah ke direktori output.
CREATE FOREIGN TABLE foreign_x (i int, j int) SERVER oss_serv OPTIONS (format 'csv', dir 'tt_csv/');Ekspor data dari tabel lokal ke OSS.
INSERT INTO foreign_x SELECT * FROM local_x;Verifikasi ekspor dengan membuka direktori
tt_csv/di bucket OSS Anda. Setiap node komputasi menulis objek secara paralel, sehingga Anda akan melihat beberapa file — satu atau lebih per segmen.
Konvensi penamaan untuk objek yang diekspor
Objek yang diekspor mengikuti format penamaan berikut:
{tablename | prefix}_{timestamp}_{random_key}_{seg}{segment_id}_{fileno}.{ext}[.gz]| Komponen | Deskripsi |
|---|---|
{tablename | prefix} | Jika prefix ditentukan, nilai prefix digunakan. Jika dir ditentukan, nama tabel eksternal OSS digunakan. |
{timestamp} | Waktu ekspor dimulai, dalam format YYYYMMDDHH24MISS. |
{random_key} | Nilai kunci acak. |
{seg}{segment_id} | Pengidentifikasi segmen — misalnya, seg1 untuk node komputasi 1. |
{fileno} | Nomor segmen objek, dimulai dari 0. |
{ext} | Format objek: .csv, .txt, atau .orc. |
[.gz] | Muncul jika objek dikompresi GZIP. |
Contoh: ekspor ke objek CSV terkompresi GZIP menggunakan parameter `dir`
CREATE FOREIGN TABLE fdw_t_out_1(a int)
SERVER oss_serv
OPTIONS (format 'csv', filetype 'gzip', dir 'test/');Objek yang diekspor diberi nama dalam format berikut:
fdw_t_out_1_20200805110207_1718599661_seg-1_0.csv.gzContoh: ekspor ke objek ORC menggunakan parameter `prefix`
CREATE FOREIGN TABLE fdw_t_out_2(a int)
SERVER oss_serv
OPTIONS (format 'orc', prefix 'test/my_orc_test');Objek yang diekspor diberi nama dalam format berikut:
my_orc_test_20200924153043_1737154096_seg0_0.orc