Object Storage Service (OSS) kompatibel dengan protokol Amazon Simple Storage Service (Amazon S3). Anda dapat menggunakan mesin tabel S3 atau fungsi tabel S3 dalam kluster E-MapReduce (EMR) ClickHouse untuk membaca dan menulis data ke OSS. Topik ini menjelaskan cara mengimpor data dari OSS ke kluster ClickHouse serta mengekspor data dari kluster ClickHouse ke OSS.
Prasyarat
Bucket telah dibuat di OSS. Untuk informasi lebih lanjut, lihat Buat Bucket.
Kluster EMR ClickHouse telah dibuat. Untuk informasi lebih lanjut, lihat Buat Kluster ClickHouse.
Impor data dari OSS ke kluster ClickHouse
Langkah 1: Buat tabel bisnis
Masuk ke kluster ClickHouse melalui mode SSH. Untuk informasi lebih lanjut, lihat Masuk ke Kluster.
Jalankan perintah berikut untuk memulai klien ClickHouse:
clickhouse-client -h core-1-1 -mCatatanDalam perintah contoh, core-1-1 adalah nama node inti yang Anda masuki. Jika kluster memiliki beberapa node inti, Anda dapat masuk ke salah satu node tersebut.
Eksekusi pernyataan berikut untuk membuat database bernama product dan tabel bisnis bernama orders dalam database product:
CREATE DATABASE IF NOT EXISTS product ON CLUSTER cluster_emr; CREATE TABLE IF NOT EXISTS product.orders ON CLUSTER cluster_emr ( `uid` UInt32, `date` DateTime, `skuId` UInt32, `order_revenue` UInt32 ) Engine = ReplicatedMergeTree('/cluster_emr/product/orders/{shard}', '{replica}') PARTITION BY toYYYYMMDD(date) ORDER BY toYYYYMMDD(date); CREATE TABLE IF NOT EXISTS product.orders_all ON CLUSTER cluster_emr ( `uid` UInt32, `date` DateTime, `skuId` UInt32, `order_revenue` UInt32 ) Engine = Distributed(cluster_emr, product, orders, rand());CatatanDalam kode contoh, {shard} dan {replica} adalah makro yang secara otomatis dihasilkan oleh Alibaba Cloud EMR untuk kluster ClickHouse dan dapat digunakan langsung.
Langkah 2: Impor data
Gunakan mesin tabel S3 untuk mengimpor data
Mesin tabel Hadoop Distributed File System (HDFS) ClickHouse dapat membaca file data dalam format tertentu dari alamat OSS yang ditentukan. Sintaks:
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [NULL|NOT NULL] [DEFAULT|MATERIALIZED|ALIAS expr1] [compression_codec] [TTL expr1],
name2 [type2] [NULL|NOT NULL] [DEFAULT|MATERIALIZED|ALIAS expr2] [compression_codec] [TTL expr2],
...
)
ENGINE = S3(path, [access_key_id, access_key_secret,] format, [compression]);Parameter | Deskripsi |
db | Nama database. |
table_name | Nama tabel. |
name1/name2 | Nama kolom dalam tabel. |
tyep1/type2 | Tipe data kolom dalam tabel. |
path | Path OSS objek yang disimpan dalam bucket OSS. Untuk informasi tentang endpoint yang digunakan oleh kluster ClickHouse untuk mengakses bucket OSS, lihat Akses ke sumber daya OSS dari instance ECS menggunakan endpoint internal OSS. Anda dapat mengatur parameter path ke URL virtual-hosted atau URL path-style. Kami merekomendasikan Anda mengatur parameter ini ke URL virtual-hosted. Nilai parameter path mendukung wildcard berikut:
|
access_key_id | ID AccessKey akun Alibaba Cloud Anda. |
access_key_secret | Rahasia AccessKey akun Alibaba Cloud Anda. |
format | Format objek yang disimpan dalam path. Format file seperti CSV dan XML didukung. Untuk informasi lebih lanjut, lihat Format untuk Data Input dan Output. |
compression | Format kompresi. Parameter ini opsional. Jika Anda tidak menentukan parameter ini, sistem menggunakan format kompresi berdasarkan ekstensi nama file. Anda dapat menentukan parameter ini berdasarkan versi kluster EMR yang Anda buat:
|
Buat tabel untuk membaca data dari OSS.
Unduh objek contoh orders.csv dan unggah objek tersebut ke OSS. Dalam contoh ini, objek diunggah ke direktori root bucket OSS bernama test.
Eksekusi pernyataan berikut untuk membuat tabel OSS dan gunakan mesin tabel S3:
CREATE DATABASE IF NOT EXISTS oss ON CLUSTER cluster_emr; CREATE TABLE oss.orders_oss ( uid UInt32, date DateTime, skuId UInt32, order_revenue UInt32 ) ENGINE = S3('http://test.oss-cn-beijing-internal.aliyuncs.com/orders.csv', '<access_key_id>', '<access_key_secret>', 'CSV');CatatanDalam kode contoh, http://test.oss-cn-beijing-internal.aliyuncs.com/orders.csv adalah path ke objek orders.csv dalam bucket OSS bernama test di wilayah China (Beijing).
Eksekusi pernyataan berikut untuk mengimpor data ke tabel product.orders_all:
INSERT INTO product.orders_all SELECT uid, date, skuId, order_revenue FROM oss.orders_oss;Eksekusi pernyataan berikut untuk melihat data dalam tabel dan memeriksa konsistensi data:
Kueri data dalam tabel orders_all.
SELECT count(1) FROM product.orders_all;Kueri data dalam tabel orders_oss.
SELECT count(1) FROM oss.orders_oss;
Gunakan fungsi tabel S3 untuk mengimpor data
Fungsi tabel S3 ClickHouse dapat membaca file data dari alamat HDFS yang ditentukan dan mengembalikan tabel dengan skema yang ditentukan. Sintaks:
s3(path, [access_key_id, access_key_secret,] format, structure, [compression])Parameter | Deskripsi |
| Path OSS objek yang disimpan dalam bucket OSS. Untuk informasi tentang endpoint yang digunakan oleh kluster ClickHouse untuk mengakses bucket OSS, lihat Akses ke sumber daya OSS dari instance ECS menggunakan endpoint internal OSS. Anda dapat mengatur parameter path ke URL virtual-hosted atau URL path-style. Kami merekomendasikan Anda mengatur parameter ini ke URL virtual-hosted. Nilai parameter path mendukung wildcard berikut:
|
| ID AccessKey akun Alibaba Cloud Anda. |
| Rahasia AccessKey akun Alibaba Cloud Anda. |
| Format objek yang disimpan dalam path. Format file seperti CSV dan XML didukung. Untuk informasi lebih lanjut, lihat Format untuk Data Input dan Output. |
| Tipe data bidang dalam tabel. Contoh: column1 UInt32 dan column2 String. |
| Format kompresi. Parameter ini opsional. Jika Anda tidak menentukan parameter ini, sistem menggunakan format kompresi berdasarkan ekstensi nama file. Anda dapat menentukan parameter ini berdasarkan versi kluster EMR yang Anda buat:
|
Gunakan fungsi tabel S3 untuk mengimpor data ke kluster ClickHouse.
INSERT INTO product.orders_all SELECT uid, date, skuId, order_revenue FROM s3('http://test.oss-cn-beijing-internal.aliyuncs.com/orders.csv', '<your-access-key>', '<your-access-secret>', 'CSV', 'uid UInt32, date DateTime, skuId UInt32, order_revenue UInt32');Eksekusi pernyataan berikut untuk melihat data dalam tabel dan memeriksa konsistensi data:
Kueri data dalam tabel orders_all.
SELECT count(1) FROM product.orders_all;Kueri data dalam tabel orders_oss.
SELECT count(1) FROM oss.orders_oss;
Ekspor data dari kluster ClickHouse ke OSS
Langkah 1: Buat tabel bisnis
Dalam contoh ini, skema tabel bisnis yang digunakan untuk ekspor data sama dengan yang digunakan untuk impor data. Untuk informasi lebih lanjut, lihat Langkah 1: Buat Tabel Bisnis.
Langkah 2: Persiapkan data
Eksekusi pernyataan berikut untuk menyisipkan data ke tabel bisnis product.orders_all sebagai persiapan untuk operasi ekspor selanjutnya:
INSERT INTO product.orders_all VALUES (60333391,'2021-08-04 11:26:01',49358700,89) (38826285,'2021-08-03 10:47:29',25166907,27) (10793515,'2021-07-31 02:10:31',95584454,68) (70246093,'2021-08-01 00:00:08',82355887,97) (70149691,'2021-08-02 12:35:45',68748652,1) (87307646,'2021-08-03 19:45:23',16898681,71) (61694574,'2021-08-04 23:23:32',79494853,35) (61337789,'2021-08-02 07:10:42',23792355,55) (66879038,'2021-08-01 16:13:19',95820038,89);Opsional. Tentukan metode ekspor untuk mencegah kegagalan jika objek tempat Anda ingin menulis data sudah ada. Anda dapat menentukan metode ekspor untuk kluster EMR versi V5.8.0, V3.45.0, dan versi minor terbaru mereka.
Ekspor inkremental
Setelah mengonfigurasi parameter berikut, jika objek tempat Anda ingin menulis data sudah ada di OSS, objek baru akan dibuat dalam direktori terkait untuk menyimpan data inkremental.
set s3_create_new_file_on_insert=1Ekspor timpa
Setelah mengonfigurasi parameter berikut, jika objek tempat Anda ingin menulis data sudah ada di OSS, data yang ingin Anda tulis akan menimpa data yang ada dalam objek terkait. Lanjutkan dengan hati-hati.
set s3_truncate_on_insert=1
Langkah 3: Ekspor data
Gunakan mesin tabel S3 untuk mengekspor data
Eksekusi pernyataan berikut untuk membuat tabel S3:
CREATE TABLE oss.orders_oss ( uid UInt32, date DateTime, skuId UInt32, order_revenue UInt32 ) ENGINE = S3('http://test.oss-cn-beijing-internal.aliyuncs.com/orders.csv', '<access_key_id>', '<access_key_secret>', 'CSV');Eksekusi pernyataan berikut untuk menulis data ke tabel:
-- Dalam contoh ini, tabel bisnis product.orders_all digunakan. INSERT INTO oss.orders_oss SELECT uid, date, skuId, order_revenue FROM product.orders_all;CatatanSelama ekspor data, ClickHouse membuat objek dalam path terkait dan menulis data ke objek tersebut. Secara default, jika objek tempat Anda ingin menulis data sudah ada di OSS, ekspor data gagal. Anda dapat mengonfigurasi parameter untuk kluster EMR versi V5.8.0, V3.45.0, dan versi minor terbaru mereka untuk mencegah kegagalan.
Lihat data di Konsol OSS.
Gunakan fungsi tabel HDFS untuk mengekspor data
Eksekusi pernyataan berikut untuk mengekspor data:
INSERT INTO FUNCTION s3('http://test.oss-cn-beijing-internal.aliyuncs.com/orders.csv', '<your-access-key>', '<your-access-secret>', 'CSV', 'uid UInt32, date DateTime, skuId UInt32, order_revenue UInt32') SELECT uid, date, skuId, order_revenue FROM product.orders_all;CatatanSelama ekspor data, ClickHouse membuat objek dalam path terkait dan menulis data ke objek tersebut. Secara default, jika objek tempat Anda ingin menulis data sudah ada di OSS, ekspor data gagal. Anda dapat mengonfigurasi parameter untuk kluster EMR versi V5.8.0, V3.45.0, dan versi minor terbaru mereka untuk mencegah kegagalan.
Lihat data di Konsol OSS.
Konfigurasikan parameter terkait OSS
profil
Profil yang Didukung
Jika Anda menggunakan metode unggah multipart untuk mengunggah file ke OSS, Anda dapat menggunakan parameter
s3_min_upload_part_sizeuntuk menentukan ukuran minimum setiap bagian dalam file. Ukuran minimum default adalah 512 MB. Nilai parameter ini harus berupa integer dengan tipe nilai UInt64.Metode Konfigurasi
Kode contoh berikut menunjukkan cara menentukan parameter s3_min_upload_part_size dalam satu kueri SQL:
INSERT INTO OSS_TABLE SELECT ... FROM ... SETTINGS s3_min_upload_part_size=1073741824;Kode contoh berikut menunjukkan cara menentukan parameter s3_min_upload_part_size dalam sesi:
SET s3_min_upload_part_size=1073741824; INSERT INTO OSS_TABLE SELECT ... FROM ... ;Kode contoh berikut menunjukkan cara menentukan parameter s3_min_upload_part_size untuk tabel:
CREATE TABLE OSS_TABLE ( ... ) ENGINE = s3(...) SETTINGS s3_min_upload_part_size=1073741824;Tentukan parameter s3_min_upload_part_size untuk pengguna:
Pada tab Configure halaman layanan ClickHouse di konsol EMR, klik tab server-users. Pada tab ini, klik Tambah Item Konfigurasi. Dalam kotak dialog Tambah Item Konfigurasi, tambahkan item konfigurasi dengan key users.<YourUserName>.s3_min_upload_part_size dan value 1073741824.
konfigurasi
Kode contoh berikut menunjukkan cara menentukan parameter terkait OSS dalam kluster EMR ClickHouse:
<s3>
<endpoint-name>
<endpoint>https://oss-cn-beijing-internal.aliyuncs.com/bucket</endpoint>
<access_key_id>ACCESS_KEY_ID</access_key_id>
<secret_access_key>ACCESS_KEY_SECRET</secret_access_key>
</endpoint-name>
</s3>Tabel berikut menjelaskan parameter dalam kode contoh.
Parameter | Deskripsi |
endpoint-name | Informasi tentang endpoint. |
endpoint | Endpoint yang digunakan untuk mengakses OSS. Untuk informasi lebih lanjut, lihat Nama domain OSS. |
access_key_id | ID AccessKey akun Alibaba Cloud Anda. |
secret_access_key | Rahasia AccessKey akun Alibaba Cloud Anda. |
Anda juga dapat masuk ke tab Configure halaman layanan ClickHouse di konsol EMR dan klik tab server-config untuk menambahkan konfigurasi kustom menggunakan salah satu dari metode berikut.
Metode | Deskripsi |
Metode 1 | Tambahkan item konfigurasi dengan key oss.<endpoint-name>.endpoint, oss.<endpoint-name>.access_key_id, dan oss.<endpoint-name>.secret_access_key dan tentukan nilainya. Catatan Anda harus mengganti |
Metode 2 | Tambahkan item konfigurasi dengan kunci oss dan nilai dalam format berikut: Catatan Anda harus mengganti nilai parameter dengan endpoint sebenarnya, ID AccessKey, dan Rahasia AccessKey. |
Setelah menyelesaikan konfigurasi sebelumnya, Anda dapat mengeksekusi pernyataan berikut untuk membuat tabel OSS dan menggunakan fungsi tabel OSS:
Buat tabel OSS
CREATE TABLE OSS_TABLE ( column1 UInt32, column2 String ... ) ENGINE = S3(path, format, [compression]);Gunakan fungsi tabel OSS
s3(path, format, structure, [compression]);