全部产品
Search
文档中心

AnalyticDB:Gunakan tabel asing OSS untuk analisis danau data

更新时间:Jun 26, 2025

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.

  1. Masuk ke Konsol OSS.

  2. Di panel navigasi sisi kiri, klik Buckets.

  3. Di halaman Buckets, klik nama sebuah bucket.

    Anda bisa mendapatkan bucket name di halaman Buckets.

  4. Di halaman Object Management, peroleh jalur objek.

  5. Di panel navigasi sisi kiri, klik Overview.

  6. 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
  • Parameter bucket harus ditentukan setidaknya untuk salah satu server OSS atau tabel asing OSS. Untuk informasi lebih lanjut tentang parameter bucket yang ditentukan untuk tabel asing OSS, lihat bagian "Buat tabel asing OSS" dari topik ini.

  • Jika parameter bucket ditentukan untuk kedua server OSS dan tabel asing OSS, parameter bucket yang ditentukan untuk tabel asing OSS akan berlaku.

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.

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.

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:

  • Jika Anda menetapkan prefix ke test/filename, file berikut akan diimpor:

    • test/filename

    • test/filenamexxx

    • test/filename/aa

    • test/filenameyyy/aa

    • test/filenameyyy/bb/aa

  • Jika Anda menetapkan prefix ke test/filename/, hanya file berikut dari file sebelumnya yang diimpor:

    • test/filename/aa

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
  • Parameter bucket harus ditentukan setidaknya untuk salah satu server OSS atau tabel asing OSS.

  • Jika parameter bucket ditentukan untuk kedua server OSS dan tabel asing OSS, parameter bucket yang ditentukan untuk tabel asing OSS akan berlaku.

format

STRING

Ya

Format objek. Nilai valid:

  • csv

  • text

  • orc

  • avro

  • parquet

  • json

    Untuk informasi lebih lanjut tentang JSON, lihat Memperkenalkan JSON.

  • jsonline

    Dalam format ini, data JSON dibatasi oleh baris baru. Semua data yang dapat dibaca menggunakan JSON Lines juga dapat dibaca menggunakan JSON, tetapi tidak sebaliknya. Kami merekomendasikan Anda menggunakan JSON Lines jika memungkinkan. Untuk informasi lebih lanjut tentang JSON Lines, lihat JSON Lines.

filetype

STRING

Tidak

Tipe objek. Nilai default: plain. Nilai valid:

  • plain (default): Sistem hanya membaca data biner mentah.

  • gzip: Sistem membaca data biner mentah dan mendekompres paket menggunakan GZIP.

  • snappy: Sistem membaca data biner mentah dan mendekompres paket menggunakan Snappy.

    Hanya objek yang dikompresi Snappy standar yang didukung. Objek yang dikompresi Hadoop Snappy tidak didukung.

Catatan
  • Jika parameter filetype ditentukan, hanya objek CSV, TEXT, JSON, dan JSON Lines yang didukung.

  • Jika parameter filetype disetel ke snappy, objek JSON dan JSON Lines tidak didukung.

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:

  • segment_reject_limit = '10' menunjukkan bahwa pemindaian berhenti dan keluar dengan pesan kesalahan jika jumlah baris kesalahan melebihi 10.

  • segment_reject_limit = '10%' menunjukkan bahwa pemindaian berhenti dan keluar dengan pesan kesalahan jika persentase baris kesalahan melebihi 10% dari baris yang diproses.

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:

  • true: menyertakan baris header.

  • false (default): tidak menyertakan baris header.

Catatan

Parameter ini hanya berlaku untuk objek CSV.

delimiter

STRING

Tidak

Pemisah antara bidang. Ini hanya dapat disetel ke karakter single-byte.

  • Nilai default untuk objek CSV: koma (,)

  • Nilai default untuk objek TEXT: tombol tab

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.

  • Nilai default untuk objek CSV: \N

  • Nilai default untuk objek TEXT: karakter kosong tanpa diapit oleh tanda kutip

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:

  • true: Nilai bidang tidak boleh berupa string kosong.

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

Catatan

Parameter ini hanya berlaku untuk objek CSV dan TEXT.

force_null

BOOLEAN

Tidak

Metode yang digunakan untuk memproses string kosong. Nilai valid:

  • true: String kosong dikembalikan sebagai NULL terlepas dari apakah nilai bidang diapit oleh tanda kutip.

  • false (default): String kosong dikembalikan sebagai NULL hanya jika nilai bidang tidak diapit oleh tanda kutip.

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

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

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

Referensi