Topik ini menjelaskan cara menggunakan tabel asing Object Storage Service (OSS) untuk mengimpor data OSS guna analisis data berdasarkan pembungkus data asing OSS (FDW). Tabel asing OSS memungkinkan Anda mengimpor dan mengekspor data lintas akun Alibaba Cloud.
Batasan
Instansi AnalyticDB for PostgreSQL dan Bucket OSS yang terlibat dalam impor dan ekspor data harus berada di wilayah yang sama.
Ikhtisar
OSS FDW dikembangkan berdasarkan PostgreSQL FDW. OSS FDW memungkinkan Anda melakukan operasi berikut:
Mengimpor data OSS ke tabel berorientasi baris atau kolom dari instansi AnalyticDB for PostgreSQL untuk analisis data yang dipercepat.
Meminta dan menganalisis sejumlah besar data OSS.
Menggabungkan tabel asing OSS dengan tabel AnalyticDB for PostgreSQL untuk analisis data.
OSS FDW mendukung objek data berikut dalam berbagai skenario bisnis:
Objek CSV, TEXT, JSON, dan JSON Lines yang tidak dikompresi.
Objek CSV dan TEXT yang dikompresi GZIP dan Snappy standar.
Objek JSON dan JSON Lines yang dikompresi GZIP.
Objek biner ORC. Untuk informasi tentang pemetaan tipe data antara ORC dan AnalyticDB for PostgreSQL, lihat bagian "Pemetaan tipe data antara ORC dan AnalyticDB for PostgreSQL" dari topik Pemetaan tipe data untuk tabel asing OSS.
Objek biner Parquet. Untuk informasi tentang pemetaan tipe data antara Parquet dan AnalyticDB for PostgreSQL, lihat bagian "Pemetaan tipe data antara Parquet dan AnalyticDB for PostgreSQL" dari topik Pemetaan tipe data untuk tabel asing OSS.
Objek biner Avro. Untuk informasi tentang pemetaan tipe data antara Avro dan AnalyticDB for PostgreSQL, lihat bagian "Pemetaan tipe data antara Avro dan AnalyticDB for PostgreSQL" dari topik Pemetaan tipe data untuk tabel asing OSS.
Persiapan
Siapkan data OSS
Siapkan file contoh bernama example.csv.
Dapatkan informasi bucket OSS
Prosedur berikut menunjukkan cara mendapatkan bucket name, object path, endpoint, dan bucket domain name.
Masuk ke Konsol OSS.
Di panel navigasi sisi kiri, klik Buckets.
Di halaman Buckets, klik nama sebuah bucket.
Anda bisa mendapatkan bucket name di halaman Buckets.
Di halaman Object Management, peroleh jalur objek.
Di panel navigasi sisi kiri, klik Overview.
Di bagian Port dari halaman Overview, dapatkan endpoint dan bucket domain name yang sesuai.
Kami merekomendasikan Anda menggunakan titik akhir dari Access from ECS over the VPC (internal network) untuk akses data.
Dapatkan ID AccessKey dan Rahasia AccessKey
Untuk informasi tentang cara mendapatkan ID AccessKey dan Rahasia AccessKey, lihat Buat pasangan AccessKey.
Buat server OSS
Eksekusi pernyataan CREATE SERVER untuk membuat server OSS. Anda harus menentukan nama untuk server OSS yang ingin Anda akses. Untuk informasi lebih lanjut tentang CREATE SERVER, lihat CREATE SERVER.
Sintaksis
CREATE SERVER server_name
FOREIGN DATA WRAPPER fdw_name
[ OPTIONS ( option 'value' [, ... ] ) ]Parameter
Parameter | Tipe data | Diperlukan | Deskripsi |
server_name | STRING | Ya | Nama server OSS. |
fdw_name | STRING | Ya | Nama pembungkus data asing yang mengelola server, yang secara otomatis disetel ke oss_fdw. |
Tabel berikut menjelaskan parameter yang terlibat dalam OPTIONS.
Parameter | Tipe data | Diperlukan | Deskripsi |
endpoint | STRING | Ya | Titik akhir yang digunakan untuk mengakses OSS. AnalyticDB for PostgreSQL hanya memungkinkan Anda mengonfigurasi titik akhir internal. Untuk informasi lebih lanjut, lihat bagian "Alibaba Cloud public cloud" dari topik Wilayah dan titik akhir. |
bucket | STRING | Tidak | Nama bucket OSS yang menyimpan objek data. Untuk informasi tentang cara mendapatkan nama bucket, lihat bagian "Persiapan" dari topik ini. Catatan
|
speed_limit | NUMERIK | Tidak | Ambang batas transmisi yang memicu timeout. Nilai default: 1024. Unit: byte. Jika parameter ini ditentukan, parameter speed_time diperlukan. Catatan Secara default, jika kurang dari 1.024 byte data ditransmisikan dalam 90 detik berturut-turut, timeout akan dipicu. Untuk informasi lebih lanjut, lihat Penanganan kesalahan. |
speed_time | NUMERIK | Tidak | Ambang batas periode timeout. Nilai default: 90. Unit: detik. Jika parameter ini ditentukan, parameter speed_limit diperlukan. Catatan Secara default, jika kurang dari 1.024 byte data ditransmisikan dalam 90 detik berturut-turut, timeout akan dipicu. Untuk informasi lebih lanjut, lihat Penanganan kesalahan. |
connect_timeout | NUMERIK | Tidak | Periode timeout untuk koneksi. Nilai default: 10. Unit: detik. |
dns_cache_timeout | NUMERIK | Tidak | Periode timeout untuk resolusi DNS. Nilai default: 60. Unit: detik. |
Contoh
CREATE SERVER oss_serv
FOREIGN DATA WRAPPER oss_fdw
OPTIONS (
endpoint 'oss-cn-********.aliyuncs.com',
bucket 'adb-pg'
);Anda juga bisa mengeksekusi pernyataan ALTER SERVER untuk memodifikasi konfigurasi server OSS. Untuk informasi lebih lanjut, lihat ALTER SERVER.
Contoh untuk memodifikasi konfigurasi server OSS:
Modifikasi parameter.
ALTER SERVER oss_serv OPTIONS(SET endpoint 'oss-cn-********.aliyuncs.com');Tambahkan parameter.
ALTER SERVER oss_serv OPTIONS(ADD connect_timeout '20');Hapus parameter.
ALTER SERVER oss_serv OPTIONS(DROP connect_timeout);
Anda juga bisa mengeksekusi pernyataan DROP SERVER untuk menghapus server OSS. Untuk informasi lebih lanjut, lihat DROP SERVER.
Buat pemetaan pengguna ke server OSS
Setelah Anda membuat server OSS, Anda harus membuat pengguna yang mengakses server OSS. Anda bisa mengeksekusi pernyataan CREATE USER MAPPING untuk membuat pemetaan pengguna antara pengguna basis data AnalyticDB for PostgreSQL dan pengguna yang mengakses server OSS. Untuk informasi lebih lanjut, lihat CREATE USER MAPPING.
Sintaksis
CREATE USER MAPPING FOR { username | USER | CURRENT_USER | PUBLIC }
SERVER <server_name>
[ OPTIONS ( option 'value' [, ... ] ) ]Parameter
Parameter | Tipe data | Diperlukan | Deskripsi |
username | STRING | Ya, salah satu dari empat parameter | Nama pengguna basis data dari instansi AnalyticDB for PostgreSQL yang akan dipetakan. |
USER | STRING | Nama pengguna basis data saat ini dari instansi AnalyticDB for PostgreSQL yang akan dipetakan. | |
CURRENT_USER | STRING | ||
PUBLIC | STRING | Membuat pemetaan publik yang dapat mencocokkan semua nama pengguna basis data dari instansi AnalyticDB for PostgreSQL, termasuk nama pengguna yang akan dibuat nanti. | |
server_name | STRING | Ya | Nama server OSS. |
Tabel berikut menjelaskan parameter yang terlibat dalam OPTIONS.
Parameter | Tipe data | Diperlukan | Deskripsi |
id | STRING | Ya | ID AccessKey yang digunakan untuk mengakses bucket OSS. Untuk informasi tentang cara mendapatkan ID AccessKey, lihat Buat pasangan AccessKey. |
key | STRING | Ya | Rahasia AccessKey yang digunakan untuk mengakses bucket OSS. Untuk informasi tentang cara mendapatkan Rahasia AccessKey, lihat Buat pasangan AccessKey. |
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.
Contoh
CREATE USER MAPPING FOR PUBLIC
SERVER oss_serv
OPTIONS (
id 'LTAI****************',
key 'yourAccessKeySecret'
);Anda juga bisa mengeksekusi pernyataan DROP USER MAPPING untuk menghapus pengguna. Untuk informasi lebih lanjut, lihat DROP USER MAPPING.
Buat tabel asing OSS
Setelah Anda membuat server OSS dan pengguna untuk mengakses server tersebut, Anda dapat mengeksekusi pernyataan CREATE FOREIGN TABLE untuk membuat tabel asing OSS. Untuk informasi lebih lanjut, lihat CREATE FOREIGN TABLE.
Sintaksis
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 data | Diperlukan | Deskripsi |
table_name | STRING | Ya | Nama tabel asing OSS. |
column_name | STRING | Ya | Nama kolom. |
data_type | STRING | Ya | Tipe data kolom. |
Tabel berikut menjelaskan parameter yang terlibat dalam OPTIONS.
Parameter | Tipe data | Diperlukan | Deskripsi |
filepath | STRING | Ya, salah satu dari tiga parameter | Nama objek yang berisi jalur objek OSS. Jika parameter filepath ditentukan, hanya objek yang ditentukan yang dipilih. |
prefix | STRING | Awalan dari jalur file data. Hanya awalan yang ditentukan yang cocok dan ekspresi reguler tidak didukung. Jika parameter prefix ditentukan, semua objek OSS yang disimpan di jalur objek yang namanya dimulai dengan awalan dipilih. Contoh:
| |
dir | STRING | Direktori OSS tempat objek data disimpan. Direktori OSS harus diakhiri dengan garis miring (/). Contoh: test/mydir/. Jika parameter dir ditentukan, semua objek yang disimpan di direktori dipilih, tidak termasuk subdirektorinya dan objek di subdirektori. | |
bucket | STRING | Tidak | Nama bucket OSS yang menyimpan objek data. Untuk informasi tentang cara mendapatkan nama bucket, lihat bagian "Persiapan" dari topik ini. Catatan
|
format | STRING | Ya | Format objek. Nilai valid:
|
filetype | STRING | Tidak | Tipe objek. Nilai default: plain. Nilai valid:
Catatan
|
log_errors | BOOLEAN | Tidak | Menentukan apakah akan mencatat kesalahan dalam file log. Nilai default: false. Untuk informasi lebih lanjut, lihat bagian "Toleransi kesalahan" dari topik ini. Catatan Parameter ini hanya berlaku untuk objek CSV dan TEXT. |
segment_reject_limit | NUMERIK | Tidak | Jumlah kesalahan abort. Nilai yang mencakup tanda persen (%) menunjukkan persentase baris kesalahan. Nilai tanpa tanda persen (%) menunjukkan jumlah baris kesalahan. Contoh:
Catatan Parameter ini hanya berlaku untuk objek CSV dan TEXT. |
header | BOOLEAN | Tidak | Menentukan apakah akan menyertakan baris header untuk bidang dalam objek sumber. Nilai default: false. Nilai valid:
Catatan Parameter ini hanya berlaku untuk objek CSV. |
delimiter | STRING | Tidak | Pemisah antara bidang. Ini hanya dapat disetel ke karakter single-byte.
Catatan Parameter ini hanya berlaku untuk objek CSV dan TEXT. |
quote | STRING | Tidak | Tanda kutip yang mengapit bidang. Ini hanya dapat disetel ke karakter single-byte. Nilai default: tanda kutip ganda ("). Catatan Parameter ini hanya berlaku untuk objek CSV. |
escape | STRING | Tidak | String yang cocok dengan parameter quote. Ini hanya dapat disetel ke karakter single-byte. Nilai default: tanda kutip ganda ("). Catatan Parameter ini hanya berlaku untuk objek CSV. |
null | STRING | Tidak | Representasi string NULL dalam objek.
Catatan Parameter ini hanya berlaku untuk objek CSV dan TEXT. |
encoding | STRING | Tidak | Format penyandian objek data. Nilai default: format penyandian klien. Catatan Parameter ini hanya berlaku untuk objek CSV dan TEXT. |
force_not_null | BOOLEAN | Tidak | Menentukan apakah nilai bidang tidak boleh berupa string kosong. Nilai valid:
Catatan Parameter ini hanya berlaku untuk objek CSV dan TEXT. |
force_null | BOOLEAN | Tidak | Metode yang digunakan untuk memproses string kosong. Nilai valid:
Catatan Parameter ini hanya berlaku untuk objek 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 Anda membuat tabel asing OSS, Anda dapat menggunakan salah satu metode berikut untuk memeriksa apakah objek OSS yang cocok dengan tabel asing sesuai harapan:
Metode 1
EXPLAIN VERBOSE SELECT * FROM <Nama tabel asing OSS>;Metode 2:
SELECT * FROM get_oss_table_meta('<Nama tabel asing OSS>');
Anda juga bisa mengeksekusi pernyataan DROP FOREIGN TABLE untuk menghapus tabel asing OSS. Untuk informasi lebih lanjut, lihat DROP FOREIGN TABLE.
Minta dan analisis data OSS
Anda dapat meminta data tabel asing OSS dengan cara yang sama seperti tabel AnalyticDB for PostgreSQL. Metode permintaan berikut dapat digunakan:
Minta data dengan menentukan pasangan nilai-kunci.
SELECT * FROM ossexample WHERE volume = 5;Minta data dengan menggunakan fungsi agregat.
SELECT count(*) FROM ossexample WHERE volume = 5;Minta data dengan menentukan kolom dan menggunakan klausa GROUP BY dan LIMIT.
SELECT low, sum(volume) FROM ossexample GROUP BY low ORDER BY low limit 5;
Gabungkan tabel asing OSS dengan tabel AnalyticDB for PostgreSQL untuk analisis data
Buat tabel AnalyticDB for PostgreSQL bernama example untuk analisis gabungan dan masukkan data ke dalam tabel.
CREATE TABLE example (id int, volume int); INSERT INTO example VALUES(1,1), (2,3), (4,5);Gabungkan tabel asing OSS ossexample dengan tabel AnalyticDB for PostgreSQL example untuk permintaan data.
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 menggunakan parameter log_errors dan segment_reject_limit untuk memberikan fitur toleransi kesalahan sehingga pemindaian tabel asing OSS tidak terganggu oleh kesalahan dalam data mentah.
Untuk informasi lebih lanjut tentang parameter log_errors dan segment_reject_limit, lihat bagian "Buat tabel asing OSS" dari topik ini.
Buat tabel asing OSS yang mendukung toleransi kesalahan.
CREATE FOREIGN TABLE oss_error_sales (id int, value float8, x text) SERVER oss_serv OPTIONS (log_errors 'true', -- Catat informasi baris kesalahan. segment_reject_limit '10', -- Tentukan ambang batas untuk menghentikan pemindaian. Jika jumlah baris kesalahan melebihi 10, pemindaian berhenti. dir 'error_sales/', -- Tentukan direktori objek OSS yang cocok dengan tabel asing. format 'csv', -- Tentukan CSV sebagai format untuk mengurai objek. encoding 'utf8'); -- Tentukan format penyandian.Minta log baris kesalahan.
SELECT * FROM gp_read_error_log('oss_error_sales');Hapus log baris kesalahan.
SELECT gp_truncate_error_log('oss_error_sales');
FAQ
T: Apakah data yang disimpan di OSS juga dihapus jika saya menghapus data dari tabel asing OSS?
A: Tidak, data yang disimpan di OSS tidak akan dihapus jika Anda menghapus data dari tabel asing OSS.