Anda dapat membaca dari dan menulis ke OSS pada kluster EMR ClickHouse menggunakan mesin tabel S3 atau fungsi tabel S3. Topik ini menjelaskan cara mengimpor data dari OSS ke kluster ClickHouse dan mengekspor data dari kluster tersebut ke OSS.
Prasyarat
-
Anda telah membuat bucket di OSS. Untuk informasi selengkapnya, lihat Create buckets.
-
Anda telah membuat kluster ClickHouse. Untuk informasi selengkapnya, lihat Create a ClickHouse cluster.
Impor data dari OSS ke ClickHouse
Langkah 1: Buat tabel bisnis
-
Login ke kluster ClickHouse menggunakan SSH. Untuk informasi selengkapnya, lihat Log on to a cluster.
-
Jalankan perintah berikut untuk memulai client ClickHouse.
clickhouse-client -h core-1-1 -mCatatanContoh ini login ke node
core-1-1. Jika kluster Anda memiliki beberapa node core, Anda dapat login ke salah satunya. -
Jalankan perintah berikut untuk membuat database
productdan tabel bisnisordersdalam databaseproduct.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());CatatanE-MapReduce secara otomatis menghasilkan makro {shard} dan {replica} untuk kluster ClickHouse, yang dapat Anda gunakan langsung.
Langkah 2: Impor data
Impor dengan mesin tabel S3
Mesin tabel S3 ClickHouse membaca data dalam format tertentu dari path OSS yang ditentukan. Sintaksnya adalah sebagai berikut:
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. |
|
type1/type2 |
Tipe data kolom. |
|
path |
Path OSS. Untuk menemukan titik akhir internal guna mengakses OSS dari kluster ClickHouse Anda, lihat Mengakses sumber daya OSS dari instance ECS menggunakan titik akhir internal. Parameter path mendukung dua gaya: virtual-hosted style dan path-style. Kami menyarankan Anda menggunakan gaya virtual-hosted. Parameter path mendukung wildcard berikut:
|
|
AccessKey ID |
ID AccessKey Alibaba Cloud Anda. |
|
AccessKey Secret |
Secret AccessKey Alibaba Cloud Anda. |
|
format |
Format objek (file) yang ditentukan oleh parameter path. Contohnya termasuk CSV dan XML. Untuk informasi selengkapnya, lihat Formats for Input and Output Data. |
|
compression |
Jenis kompresi. Parameter ini opsional. Secara default, ClickHouse secara otomatis mendeteksi jenis kompresi dari ekstensi file. Tentukan jenis kompresi berdasarkan versi EMR kluster Anda:
|
-
Buat tabel untuk membaca data dari OSS.
-
Unduh file data sampel orders.csv dan unggah ke direktori root bucket OSS bernama test.
-
Jalankan perintah berikut untuk membuat tabel OSS yang menggunakan 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');CatatanPath data contoh http://test.oss-cn-beijing-internal.aliyuncs.com/orders.csv merepresentasikan file orders.csv dalam bucket bernama test di wilayah cn-beijing.
-
-
Jalankan perintah berikut untuk mengimpor data ke tabel product.orders_all.
INSERT INTO product.orders_all SELECT uid, date, skuId, order_revenue FROM oss.orders_oss; -
Jalankan perintah berikut untuk melihat data dalam tabel dan memverifikasi konsistensi data:
-
Lihat data dalam tabel orders_all.
SELECT count(1) FROM product.orders_all; -
Lihat data dalam tabel orders_oss.
SELECT count(1) FROM oss.orders_oss;
-
Impor dengan fungsi tabel S3
Fungsi tabel S3 ClickHouse membaca data dari path OSS yang ditentukan dan mengembalikan tabel dengan struktur yang telah didefinisikan. Sintaksnya adalah sebagai berikut:
s3(path, [access_key_id, access_key_secret,] format, structure, [compression])
|
Parameter |
Deskripsi |
|
|
Path OSS. Untuk menemukan titik akhir internal untuk mengakses OSS dari kluster ClickHouse Anda, lihat Access OSS resources from an ECS instance by using an internal endpoint. Parameter path mendukung dua gaya: virtual hosted style dan path style. Kami menyarankan Anda menggunakan gaya virtual hosted. path mendukung wildcard berikut:
|
|
|
ID AccessKey Alibaba Cloud Anda. |
|
|
Secret AccessKey Alibaba Cloud Anda. |
|
|
Format objek (file) yang ditentukan oleh parameter path, seperti CSV dan XML. Untuk informasi selengkapnya, lihat Formats for Input and Output Data. |
|
|
Struktur tabel, yang mendefinisikan nama kolom dan tipe datanya. Contoh: |
|
|
Jenis kompresi. Parameter ini opsional. Secara default, ClickHouse secara otomatis mendeteksi jenis kompresi dari ekstensi file. Tentukan jenis kompresi berdasarkan versi EMR kluster Anda:
|
-
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'); -
Jalankan perintah berikut untuk melihat data dalam tabel dan memverifikasi konsistensi data:
-
Lihat data dalam tabel orders_all.
SELECT count(1) FROM product.orders_all; -
Lihat data dalam tabel orders_oss.
SELECT count(1) FROM oss.orders_oss;
-
Ekspor data dari ClickHouse ke OSS
Langkah 1: Buat tabel bisnis
Tabel bisnis untuk mengekspor data menggunakan skema yang sama seperti saat mengimpor. Untuk membuat tabel, lihat Step 1: Create a business table.
Langkah 2: Siapkan data
-
Untuk menyiapkan data ekspor, jalankan perintah berikut untuk memasukkannya ke tabel bisnis product.orders_all.
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) Konfigurasikan mode ekspor. Untuk EMR-5.8.0 dan versi lebih baru atau EMR-3.45.0 dan versi lebih baru, Anda dapat mengonfigurasi mode penulisan untuk menangani kasus ketika file sudah ada di path yang ditentukan.
Ekspor inkremental
Jika file sudah ada, ClickHouse membuat file baru di direktori yang sama dan menulis data ke dalamnya.
set s3_create_new_file_on_insert=1Ekspor timpa
Jika file sudah ada, ClickHouse akan menimpa data yang ada. Gunakan pengaturan ini dengan hati-hati.
set s3_truncate_on_insert=1
Langkah 3: Ekspor data
Ekspor dengan mesin tabel S3
-
Jalankan perintah 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'); -
Jalankan perintah berikut untuk menulis data ke tabel.
-- Assume the business table is product.orders_all INSERT INTO oss.orders_oss SELECT uid, date, skuId, order_revenue FROM product.orders_all;CatatanKetika ClickHouse mengekspor data, file dibuat di path yang ditentukan dan data ditulis ke dalamnya. Secara default, ekspor gagal jika file sudah ada. Pada EMR-5.8.0, EMR-3.45.0, dan versi lebih baru, Anda dapat mengonfigurasi parameter untuk mengubah perilaku ini.
-
Lihat data di OSS console.
Ekspor dengan fungsi tabel S3
-
Jalankan perintah 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;CatatanKetika ClickHouse mengekspor data, file dibuat di path yang ditentukan dan data ditulis ke dalamnya. Secara default, ekspor gagal jika file sudah ada. Pada EMR-5.8.0, EMR-3.45.0, dan versi lebih baru, Anda dapat mengonfigurasi parameter untuk mengubah perilaku ini.
-
Lihat data di OSS console.
Konfigurasi terkait OSS
Profil
-
Profil yang didukung
Saat menggunakan unggah multi-bagian ke OSS, parameter
s3_min_upload_part_sizemenetapkan ukuran minimum untuk setiap bagian, dengan nilai default 512 MB. Nilainya harus berupa bilangan bulat UInt64. -
Metode konfigurasi
-
Untuk satu pernyataan SQL, konfigurasikan parameter sebagai berikut:
INSERT INTO OSS_TABLE SELECT ... FROM ... SETTINGS s3_min_upload_part_size=1073741824; -
Untuk satu sesi, konfigurasikan parameter sebagai berikut:
SET s3_min_upload_part_size=1073741824; INSERT INTO OSS_TABLE SELECT ... FROM ... ; -
Untuk tabel tertentu, konfigurasikan parameter sebagai berikut:
CREATE TABLE OSS_TABLE ( ... ) ENGINE = s3(...) SETTINGS s3_min_upload_part_size=1073741824; -
Untuk pengguna tertentu, konfigurasikan parameter sebagai berikut:
Pada halaman Configure layanan ClickHouse di Konsol EMR, klik tab server-users. Tambahkan parameter users.<YourUserName>.s3_min_upload_part_size dan atur nilainya menjadi 1073741824.
-
Konfigurasi
ClickHouse pada EMR mendukung parameter konfigurasi OSS berikut. Contohnya:
<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-parameter tersebut.
|
Parameter |
Deskripsi |
|
endpoint-name |
Nama titik akhir. |
|
endpoint |
Nama domain yang digunakan untuk mengakses OSS. Untuk informasi selengkapnya, lihat OSS domain names. |
|
access_key_id |
ID AccessKey Alibaba Cloud Anda. |
|
secret_access_key |
Secret AccessKey Alibaba Cloud Anda. |
Pada halaman Configure layanan ClickHouse di Konsol EMR, Anda juga dapat mengklik tab server-config untuk menambahkan konfigurasi kustom dengan dua cara berikut.
|
Metode |
Tindakan |
|
Metode 1 |
Tambahkan parameter oss.<endpoint-name>.endpoint, oss.<endpoint-name>.access_key_id, dan oss.<endpoint-name>.secret_access_key beserta nilai-nilainya. Catatan
Ganti |
|
Metode 2 |
Tambahkan parameter bernama oss dan atur nilainya ke konfigurasi berikut.
Catatan
Ganti nilai placeholder dengan milik Anda sendiri. |
Setelah menyelesaikan konfigurasi, Anda dapat membuat tabel OSS atau menggunakan fungsi tabel S3 dengan sintaks yang disederhanakan berikut:
-
Tabel OSS
CREATE TABLE OSS_TABLE ( column1 UInt32, column2 String ... ) ENGINE = S3(path, format, [compression]); -
Fungsi tabel S3
s3(path, format, structure, [compression]);