全部产品
Search
文档中心

AnalyticDB:Gunakan tabel eksternal OSS untuk mengekspor data ke OSS

更新时间:Jul 02, 2025

AnalyticDB for PostgreSQL memungkinkan Anda mengekspor data ke Object Storage Service (OSS) secara paralel menggunakan fitur tabel eksternal OSS (gpossext). AnalyticDB for PostgreSQL juga mendukung kompresi GZIP untuk tabel eksternal OSS guna mengurangi ukuran file dan biaya penyimpanan.

Ikhtisar gpossext

gpossext dapat membaca dan menulis data dari serta ke file TEXT dan CSV, baik yang dikompres dalam paket GZIP maupun tidak.

Gambar berikut menunjukkan arsitektur gpossext.

OSS

Format TEXT dan CSV

Parameter berikut menentukan format file yang dibaca dari atau ditulis ke OSS. Parameter ini dapat ditentukan dalam parameter DDL tabel eksternal.

  • \n: karakter yang digunakan sebagai pembatas baris atau jeda baris untuk file TEXT atau CSV.

  • DELIMITER: pembatas kolom.

    • Jika Anda menentukan parameter DELIMITER, Anda juga harus menentukan parameter QUOTE.

    • Pembatas kolom yang direkomendasikan meliputi koma (,), garis vertikal (|), dan karakter khusus seperti \t.

  • QUOTE: melingkupi setiap kolom data pengguna yang berisi karakter khusus.

    • String yang berisi karakter khusus harus dilampirkan dalam karakter QUOTE untuk membedakan data pengguna dari karakter kontrol.

    • Untuk meningkatkan efisiensi, disarankan agar data seperti bilangan bulat tidak dilingkupi dalam karakter QUOTE.

    • Karakter QUOTE tidak boleh sama dengan yang ditentukan oleh DELIMITER. Nilai default QUOTE adalah sepasang tanda kutip dua ("").

    • Data pengguna yang berisi karakter QUOTE juga harus berisi karakter ESCAPE untuk membedakan data pengguna dari kode mesin.

  • ESCAPE: karakter escape.

    • Tempatkan karakter escape sebelum karakter khusus yang perlu dihindari untuk menunjukkan bahwa itu bukan karakter khusus.

    • Nilai default ESCAPE sama dengan nilai QUOTE.

    • Anda juga dapat menggunakan karakter lain seperti backslash (\) sebagai karakter ESCAPE, yang digunakan oleh MySQL.

Tabel 1. Karakter kontrol default untuk file TEXT dan CSV

Karakter kontrol

TEXT

CSV

DELIMITER

\t (Tab)

, (Koma)

QUOTE

" (Tanda kutip dua)

" (Tanda kutip dua)

ESCAPE

N/A

" (Tanda kutip dua)

NULL

\N (Backslash n)

String kosong tanpa tanda kutip

Catatan

Semua karakter kontrol harus berupa karakter single-byte.

Versi yang didukung

AnalyticDB for PostgreSQL Instans V6.0.

Catatan

Untuk informasi tentang cara mengimpor atau mengekspor data untuk AnalyticDB for PostgreSQL V7.0, lihat Gunakan Tabel Asing OSS untuk Mengimpor dan Mengekspor Data.

Catatan penggunaan

  • Sintaks yang digunakan untuk membuat dan menggunakan tabel eksternal sama dengan sintaks Greenplum Database, kecuali untuk sintaks parameter terkait lokasi.

  • Kinerja impor dan ekspor data bervariasi berdasarkan performa OSS dan sumber daya instans AnalyticDB for PostgreSQL, seperti CPU, I/O, memori, dan sumber daya jaringan. Untuk memaksimalkan kinerja impor dan ekspor, disarankan menggunakan penyimpanan berorientasi kolom dan kompresi saat membuat tabel. Misalnya, Anda dapat menentukan klausa berikut: "WITH (APPENDONLY=true, ORIENTATION=column, COMPRESSTYPE=zlib, COMPRESSLEVEL=5, BLOCKSIZE=1048576)". Untuk informasi lebih lanjut, lihat CREATE TABLE.

  • Untuk memastikan kinerja impor dan ekspor, bucket OSS dan instans AnalyticDB for PostgreSQL harus berada di wilayah yang sama.

Prosedur

  1. Buat ekstensi tabel eksternal OSS.

    Sebelum menggunakan tabel eksternal OSS, Anda harus terlebih dahulu membuat ekstensi tabel eksternal OSS di AnalyticDB for PostgreSQL. Buat ekstensi untuk setiap database yang ingin Anda akses. Jalankan pernyataan berikut untuk membuat ekstensi:

    CREATE EXTENSION IF NOT EXISTS oss_ext;
  2. Buat tabel eksternal yang dapat ditulis di AnalyticDB for PostgreSQL.

    Jalankan pernyataan berikut untuk membuat tabel eksternal yang dapat ditulis:

    CREATE WRITABLE EXTERNAL TABLE table_name
    ( column_name data_type [, ...] | LIKE other_table )
    LOCATION ('ossprotocol')
    FORMAT 'TEXT'
                   [( [DELIMITER [AS] 'delimiter']
                   [NULL [AS] 'null string']
                   [ESCAPE [AS] 'escape' | 'OFF'] )]
              | 'CSV'
                   [([QUOTE [AS] 'quote']
                   [DELIMITER [AS] 'delimiter']
                   [NULL [AS] 'null string']
                   [FORCE QUOTE column [, ...]] ]
                   [ESCAPE [AS] 'escape'] )]
    [ ENCODING 'encoding' ]
    [ DISTRIBUTED BY (column, [ ... ] ) | DISTRIBUTED RANDOMLY ]
    ossprotocol:
       oss://oss_endpoint [prefix=prefix_name|dir=[folder/[folder/]...]/file_name]
        id=userossid key=userosskey bucket=ossbucket compressiontype=[none|gzip] async=[true|false]

    Tabel berikut menjelaskan parameter.

    Parameter

    Deskripsi

    WRITABLE

    Kata kunci tabel eksternal untuk ekspor data. Anda harus menentukan kata kunci ini saat membuat tabel eksternal.

    FORMAT

    Format file yang didukung, seperti TEXT dan CSV.

    ENCODING

    Format yang digunakan untuk menyandikan data dalam file, seperti UTF-8.

    DISTRIBUTED BY

    Klausa yang menulis data dari node komputasi ke OSS berdasarkan kunci distribusi.

    oss://oss_endpoint

    URL titik akhir OSS dalam format protocol name://oss_endpoint. Nama protokol adalah oss dan oss_endpoint adalah nama domain yang digunakan untuk mengakses OSS di suatu wilayah. Contoh:

    oss://oss-cn-hangzhou.aliyuncs.com
    Penting

    Jika Anda mengakses instans AnalyticDB for PostgreSQL Anda dari server Alibaba Cloud, gunakan titik akhir internal untuk menghindari menghasilkan lalu lintas Internet. Titik akhir internal berisi kata kunci internal.

    id

    ID AccessKey akun Alibaba Cloud Anda. Untuk informasi tentang cara mendapatkan pasangan AccessKey, lihat Buat pasangan AccessKey.

    key

    Rahasia AccessKey akun Alibaba Cloud Anda. Untuk informasi tentang cara mendapatkan pasangan AccessKey, lihat Buat pasangan AccessKey.

    bucket

    Bucket tempat Anda ingin mengekspor file data. Sebelum mengekspor data, Anda harus membuat bucket OSS.

    prefix

    Awalan jalur objek OSS. Ekspresi reguler tidak didukung.

    Catatan

    Anda hanya dapat menentukan salah satu parameter prefix dan dir.

    Saat menggunakan tabel eksternal yang dapat ditulis untuk ekspor data, nama unik dihasilkan untuk setiap file yang diekspor berdasarkan parameter ini.

    Sebagai contoh, jika Anda menyetel parameter ini ke osstest/exp/outfromhdb, file akan diekspor ke jalur osstest/exp/, dan semua nama file yang diekspor dimulai dengan outfromhdb.

    dir

    Direktori OSS yang menyimpan objek data.

    Catatan

    Anda hanya dapat menentukan salah satu parameter prefix dan dir.

    • Jalur direktori harus diakhiri dengan garis miring maju (/). Contoh: test/mydir/.

    • Jika Anda menggunakan parameter ini saat membuat tabel eksternal untuk ekspor data, semua data diekspor sebagai beberapa file dalam direktori yang ditentukan. Nama file yang diekspor dalam format filename.x, di mana x menunjukkan angka. Nilai x mungkin tidak berurutan.

    compressiontype

    Format kompresi file yang diekspor. Nilai valid:

    • none (default): File tidak dikompres.

    • gzip: File dikompres dalam format GZIP.

    Catatan

    Hanya format GZIP yang didukung.

    num_parallel_worker

    Jumlah utas kompresi paralel untuk data yang ditulis ke OSS. Nilai valid: 1 hingga 8. Nilai default: 3. Contoh:

    num_parallel_worker=3

    oss_flush_block_size

    Ukuran setiap blok data yang ditulis ke OSS. Nilai valid: 1 hingga 128. Nilai default: 32. Unit: MB. Contoh:

    oss_flush_block_size=32

    oss_file_max_size

    Ukuran maksimum setiap file yang ditulis ke OSS. Jika batas terlampaui, data selanjutnya ditulis ke file lain. Nilai valid: 8 hingga 4000. Nilai default: 1024. Unit: MB. Contoh:

    oss_file_max_size=1024

    oss_connect_timeout

    Periode waktu habis koneksi. Nilai default: 10. Unit: detik.

    oss_dns_cache_timeout

    Periode waktu habis untuk resolusi DNS. Nilai default: 60. Unit: detik.

    oss_speed_limit

    Jumlah minimum data yang ditransmisikan per detik. Jika jumlah data yang ditransmisikan per detik kurang dari nilai yang ditentukan untuk periode waktu tertentu, timeout dipicu. Unit: byte. Nilai default: 1024. 1024 byte sama dengan 1 KB.

    Jika Anda mengonfigurasi parameter ini, Anda juga harus mengonfigurasi parameter oss_speed_time.

    Catatan

    Jika laju transmisi lebih rendah dari 1 KB/s selama 15 detik berturut-turut saat nilai default digunakan untuk parameter oss_speed_limit dan oss_speed_time, timeout terjadi. Untuk informasi lebih lanjut, lihat Penanganan kesalahan.

    oss_speed_time

    Periode waktu maksimum selama laju transmisi minimum dapat ditoleransi. Jika laju transmisi lebih rendah dari nilai yang ditentukan untuk periode waktu yang ditentukan, timeout dipicu. Nilai default: 15. Unit: detik.

    Jika Anda mengonfigurasi parameter ini, Anda juga harus mengonfigurasi parameter oss_speed_limit.

    Catatan

    Jika laju transmisi lebih rendah dari 1 KB/s selama 15 detik berturut-turut saat nilai default digunakan untuk parameter oss_speed_limit dan oss_speed_time, timeout terjadi. Untuk informasi lebih lanjut, lihat Penanganan kesalahan.

  3. Ekspor data secara paralel.

    Jalankan pernyataan berikut di database AnalyticDB for PostgreSQL untuk mengekspor data ke OSS secara paralel:

    INSERT INTO <External table> SELECT * FROM <Source table>

Contoh

Dalam contoh ini, data dari tabel sumber bernama example diekspor ke OSS.

  1. Jalankan pernyataan berikut untuk membuat ekstensi tabel eksternal OSS:

    CREATE EXTENSION IF NOT EXISTS oss_ext;
  2. Jalankan pernyataan berikut untuk membuat tabel bernama example yang menyimpan data yang akan diekspor:

    CREATE TABLE example
            (date text, time text, open float,
             high float, low float, volume int)
             DISTRIBUTED BY (date);
  3. Buat tabel eksternal OSS tempat data diekspor.

    • Jalankan pernyataan berikut jika parameter prefix digunakan untuk menentukan jalur tabel:

      CREATE WRITABLE EXTERNAL TABLE ossexample_exp
              (date text, time text, open float, high float,
              low float, volume int)
              location('oss://oss-cn-hangzhou.aliyuncs.com
              prefix=osstest/exp/outfromhdb id=XXX
              key=XXX bucket=testbucket') FORMAT 'csv'
              DISTRIBUTED BY (date);
    • Jalankan pernyataan berikut jika parameter dir digunakan untuk menentukan jalur tabel:

      CREATE WRITABLE EXTERNAL TABLE ossexample_exp
              (date text, time text, open float, high float,
              low float, volume int)
              location('oss://oss-cn-hangzhou.aliyuncs.com
              dir=osstest/exp/ id=XXX
              key=XXX bucket=testbucket') FORMAT 'csv'
              DISTRIBUTED BY (date);
  4. Jalankan pernyataan berikut untuk mengekspor data dari tabel example ke OSS secara paralel:

    INSERT INTO ossexample_exp SELECT * FROM example;

Jalankan rencana kueri berikut, yang menunjukkan bahwa setiap node komputasi langsung mengekspor data ke OSS tanpa mendistribusikan ulang data.

EXPLAIN INSERT INTO ossexample_exp SELECT * FROM example;

Informasi berikut dikembalikan:

                          QUERY PLAN
---------------------------------------------------------------
 Insert (slice0; segments: 3)  (rows=1 width=92)
   ->  Seq Scan on example  (cost=0.00..0.00 rows=1 width=92)
(2 rows)

Pemecahan masalah SDK

Saat terjadi kesalahan selama proses impor atau ekspor, log kesalahan berisi informasi berikut:

  • code: kode status HTTP dari permintaan yang gagal.

  • error_code: kode kesalahan yang dikembalikan oleh OSS.

  • error_msg: pesan kesalahan yang dikembalikan oleh OSS.

  • req_id: UUID dari permintaan yang gagal. Jika masalah berlanjut, Anda dapat memberikan UUID permintaan kepada OSS untuk mendapatkan dukungan teknis.

Untuk informasi lebih lanjut, lihat Tanggapan kesalahan. Anda dapat memperbaiki kesalahan terkait timeout dengan menggunakan parameter terkait oss_ext.

Referensi