全部产品
Search
文档中心

Hologres:SALIN

更新时间:Jul 02, 2025

Topik ini menjelaskan cara menggunakan pernyataan SALIN untuk mengimpor data ke atau mengekspor data dari Hologres.

Batasan

Perhatikan hal-hal berikut saat menggunakan pernyataan SALIN untuk mengimpor atau mengekspor data:

  • Untuk mengimpor data dari tabel terpartisi ke Hologres, Anda hanya dapat mengimpor data ke tabel partisi anak, bukan tabel partisi induk.

  • Pada Hologres V1.1.43 dan versi lebih baru, pernyataan COPY FROM STDIN mendukung tabel yang dibuat dengan batasan DEFAULT dan tabel yang berisi kolom tipe data SERIAL. Pernyataan COPY FROM STDIN tidak mendukung tabel-tabel ini di versi Hologres sebelumnya.

Platform operasi

Anda harus mengeksekusi pernyataan yang dijelaskan dalam topik ini pada klien PostgreSQL. Untuk informasi lebih lanjut, lihat Klien PostgreSQL.

Pengenalan

Anda dapat menggunakan pernyataan COPY FROM untuk mengimpor data dari input standar klien ke Hologres dan pernyataan COPY TO untuk mengekspor data Hologres.

Catatan
  • Pernyataan SALIN mendukung tipe data yang didukung oleh Hologres. Untuk informasi lebih lanjut, lihat Tipe Data.

  • Untuk mengimpor data ke Hologres, Anda harus mengeksekusi pernyataan COPY FROM STDIN. Untuk mengekspor data dari Hologres, Anda harus mengeksekusi pernyataan COPY ( query ) TO STDOUT.

  • Pernyataan SALIN memastikan atomicitas operasi impor dan ekspor data. Dalam mode salinan tetap, kunci tingkat baris digunakan alih-alih kunci tingkat tabel, dan atomicitas tidak dijamin. Oleh karena itu, dalam mode salinan tetap, jika data kotor dihasilkan, kesalahan hanya dilaporkan untuk catatan data kotor tersebut, dan data sisanya mungkin sebagian tertulis atau sepenuhnya gagal ditulis.

  • Pada versi sebelum Hologres V3.0, hanya satu catatan yang dihasilkan untuk operasi SALIN dalam tabel hologres.hg_query_log gudang metadata. Pada Hologres V3.0 dan versi lebih baru, dua catatan dihasilkan untuk operasi SALIN dalam gudang metadata. Satu catatan mencatat operasi SALIN, dan catatan lainnya mencatat pernyataan INSERT yang dieksekusi dalam operasi SALIN. Kedua catatan tersebut dapat dikaitkan berdasarkan ID transaksi. Contoh:

    SELECT
        query_id,
        query,
        extended_info
    FROM
        hologres.hg_query_log
    WHERE
        extended_info ->> 'source_trx' = '<transaction_id>' -- Anda bisa mendapatkan ID transaksi berdasarkan nilai bidang trans_id dalam catatan operasi SALIN.
    ORDER BY
        query_start
    ;

Sintaksis

Sintaksis pernyataan SALIN:

COPY nama_tabel [ ( nama_kolom [, ...] ) ]
    FROM STDIN
    [ [ WITH ] ( opsi [, ...] ) ]

COPY { ( query ) }
    TO STDOUT
    [ [ WITH ] ( opsi [, ...] ) ]

di mana opsi bisa salah satu dari:

    FORMAT nama_format
    DELIMITER 'karakter_pembatas'
    NULL 'string_null'
    HEADER [ boolean ]
    QUOTE 'karakter_kutipan'
    ESCAPE 'karakter_escape'
    FORCE_QUOTE { ( nama_kolom [, ...] ) | * }
    FORCE_NOT_NULL ( nama_kolom [, ...] )
    ENCODING 'nama_encoding'
    STREAM_MODE [ boolean]
    ON_CONFLICT 'none/ignore/update'

Parameter

Parameter

Deskripsi

nama_tabel

Nama tabel Hologres ke mana data diimpor.

query

Pernyataan query.

STDIN

Data diimpor dari stdin klien tertentu ke Hologres.

STDOUT

Data diekspor dari Hologres ke klien tertentu.

FORMAT

Format file. Nilai valid: TEXT, CSV, BINARY.

Nilai default: TEXT. Anda dapat mengekspor data tipe data BINARY. Anda hanya dapat mengimpor data tipe data BINARY dalam mode salinan tetap.

DELIMITER

Pembatas yang digunakan untuk memisahkan kolom.

Pembatas default adalah karakter tab dalam format teks atau koma (,) dalam format CSV. Contoh: DELIMITER AS ','.

NULL

String yang ingin Anda gunakan untuk merepresentasikan nilai null.

  • Tipe data TEXT: Nilai default adalah \N.

  • Tipe data CSV: Nilai default adalah string kosong tanpa tanda kutip.

  • Tipe data BINARY: Parameter ini tidak didukung.

HEADER

Menentukan apakah file yang akan diimpor ke atau diekspor dari Hologres berisi baris header. Nilai dalam baris header adalah nama kolom dalam file.

Catatan

Parameter ini hanya valid untuk data tipe data CSV.

QUOTE

Karakter single-byte yang digunakan untuk merujuk nilai data.

Catatan

Parameter ini hanya valid untuk data tipe data CSV. Tanda kutip ganda (") digunakan secara default.

ESCAPE

Karakter single-byte yang muncul sebelum karakter yang sesuai dengan nilai parameter QUOTE.

Catatan

Parameter ini hanya valid untuk data tipe data CSV. Secara default, nilainya sama dengan nilai parameter QUOTE.

FORCE_QUOTE

Secara paksa menggunakan tanda kutip (') untuk semua nilai non-NULL dalam kolom tertentu.

Catatan

Parameter ini hanya valid jika file dalam pernyataan COPY TO menggunakan format CSV.

FORCE_NOT_NULL

Dalam kolom yang ditentukan, string yang merepresentasikan nilai NULL tidak cocok. Sebagai gantinya, nilai NULL dibaca sebagai string panjang nol.

Catatan

Parameter ini hanya valid jika file dalam pernyataan COPY FROM menggunakan format CSV.

ENCODING

Metode encoding yang ingin Anda gunakan untuk file yang akan dihasilkan. Secara default, metode encoding klien digunakan.

STREAM_MODE

Menentukan apakah menggunakan mode salinan tetap. Nilai default: FALSE. Untuk informasi lebih lanjut, lihat SALINAN TETAP. Nilai valid:

  • TRUE: Mode salinan tetap digunakan. Anda hanya dapat menggunakan mode salinan tetap saat mengimpor data ke Hologres.

  • FALSE: Mode salinan tetap tidak digunakan.

ON_CONFLICT

Kebijakan yang digunakan jika terjadi konflik kunci utama. Nilai valid:

Catatan

Nilai-nilai berikut tidak peka huruf besar/kecil jika tanda kutip tunggal tidak digunakan. Jika tanda kutip tunggal ditambahkan, mereka harus dalam huruf kecil, seperti 'none'.

  • NONE: Kesalahan dilaporkan jika terjadi konflik kunci utama.

  • IGNORE: Operasi pada catatan data dilewati jika terjadi konflik kunci utama.

  • UPDATE: Catatan data diperbarui jika terjadi konflik kunci utama.

Catatan
  • Pada versi sebelum Hologres V3.0.4, parameter ini berlaku hanya jika STREAM_MODE disetel ke TRUE.

  • Pada Hologres V3.0.4 dan versi lebih baru, parameter ini berlaku bahkan jika STREAM_MODE disetel ke FALSE (dengan parameter GUC hg_experimental_copy_enable_on_conflict diaktifkan). Saat STREAM_MODE disetel ke FALSE, kebijakan UPDATE didukung hanya jika Anda mengimpor data ke semua kolom tabel Hologres.

  • Pada Hologres V3.1.1 dan versi lebih baru, ketika STREAM_MODE disetel ke FALSE, UPDATE mendukung pengimporan kolom parsial tabel Hologres (dengan parameter GUC hg_experimental_copy_enable_on_conflict diaktifkan secara default).

Gunakan pernyataan SALIN untuk mengimpor data ke Hologres

Impor file lokal ke Hologres

Anda dapat menggunakan pernyataan SALIN untuk mengimpor file lokal ke Hologres atau mengekspor data dari Hologres ke file lokal. Untuk informasi lebih lanjut tentang prinsip dan penggunaan pernyataan SALIN, lihat SALIN dalam dokumentasi PostgreSQL.

Contoh:

  • Impor data dari stdin ke Hologres. Contoh pernyataan:

    -- Buat tabel di Hologres. 
    CREATE TABLE copy_test (
      id    int,
      age   int,
      name  text
    ) ;
    
    -- Impor data ke tabel Hologres yang dibuat. 
    COPY copy_test FROM STDIN WITH DELIMITER AS ',' NULL AS '';
    53444,24,wangming
    55444,38,ligang
    55444,38,luyong
    \.
    
    -- Query data dalam tabel Hologres. 
    SELECT * FROM copy_test;
    Catatan

    Jika Anda menggunakan klien PostgreSQL, Anda hanya dapat mengimpor data dari stdin. Di konsol HoloWeb, Anda tidak dapat mengimpor data dari stdin ke Hologres dengan menjalankan perintah.

  • Impor file CSV dari stdin ke Hologres. Contoh pernyataan:

    -- Buat tabel di Hologres. 
    CREATE TABLE partsupp ( ps_partkey     integer NOT NULL,
                            ps_suppkey     integer NOT NULL,
                            ps_availqty    integer NOT NULL,
                            ps_supplycost  float  NOT NULL,
                            ps_comment     text NOT NULL );
    
    -- Impor file CSV ke tabel Hologres yang dibuat. 
    COPY partsupp FROM STDIN WITH DELIMITER '|' CSV;
    1|2|3325|771.64|final theodolites
    1|25002|8076|993.49|ven ideas
    \.
    
    -- Query data dalam tabel Hologres. 
    SELECT * FROM partsupp;
    Catatan

    Jika Anda menggunakan klien PostgreSQL, Anda dapat mengimpor file CSV dari stdin. Di konsol HoloWeb, Anda tidak dapat mengimpor file CSV dari stdin ke Hologres dengan menjalankan perintah.

  • Impor file lokal ke Hologres. Contoh pernyataan:

    psql -U <username> -p <port> -h <endpoint> -d <databasename> -c "COPY <table> FROM STDIN WITH DELIMITER '|' CSV;" <<filename>;
    Catatan

    Jika Anda menggunakan klien PostgreSQL, Anda hanya dapat mengimpor data dari stdin. Oleh karena itu, Anda perlu mengonversi format data dalam file yang akan diimpor menjadi format input standar. Di konsol HoloWeb, Anda tidak dapat mengimpor file lokal dari stdin ke Hologres dengan menjalankan perintah.

    Tabel berikut menjelaskan parameter dalam sintaksis sebelumnya.

    Parameter

    Deskripsi

    username

    • Akun Alibaba Cloud: ID AccessKey akun Alibaba Cloud Anda. Anda dapat memperoleh ID AccessKey dari halaman AccessKey.

      Kami sarankan Anda mengonfigurasi variabel lingkungan dan memperoleh ID AccessKey dan Rahasia AccessKey dari variabel lingkungan. Ini membantu mengurangi risiko kebocoran.

    • Akun kustom: nama pengguna akun kustom. Contoh: BASIC$abc.

    port

    Nomor port publik instance Hologres.

    Contoh: 80.

    endpoint

    Endpoint publik instance Hologres.

    Contoh: xxx-cn-hangzhou.hologres.aliyuncs.com.

    databasename

    Nama database Hologres.

    Untuk informasi lebih lanjut, lihat Buat database.

    Contoh: mydb.

    table

    Nama tabel Hologres ke mana Anda ingin mengimpor data.

    filename

    Path file lokal yang ingin Anda impor ke Hologres.

    Contoh: D:\tmp\copy_test.csv.

    Contoh berikut menjelaskan cara mengeksekusi pernyataan untuk mengimpor file lokal dari stdin ke Hologres.

    • Eksekusi pernyataan untuk mengimpor file lokal bernama copy_test dari stdin ke Hologres. 11212File standar yang diimpor termasuk konten berikut:

      01,01,name1
      02,01,name2
      03,01,name3
      04,01,name4
    • Setelah pernyataan dieksekusi, kembali ke klien PostgreSQL. Kemudian, Anda dapat menanyakan data yang baru diimpor, seperti yang ditunjukkan pada gambar berikut.查询结果

Gunakan CopyManager untuk mengimpor file dari klien JDBC ke Hologres

Anda dapat menggunakan CopyManager untuk menyalin data dalam file di klien Java Database Connectivity (JDBC).

CopyManager adalah API yang dienkapsulasi oleh JDBC untuk pernyataan SALIN PostgreSQL. Hologres kompatibel dengan protokol PostgreSQL. Anda dapat menggunakan CopyManager untuk mengimpor file klien JDBC ke Hologres atau mengekspor data dari Hologres ke file klien JDBC. Untuk informasi lebih lanjut tentang CopyManager, lihat CopyManager dalam dokumentasi JDBC.

Contoh: Gunakan CopyManager untuk mengimpor file dari klien JDBC ke Hologres. Contoh pernyataan:

package com.aliyun.hologram.test.jdbc;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;

import org.postgresql.copy.CopyManager;
import org.postgresql.core.BaseConnection;

public class jdbcCopyFile {

    public static void main(String args[]) throws Exception {
        System.out.println(copyFromFile(getConnection(), "/Users/feng/Workspace/region.tbl", "region"));
    }

    public static Connection getConnection() throws Exception {
        Class.forName("org.postgresql.Driver");
        String url = "jdbc:postgresql://endpoint:port/dbname";
        Properties props = new Properties();
    //set db user
        props.setProperty("user", "AAA");// ID AccessKey akun saat ini. Kami sarankan Anda mengonfigurasi variabel lingkungan dan memperoleh ID AccessKey dari variabel lingkungan untuk mengurangi risiko kebocoran data. 
    //set db password
        props.setProperty("password", "BBB");// Rahasia AccessKey akun saat ini. Kami sarankan Anda mengonfigurasi variabel lingkungan dan memperoleh Rahasia AccessKey dari variabel lingkungan untuk mengurangi risiko kebocoran data. 
        return DriverManager.getConnection(url, props);
    }

    /**
     * Impor file ke database Hologres. 
     *
     * @param connection
     * @param filePath
     * @param tableName
     * @return
     * @throws SQLException
     * @throws IOException
     */
    public static long copyFromFile(Connection connection, String filePath, String tableName)
            throws SQLException, IOException {
        long count = 0;
        FileInputStream fileInputStream = null;

        try {
            CopyManager copyManager = new CopyManager((BaseConnection) connection);
            fileInputStream = new FileInputStream(filePath);
            count = copyManager.copyIn("COPY " + tableName + " FROM STDIN delimiter '|' csv", fileInputStream);
        } finally {
            if (fileInputStream != null) {
                try {
                    fileInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return count;
    }
}

SALINAN TETAP

Salinan tetap adalah mode baru yang menggunakan rencana tetap untuk mengoptimalkan eksekusi pernyataan SALIN. Salinan tetap dikembangkan secara unik untuk mesin eksekusi Hologres dan hanya mendukung impor data ke Hologres. Untuk informasi lebih lanjut tentang prinsip rencana tetap, lihat Percepat eksekusi pernyataan SQL dengan menggunakan rencana tetap.

Pada Hologres V1.3.17 dan versi lebih baru, Anda dapat mengimpor data ke Hologres dengan menggunakan mode salinan tetap. Untuk informasi lebih lanjut tentang perbedaan antara mode salinan tetap dan mode impor data lainnya, lihat Perbandingan mode penulisan batch.

Jika operasi SALIN hanya dilakukan pada beberapa kolom, eksekusi mode salinan tetap bervariasi.

  • Pernyataan SALIN digunakan untuk menulis data ke beberapa kolom, dan data diperbarui sebagian. Contoh kode:

    CREATE TABLE t0 (id int NOT NULL, name text, age int, primary key(id));
    
    COPY t0(id, name) FROM STDIN
    WITH (
      STREAM_MODE TRUE,
      ON_CONFLICT UPDATE);
    
    -- Pernyataan SALIN setara dengan pernyataan INSERT INTO berikut:
    INSERT INTO t0(id, name) VALUES(?,?)
    ON CONFLICT(id) DO UPDATE SET
    id = excluded.id, name = excluded.name;
  • Pernyataan SALIN digunakan untuk menulis data ke beberapa kolom, dan kolom yang tidak ada datanya berisi nilai default. Contoh kode:

    CREATE TABLE t0 (id int not null, name text, age int DEFAULT 0, primary key(id));
    
    COPY t0(id, name) FROM STDIN
    WITH (
      STREAM_MODE TRUE,
      ON_CONFLICT UPDATE);
    
    -- Pernyataan SALIN setara dengan pernyataan INSERT INTO berikut.
    -- Untuk baris data, jika kolom id baris tersebut tidak berisi data, kolom age baris tersebut diberi nilai default.
    -- Jika data tersedia di kolom id, kolom age tidak diperbarui.
    INSERT INTO t0(id, name, age) VALUES(?, ?, default)
    ON CONFLICT(id) DO UPDATE SET
    id = excluded.id, name = excluded.name;

Gunakan pernyataan SALIN untuk mengekspor data dari Hologres

Ekspor data dari Hologres ke file lokal

Contoh:

  • Eksekusi pernyataan \copy untuk mengekspor data Hologres ke file lokal.

    Catatan

    Anda dapat menggunakan metode ini untuk mengekspor data Hologres ke file lokal hanya pada klien PostgreSQL.

    -- Buat tabel.
    CREATE  TABLE copy_to_local (
      id    int,
      age   int,
      name  text
    ) ;
    
    -- Masukkan data ke tabel yang dibuat.
    INSERT INTO copy_to_local VALUES
    (1,1,'a'),
    (1,2,'b'),
    (1,3,'c),
    (1,4,'d');
    
    -- Query data dalam tabel.
    SELECT * FROM copy_to_local;
    
    -- Ekspor data ke file lokal.
    \COPY (SELECT * FROM copy_to_local) TO '/root/localfile.txt';
  • Gunakan stdout untuk mengekspor data Hologres ke file lokal.

    Catatan

    Anda dapat menggunakan metode ini untuk mengekspor data Hologres ke file lokal hanya pada klien PostgreSQL.

    psql -U <username> -p <port> -h <endpoint> -d <databasename> -c "COPY (SELECT * FROM <tablename>) TO STDOUT WITH DELIMITER '|' CSV;" ><filename>;

Ekspor data ke OSS

Alibaba Cloud Object Storage Service (OSS) adalah layanan penyimpanan cloud yang aman, hemat biaya, dan andal. Anda dapat mengekspor data dari Hologres ke OSS dengan mengeksekusi pernyataan SALIN.

  • Batasan

    • Instance Hologres hanya mengizinkan pengguna yang diberi izin pg_execute_server_program dan superuser untuk mengeksekusi pernyataan hg_dump_to_oss untuk mengekspor data dari Hologres ke Bucket OSS tertentu. Superuser dapat mengeksekusi salah satu pernyataan berikut untuk memberikan izin pg_execute_server_program kepada pengguna:

      -- Jika database saat ini menggunakan model izin sederhana (SPM), eksekusi pernyataan berikut:
      CALL spm_grant('pg_execute_server_program','ID akun Alibaba Cloud, alamat email Alibaba, atau akun pengguna RAM');
      
      -- Jika database saat ini menggunakan model otorisasi PostgreSQL standar, eksekusi pernyataan berikut:
      GRANT pg_execute_server_program TO ID akun Alibaba Cloud, alamat email Alibaba Cloud, atau akun pengguna RAM;
    • Jumlah data yang dapat diekspor dari Hologres ke OSS sekaligus maksimal 5 GB.

  • Deskripsi pernyataan

    • Pernyataan COPY TO:

      COPY ( query ) TO { PROGRAM 'command' | STDOUT }
          [ [ WITH ] ( option [, ...] ) ]

      Parameter PROGRAM menentukan pernyataan yang ingin Anda eksekusi. Data yang akan diekspor ditulis ke input standar pernyataan tersebut. Untuk informasi lebih lanjut tentang parameter lainnya, lihat Parameter.

    • Pernyataan hg_dump_to_oss: Pernyataan ini harus digunakan bersama dengan pernyataan COPY TO.

      COPY (query) TO PROGRAM 'hg_dump_to_oss --AccessKeyId <accessid> --AccessKeySecret <accesskey> --Endpoint <ossendpoint> --BucketName <bucketname> --DirName <dirname> --FileName <filename> --BatchSize <xxx> ' (DELIMITER ',', HEADER true, FORMAT CSV);
      Penting

      Nilai parameter DirName tidak boleh dimulai dengan karakter seperti garis miring (/) atau backslash (\).

      Tabel berikut menjelaskan parameter dalam sintaksis sebelumnya.

      Parameter

      Deskripsi

      Contoh nilai

      query

      Pernyataan query.

      select * from dual;

      AccessKeyId

      ID AccessKey akun Alibaba Cloud Anda.

      Anda dapat memperoleh ID AccessKey di halaman AccessKey.

      Kami sarankan Anda mengonfigurasi variabel lingkungan dan memperoleh ID AccessKey dan Rahasia AccessKey dari variabel lingkungan untuk mengurangi risiko kebocoran data.

      Tidak ada

      AccessKeySecret

      Rahasia AccessKey yang sesuai dengan ID AccessKey.

      Kami sarankan Anda mengonfigurasi variabel lingkungan dan memperoleh ID AccessKey dan Rahasia AccessKey dari variabel lingkungan untuk mengurangi risiko kebocoran data.

      Tidak ada

      Endpoint

      Endpoint jaringan klasik Bucket OSS. Anda dapat memperoleh endpoint menggunakan salah satu metode berikut:

      • Anda dapat melihat endpoint jaringan klasik di halaman detail bucket. Untuk pergi ke halaman detail bucket, masuk ke konsol OSS dan klik nama bucket di halaman Buckets.

      • Anda dapat memperoleh endpoint dari Wilayah dan endpoint OSS di cloud publik berdasarkan wilayah OSS.

      oss-cn-beijing-internal.aliyuncs.com

      BucketName

      Nama Bucket OSS.

      dummy_bucket

      DirName

      Direktori OSS tempat data diekspor.

      testdemo/

      FileName

      Opsional. Nama file di Bucket OSS.

      Catatan

      Nama file tidak boleh mengandung karakter berikut: ;#'|?~<()"$\{}[]&*\n\r.

      file_name

      BatchSize

      Jumlah baris yang diproses oleh pernyataan hg_dump_to_oss dalam satu waktu. Nilai default: 1000.

      5000

      DELIMITER

      Pembatas yang ingin Anda gunakan untuk memisahkan bidang dalam file yang diekspor. Pembatas default adalah karakter tab (\t).

      ,

    • Contoh

      Contoh berikut menunjukkan cara mengeksekusi pernyataan hg_dump_to_oss dan COPY TO di Hologres.

      -- Dump data dari tabel internal Hologres ke Bucket OSS yang ditentukan.
      COPY (SELECT * FROM holo_test LIMIT 2) TO PROGRAM 'hg_dump_to_oss --AccessKeyId <access id> --AccessKeySecret <access key> --Endpoint oss-cn-hangzhou-internal.aliyuncs.com --BucketName hologres-demo --DirName holotest/ --FileName file_name --BatchSize 3000' DELIMITER ',';
      
      -- Dump data dari tabel asing Hologres ke Bucket OSS yang ditentukan.
      COPY (SELECT * FROM foreign_holo_test LIMIT 20) TO PROGRAM 'hg_dump_to_oss --AccessKeyId <access id> --AccessKeySecret <access key> --Endpoint oss-cn-hangzhou-internal.aliyuncs.com --BucketName hologres-demo --DirName holotest/ --FileName file_name --BatchSize 3000' (DELIMITER ',', HEADER true);
      
      -- Dump data dari tabel Hologres ke Bucket OSS yang ditentukan di wilayah lain.
      COPY (SELECT * FROM holo_test_1 LIMIT 20) TO PROGRAM 'hg_dump_to_oss --AccessKeyId <access id> --AccessKeySecret <access key> --Endpoint oss-cn-beijing-internal.aliyuncs.com --BucketName hologres-demo --DirName holotest/ --FileName file_name --BatchSize 3000' (DELIMITER ',', HEADER true, FORMAT CSV);
      Catatan

      Anda dapat mengekspor data dari Hologres ke Bucket OSS di wilayah lain. Misalnya, Anda dapat mengekspor data dari instance Hologres di wilayah China (Hangzhou) ke Bucket OSS di wilayah China (Beijing).

    • Kesalahan umum dan pemecahan masalah

      Tabel berikut menjelaskan kesalahan umum dan solusinya.

      Pesan kesalahan

      Solusi

      ERROR: syntax error at or near ")"LINE 1: COPY (select 1,2,3 from ) TO PROGRAM 'hg_dump_to_oss2 --Acce...

      Pesan kesalahan ini dilaporkan karena pernyataan query yang ditentukan dalam parameter query tidak valid. Periksa dan perbaiki pernyataan query.

      DETAIL: child process exited with exit code 255

      Pesan kesalahan ini dilaporkan karena jenis jaringan yang ditentukan untuk Bucket OSS tidak valid. Untuk mengakses Bucket OSS di Alibaba Cloud public cloud, gunakan endpoint jaringan klasik Bucket OSS.

      DETAIL: command not found

      Pesan kesalahan ini dilaporkan karena parameter program dalam pernyataan DUMP TO OSS tidak disetel ke hg_dump_to_oss

      ERROR: program "hg_dump_to_oss ..." failed DETAIL: child process exited with exit code 101

      Pesan kesalahan ini dilaporkan karena parameter AccessKeyId yang ditentukan tidak valid. Gunakan ID AccessKey akun Alibaba Cloud Anda.

      ERROR: program "hg_dump_to_oss ..." failed DETAIL: child process exited with exit code 102

      Pesan kesalahan ini dilaporkan karena parameter AccessKeySecret yang ditentukan tidak valid. Gunakan Rahasia AccessKey akun Alibaba Cloud Anda.

      ERROR: program "hg_dump_to_oss ..." failed DETAIL: child process exited with exit code 103

      Pesan kesalahan ini dilaporkan karena parameter Endpoint yang ditentukan tidak valid. Gunakan endpoint jaringan klasik yang benar dari Bucket OSS.

      ERROR: program "hg_dump_to_oss ..." failed DETAIL: child process exited with exit code 104

      Pesan kesalahan ini dilaporkan karena parameter BucketName yang ditentukan tidak valid. Gunakan nama bucket yang benar.

      ERROR: program "hg_dump_to_oss ..." failed DETAIL: child process exited with exit code 105

      Pesan kesalahan ini dilaporkan karena parameter yang diperlukan dibiarkan kosong. Periksa apakah semua parameter yang diperlukan telah ditentukan dengan benar.

      ERROR: program "hg_dump_to_oss ..." failed DETAIL: child process exited with exit code 255

      Pesan kesalahan ini dilaporkan karena server tempat instance Hologres Anda berada tidak dapat terhubung ke jaringan tempat Bucket OSS yang ditentukan berada. Ubah endpoint Bucket OSS yang ditentukan. Misalnya, Anda dapat menggunakan endpoint jaringan klasik Bucket OSS. Untuk informasi lebih lanjut tentang endpoint Bucket OSS, lihat Wilayah dan endpoint OSS.

Gunakan CopyManager untuk mengekspor data dari Hologres ke file di klien JDBC

Contoh: Gunakan CopyManager untuk mengekspor data dari Hologres ke file di klien JDBC. Contoh kode:

import org.postgresql.copy.CopyManager;
import org.postgresql.core.BaseConnection;

import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class copy_to_local_file {

    public static void main(String args[]) throws Exception {
        System.out.println(copyToFile(getConnection(), "/Users/feng/Workspace/region.tbl", "select * from region"));
    }

    public static Connection getConnection() throws Exception {
        Class.forName("org.postgresql.Driver");
        String url = "jdbc:postgresql://endpoint:port/dbname";
        Properties props = new Properties();
    //set db user
        props.setProperty("user", "AAA");// ID AccessKey akun saat ini. Kami sarankan Anda mengonfigurasi variabel lingkungan dan memperoleh ID AccessKey dari variabel lingkungan untuk mengurangi risiko kebocoran data. 
    //set db password
        props.setProperty("password", "BBB");// Rahasia AccessKey akun saat ini. Kami sarankan Anda mengonfigurasi variabel lingkungan dan memperoleh Rahasia AccessKey dari variabel lingkungan untuk mengurangi risiko kebocoran data. 
        return DriverManager.getConnection(url, props);
    }

    /**
     * Impor data ke file klien JDBC. 
     *
     * @param connection
     * @param filePath
     * @param SQL_Query
     * @return
     * @throws SQLException
     * @throws IOException
     */
    public static String copyToFile(Connection connection, String filePath, String SQL_Query)
            throws SQLException, IOException {

        FileOutputStream fileOutputStream = null;

        try {
            CopyManager copyManager = new CopyManager((BaseConnection)connection);
            fileOutputStream = new FileOutputStream(filePath);
            copyManager.copyOut("COPY " + "(" + SQL_Query + ")" + " TO STDOUT DELIMITER '|' csv ", fileOutputStream);
        } finally {
            if (fileOutputStream != null) {
                try {
                    fileOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return filePath;
    }
}