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 STDINmendukung 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.
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 pernyataanCOPY ( 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: |
NULL | String yang ingin Anda gunakan untuk merepresentasikan nilai null.
|
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 Catatan Parameter ini hanya valid untuk data tipe data CSV. Secara default, nilainya sama dengan nilai parameter |
FORCE_QUOTE | Secara paksa menggunakan tanda kutip (') untuk semua nilai non-NULL dalam kolom tertentu. Catatan Parameter ini hanya valid jika file dalam pernyataan |
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 |
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:
|
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'.
Catatan
|
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;CatatanJika 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;CatatanJika 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>;CatatanJika 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.
File standar yang diimpor termasuk konten berikut:01,01,name1 02,01,name2 03,01,name3 04,01,name4Setelah 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
\copyuntuk mengekspor data Hologres ke file lokal.CatatanAnda 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.
CatatanAnda 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_ossuntuk 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 pernyataanCOPY 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);PentingNilai 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.comBucketName
Nama Bucket OSS.
dummy_bucket
DirName
Direktori OSS tempat data diekspor.
testdemo/FileName
Opsional. Nama file di Bucket OSS.
CatatanNama file tidak boleh mengandung karakter berikut:
;#'|?~<()"$\{}[]&*\n\r.file_name
BatchSize
Jumlah baris yang diproses oleh pernyataan
hg_dump_to_ossdalam 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_ossdanCOPY TOdi 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);CatatanAnda 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 255Pesan 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 foundPesan 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 101Pesan 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 102Pesan 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 103Pesan 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 104Pesan 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 105Pesan 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 255Pesan 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;
}
}