All Products
Search
Document Center

AnalyticDB:Analisis data lake dengan tabel eksternal OSS

Last Updated:Jun 06, 2026

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.

  1. Masuk ke Konsol OSS.

  2. Di panel navigasi kiri, klik Access from ECS over the VPC (internal network).

  3. Pada halaman Endpoint, klik bucket yang dituju.

    Di halaman Object Management, Anda dapat menemukan bucket name.

  4. Di halaman Object Management, temukan path objek.

  5. Di panel navigasi kiri, klik Overview.

  6. 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
  • Anda harus menentukan opsi bucket untuk server OSS atau FDW OSS. Untuk informasi lebih lanjut tentang opsi ini saat digunakan dengan FDW OSS, lihat Buat FDW OSS.

  • Jika opsi bucket ditentukan untuk server OSS dan FDW OSS, nilai yang ditentukan untuk FDW OSS akan diutamakan.

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.

Catatan

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:

  • Jika Anda mengatur prefix ke test/filename, objek berikut diimpor:

    • test/filename

    • test/filenamexxx

    • test/filename/aa

    • test/filenameyyy/aa

    • test/filenameyyy/bb/aa

  • Jika Anda mengatur prefix ke test/filename/, hanya objek berikut dari daftar sebelumnya yang diimpor:

    • test/filename/aa

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
  • Anda harus menentukan parameter bucket untuk server OSS atau tabel eksternal OSS.

  • Jika parameter bucket ditentukan untuk server OSS dan tabel eksternal OSS, nilai untuk tabel eksternal OSS akan diutamakan.

format

string

Ya

Format objek. Nilai yang valid:

  • csv

  • text

  • orc

  • avro

  • parquet

  • json

    Untuk informasi lebih lanjut tentang spesifikasi JSON, lihat JSON specification.

  • jsonline

    Merupakan data JSON di mana setiap baris adalah objek JSON yang valid. Semua data yang dapat dibaca dengan jsonline juga dapat dibaca dengan json, tetapi tidak sebaliknya. Kami merekomendasikan penggunaan jsonline bila memungkinkan. Untuk informasi lebih lanjut tentang spesifikasi JSON Lines, lihat JSONLINE specification.

filetype

string

Tidak

Jenis kompresi objek. Nilai yang valid:

  • plain (default): Membaca data biner mentah tanpa pemrosesan tambahan.

  • gzip: Membaca data biner mentah dan mendekompresinya menggunakan GZIP.

  • snappy: Membaca data biner mentah dan mendekompresinya menggunakan Snappy.

    Hanya kompresi Snappy standar yang didukung. Objek terkompresi Hadoop-Snappy tidak didukung.

Catatan
  • Parameter ini hanya berlaku untuk objek dalam format csv, text, json, dan jsonline.

  • Opsi snappy tidak mendukung objek dalam format json dan jsonline.

log_errors

boolean

Tidak

Menentukan apakah kesalahan dicatat dalam file log. Nilai default adalah false. Untuk informasi lebih lanjut, lihat Toleransi kesalahan.

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 (%), itu merepresentasikan persentase baris. Jika tidak, itu merepresentasikan jumlah absolut baris. Contoh:

  • segment_reject_limit = '10': Tugas berhenti dan melaporkan kesalahan jika jumlah baris kesalahan melebihi 10.

  • segment_reject_limit = '10%': Tugas berhenti dan melaporkan kesalahan jika jumlah baris kesalahan melebihi 10% dari total baris yang diproses.

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:

  • true: Objek berisi baris header.

  • false (default): Objek tidak berisi baris header.

Catatan

Parameter ini hanya berlaku untuk objek dalam format csv.

delimiter

string

Tidak

Pemisah yang memisahkan bidang. Harus berupa karakter satu byte.

  • Untuk objek csv, default-nya adalah koma (,).

  • Untuk objek text, default-nya adalah karakter tab.

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.

  • Untuk format csv, default-nya adalah \N.

  • Untuk format text, default-nya adalah string kosong tanpa tanda kutip.

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:

  • true: Nilai bidang tidak boleh berupa string kosong.

  • false (default): Nilai bidang boleh berupa string kosong.

Catatan

Parameter ini hanya berlaku untuk objek dalam format csv dan text.

force_null

boolean

Tidak

Menentukan cara menangani string kosong. Nilai yang valid:

  • true: Memperlakukan semua string kosong sebagai NULL, terlepas dari apakah string tersebut diberi tanda kutip atau tidak.

  • false (default): Hanya memperlakukan string kosong tanpa tanda kutip sebagai NULL.

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');
Catatan

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

  1. 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);
  2. 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.

Dokumentasi terkait