Gunakan tabel eksternal OSS untuk mengimpor dan menganalisis data dari Object Storage Service (OSS). Berdasarkan pembungkus data asing OSS (FDW), tabel-tabel ini juga mendukung impor data lintas akun.
Batasan
Instans AnalyticDB for PostgreSQL dan bucket OSS harus berada di wilayah yang sama.
Fitur
OSS FDW didasarkan pada kerangka kerja PostgreSQL Foreign Data Wrapper (FDW) dan memungkinkan Anda:
-
Mengimpor data dari OSS ke dalam tabel lokal berorientasi baris atau berorientasi kolom untuk mempercepat analisis.
-
Langsung melakukan kueri dan menganalisis volume data besar di OSS.
-
Menggabungkan (join) tabel eksternal OSS dengan tabel lokal untuk analisis.
OSS FDW mendukung berbagai format file data, termasuk:
-
File teks tidak terkompresi dalam format CSV, TEXT, JSON, dan JSON Lines.
-
File teks terkompresi GZIP dan Snappy dalam format CSV dan TEXT.
-
File teks terkompresi GZIP dalam format JSON dan JSON Lines.
-
File biner ORC. Untuk pemetaan tipe data antara ORC dan AnalyticDB for PostgreSQL, lihat Pemetaan tipe data untuk file ORC.
-
File biner Parquet. Untuk pemetaan tipe data antara Parquet dan AnalyticDB for PostgreSQL, lihat Pemetaan tipe data untuk file Parquet.
-
File biner Avro. Untuk pemetaan tipe data antara Avro dan AnalyticDB for PostgreSQL, lihat Pemetaan tipe data untuk file Avro.
Persiapan awal
Siapkan data OSS
Siapkan file contoh example.csv.
Cari informasi bucket OSS
Bagian ini menjelaskan cara menemukan Buckets, Bucket Name, Port, dan Bucket Domain Name.
-
Masuk ke Konsol OSS.
-
Di panel navigasi kiri, klik Access from ECS over the VPC (internal network).
-
Pada halaman Endpoint, klik bucket yang dituju.
Di halaman Object Management, Anda dapat menemukan bucket name.
-
Di halaman Object Management, temukan path objek.
-
Di panel navigasi kiri, klik Overview.
-
Di bagian Port pada halaman Overview, temukan endpoint dan bucket domain name.
Kami merekomendasikan penggunaan endpoint untuk Access from ECS over the VPC (internal network).
Dapatkan ID AccessKey dan Rahasia AccessKey
Untuk mendapatkan ID AccessKey dan Rahasia AccessKey, lihat Create an AccessKey.
Buat server OSS
Gunakan pernyataan CREATE SERVER untuk membuat server OSS. Server ini mendefinisikan koneksi ke layanan OSS yang ingin Anda akses. Untuk informasi lebih lanjut tentang CREATE SERVER, lihat CREATE SERVER.
Sintaks
CREATE SERVER server_name
FOREIGN DATA WRAPPER fdw_name
[ OPTIONS ( option 'value' [, ... ] ) ]
Parameter
|
Parameter |
Tipe |
Wajib |
Deskripsi |
|
server_name |
STRING |
Ya |
Nama server OSS. |
|
fdw_name |
STRING |
Ya |
Nama foreign data wrapper yang mengelola server. Parameter ini harus diatur ke oss_fdw. |
Tabel berikut menjelaskan parameter untuk klausa OPTIONS.
|
Parameter |
Tipe |
Wajib |
Deskripsi |
|
endpoint |
STRING |
Ya |
Titik akhir yang digunakan untuk mengakses OSS.AnalyticDB for PostgreSQL hanya mendukung titik akhir internal. Untuk informasi lebih lanjut, lihat bagian cloud publik di Regions and endpoints. |
|
bucket |
STRING |
Tidak |
Nama bucket tempat file data disimpan. Untuk detail cara memperoleh nama bucket, lihat Persiapan. Catatan
|
|
speed_limit |
NUMERIC |
Tidak |
Jumlah minimum data yang harus ditransfer dalam periode yang ditentukan oleh speed_time untuk mencegah timeout. Satuan: byte. Nilai default adalah 1024. Gunakan opsi ini bersama opsi speed_time. Catatan
Secara default, timeout dipicu jika kurang dari 1024 byte data ditransfer dalam 90 detik berturut-turut. Untuk informasi lebih lanjut, lihat OSS SDK Error Handling. |
|
speed_time |
NUMERIC |
Tidak |
Periode waktu di mana jumlah transfer data minimum yang ditentukan oleh speed_limit harus dipenuhi. Satuan: detik. Nilai default adalah 90. Gunakan opsi ini bersama opsi speed_limit. Catatan
Secara default, timeout dipicu jika kurang dari 1024 byte data ditransfer dalam 90 detik berturut-turut. Untuk informasi lebih lanjut, lihat OSS SDK Error Handling. |
|
connect_timeout |
NUMERIC |
Tidak |
Periode timeout koneksi. Satuan: detik. Nilai default adalah 10. |
|
dns_cache_timeout |
NUMERIC |
Tidak |
Periode timeout cache DNS. Satuan: detik. Nilai default adalah 60. |
Contoh
CREATE SERVER oss_serv
FOREIGN DATA WRAPPER oss_fdw
OPTIONS (
endpoint 'oss-cn-********.aliyuncs.com',
bucket 'adb-pg'
);
Anda juga dapat menggunakan pernyataan ALTER SERVER untuk mengubah konfigurasi server OSS. Untuk informasi lebih lanjut, lihat ALTER SERVER.
Contoh:
-
Ubah opsi untuk server OSS.
ALTER SERVER oss_serv OPTIONS(SET endpoint 'oss-cn-********.aliyuncs.com'); -
Tambahkan opsi ke server OSS.
ALTER SERVER oss_serv OPTIONS(ADD connect_timeout '20'); -
Hapus opsi dari server OSS.
ALTER SERVER oss_serv OPTIONS(DROP connect_timeout);
Untuk menghapus server OSS, gunakan pernyataan DROP SERVER. Untuk informasi lebih lanjut, lihat DROP SERVER.
Buat pemetaan pengguna OSS
Setelah membuat server OSS, Anda juga harus membuat pemetaan pengguna. Pernyataan CREATE USER MAPPING mendefinisikan pemetaan antara pengguna di database AnalyticDB for PostgreSQL Anda dan kredensial untuk mengakses server OSS. Untuk informasi lebih lanjut, lihat CREATE USER MAPPING.
Sintaks
CREATE USER MAPPING FOR { username | USER | CURRENT_USER | PUBLIC }
SERVER <server_name>
[ OPTIONS ( option 'value' [, ... ] ) ]
Parameter
|
Parameter |
Tipe |
Wajib |
Deskripsi |
|
username |
string |
Ya. Anda harus menentukan salah satu dari empat opsi. |
Nama pengguna yang ada untuk dipetakan di instans AnalyticDB for PostgreSQL. |
|
USER |
string |
Memetakan pengguna saat ini di instans AnalyticDB for PostgreSQL. |
|
|
CURRENT_USER |
string |
||
|
PUBLIC |
string |
Membuat pemetaan publik yang berlaku untuk semua pengguna instans AnalyticDB for PostgreSQL, termasuk pengguna yang dibuat setelahnya. |
|
|
server_name |
string |
Ya |
Nama server OSS. |
Tabel berikut menjelaskan parameter untuk klausa OPTIONS.
|
Parameter |
Tipe |
Wajib |
Deskripsi |
|
id |
string |
Ya |
ID AccessKey. Untuk memperolehnya, lihat Create an AccessKey pair. |
|
key |
string |
Ya |
Rahasia AccessKey. Untuk memperolehnya, lihat Create an AccessKey pair. |
Saat Anda mengimpor atau mengekspor data lintas akun Alibaba Cloud, Anda harus mengonfigurasi ID AccessKey dan Rahasia AccessKey dari akun Alibaba Cloud yang memiliki bucket OSS tersebut.
Contoh
CREATE USER MAPPING FOR PUBLIC
SERVER oss_serv
OPTIONS (
id 'LTAI****************',
key 'yourAccessKeySecret'
);
Anda juga dapat menggunakan pernyataan DROP USER MAPPING untuk menghapus pemetaan pengguna. Untuk informasi lebih lanjut, lihat DROP USER MAPPING.
Buat tabel eksternal OSS
Setelah Anda memiliki server OSS dan pengguna yang dapat mengaksesnya, gunakan pernyataan CREATE FOREIGN TABLE untuk membuat tabel eksternal OSS. Untuk informasi lebih lanjut, lihat CREATE FOREIGN TABLE.
Sintaks
CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [
column_name data_type [ OPTIONS ( option 'value' [, ... ] ) ] [ COLLATE collation ] [ column_constraint [ ... ] ]
[, ... ]
] )
SERVER server_name
[ OPTIONS ( option 'value' [, ... ] ) ]
Parameter
|
Parameter |
Tipe |
Wajib |
Deskripsi |
|
table_name |
string |
Ya |
Nama tabel eksternal OSS. |
|
column_name |
string |
Ya |
Nama kolom. |
|
data_type |
string |
Ya |
Tipe data kolom. |
Tabel berikut mencantumkan parameter untuk klausa OPTIONS.
|
Parameter |
Tipe |
Wajib |
Deskripsi |
|
filepath |
string |
Ya. Salah satu dari tiga parameter ini wajib diisi. |
Path lengkap dan nama objek tunggal di OSS. Jika Anda menggunakan parameter ini, hanya objek yang ditentukan yang dipilih. |
|
prefix |
string |
Menentukan awalan untuk path objek. Hanya objek yang path-nya dimulai dengan awalan ini yang dipilih. Ekspresi reguler tidak didukung. Contoh:
|
|
|
dir |
string |
Path direktori di OSS harus diakhiri dengan /, misalnya, test/mydir/. Memilih semua objek di direktori yang ditentukan, tidak termasuk objek di subdirektori-nya. |
|
|
bucket |
string |
Tidak |
Nama bucket yang berisi objek data. Lihat Persiapan untuk mengetahui cara memperoleh nama bucket. Catatan
|
|
format |
string |
Ya |
Format objek. Nilai yang valid:
|
|
filetype |
string |
Tidak |
Jenis kompresi objek. Nilai yang valid:
Catatan
|
|
log_errors |
boolean |
Tidak |
Menentukan apakah kesalahan dicatat dalam file log. Nilai default adalah Catatan
Parameter ini hanya berlaku untuk objek dalam format csv dan text. |
|
segment_reject_limit |
numeric |
Tidak |
Ambang kesalahan yang menyebabkan tugas pemuatan data dibatalkan. Jika nilainya mencakup tanda persen (
Catatan
Parameter ini hanya berlaku untuk objek dalam format csv dan text. |
|
header |
boolean |
Tidak |
Menentukan apakah objek sumber berisi baris header. Nilai yang valid:
Catatan
Parameter ini hanya berlaku untuk objek dalam format csv. |
|
delimiter |
string |
Tidak |
Pemisah yang memisahkan bidang. Harus berupa karakter satu byte.
Catatan
Parameter ini hanya berlaku untuk objek dalam format csv dan text. |
|
quote |
string |
Tidak |
Karakter tanda kutip untuk bidang. Harus berupa karakter satu byte. Default-nya adalah tanda kutip ganda ( Catatan
Parameter ini hanya berlaku untuk objek dalam format csv. |
|
escape |
string |
Tidak |
Karakter escape yang mendahului karakter yang memiliki makna khusus. Harus berupa karakter satu byte. Default-nya adalah tanda kutip ganda ( Catatan
Parameter ini hanya berlaku untuk objek dalam format csv. |
|
null |
string |
Tidak |
Menentukan string yang merepresentasikan nilai NULL dalam objek data.
Catatan
Parameter ini hanya berlaku untuk objek dalam format csv dan text. |
|
encoding |
string |
Tidak |
Menentukan encoding objek data. Default-nya mengikuti encoding klien. Catatan
Parameter ini hanya berlaku untuk objek dalam format csv dan text. |
|
force_not_null |
boolean |
Tidak |
Menentukan apakah nilai bidang dapat berupa string kosong. Nilai yang valid:
Catatan
Parameter ini hanya berlaku untuk objek dalam format csv dan text. |
|
force_null |
boolean |
Tidak |
Menentukan cara menangani string kosong. Nilai yang valid:
Catatan
Parameter ini hanya berlaku untuk objek dalam format csv dan text. |
Contoh
CREATE FOREIGN TABLE ossexample (
date text,
time text,
open float,
high float,
low float,
volume int
) SERVER oss_serv OPTIONS (dir 'dir_oss_adb/', format 'csv');
Setelah membuat tabel eksternal OSS, Anda dapat menggunakan salah satu metode berikut untuk memeriksa objek OSS mana saja yang dipetakan oleh tabel tersebut:
-
Metode 1:
EXPLAIN VERBOSE SELECT * FROM <OSS foreign table name>; -
Metode 2:
SELECT * FROM get_oss_table_meta('<OSS foreign table name>');
Anda juga dapat menggunakan pernyataan DROP FOREIGN TABLE untuk menghapus tabel eksternal OSS. Untuk informasi lebih lanjut, lihat DROP FOREIGN TABLE.
Lakukan kueri dan analisis data OSS
Anda dapat melakukan kueri pada tabel eksternal OSS seperti halnya melakukan kueri pada tabel lokal. Contoh berikut menunjukkan kueri umum.
-
Lakukan kueri data menggunakan filter pasangan kunci-nilai.
SELECT * FROM ossexample WHERE volume = 5; -
Lakukan kueri data menggunakan fungsi agregat.
SELECT count(*) FROM ossexample WHERE volume = 5; -
Lakukan kueri data menggunakan klausa GROUP BY dan LIMIT.
SELECT low, sum(volume) FROM ossexample GROUP BY low ORDER BY low limit 5;
Analisis gabungan dengan tabel eksternal OSS
-
Buat tabel lokal bernama example dan masukkan data uji.
CREATE TABLE example (id int, volume int); INSERT INTO example VALUES(1,1), (2,3), (4,5); -
Jalankan kueri gabungan pada tabel example dan ossexample.
SELECT example.volume, min(high), max(low) FROM ossexample, example WHERE ossexample.volume = example.volume GROUP BY(example.volume) ORDER BY example.volume;
Toleransi kesalahan
OSS FDW menyediakan toleransi kesalahan menggunakan parameter log_errors dan segment_reject_limit untuk mencegah kesalahan pada data mentah mengganggu proses pemindaian tabel eksternal OSS.
Untuk informasi lebih lanjut tentang parameter log_errors dan segment_reject_limit, lihat Buat tabel eksternal OSS.
-
Buat tabel eksternal OSS yang toleran terhadap kesalahan.
CREATE FOREIGN TABLE oss_error_sales (id int, value float8, x text) SERVER oss_serv OPTIONS (log_errors 'true', -- Aktifkan pencatatan kesalahan. segment_reject_limit '10', -- Tetapkan batas penolakan menjadi 10 baris. Pemindaian dibatalkan jika batas ini terlampaui. dir 'error_sales/', -- Tentukan direktori objek OSS untuk tabel eksternal. format 'csv', -- Tentukan format objek sebagai CSV. encoding 'utf8'); -- Tentukan encoding. -
Lakukan kueri log kesalahan.
SELECT * FROM gp_read_error_log('oss_error_sales'); -
Bersihkan log kesalahan.
SELECT gp_truncate_error_log('oss_error_sales');
FAQ
T: Apakah menghapus data dari tabel eksternal OSS juga menghapus data dasar di OSS?
J: Tidak. Menghapus data dari tabel eksternal OSS tidak menghapus data dasar di OSS.