Topik ini menjelaskan cara memigrasikan tabel dan data dari kluster ClickHouse yang dikelola sendiri ke Hologres untuk pengembangan dan analitik data.
Prasyarat
Instans Hologres telah dibeli. Untuk informasi lebih lanjut, lihat Beli Instans Hologres.
Kluster ClickHouse tersedia, dan klien ClickHouse telah diinstal. Untuk mengunduh klien, klik ClickHouse-Client. Informasi lebih lanjut tentang instalasi dan penggunaan klien dapat ditemukan di Memulai.
Klien PostgreSQL terhubung ke instans Hologres. Untuk informasi lebih lanjut, lihat Gunakan Klien PostgreSQL untuk Terhubung ke Hologres.
Informasi latar belakang
ClickHouse adalah sistem manajemen basis data berorientasi kolom yang digunakan untuk pemrosesan analitik online (OLAP). Hologres adalah layanan analitik interaktif yang dikembangkan oleh Alibaba Cloud. Hologres dapat merespons permintaan dalam waktu sub-detik dan mendukung sejumlah besar permintaan per detik (QPS). Anda dapat memigrasikan tabel dan data dari kluster ClickHouse ke Hologres untuk meningkatkan pengembangan dan analitik data.
Tabel berikut membandingkan fitur-fitur Hologres dan ClickHouse.
Kategori | Item | ClickHouse | Hologres |
Layanan | Posisi | Analisis trafik. | Gudang data real-time universal untuk analitik data dan pemrosesan data online. |
Penulisan Data | Mode Penyimpanan | Penyimpanan berorientasi kolom. | Penyimpanan berorientasi kolom dan baris. |
Visibilitas | Data dapat dilihat dalam beberapa detik setelah ditulis. Klien ClickHouse dapat mengumpulkan data untuk pemrosesan batch. Data ditulis ke tabel terdistribusi berdasarkan replikasi data di shard. | Data dapat dilihat dalam beberapa milidetik setelah ditulis. Data ditulis dengan cara yang sesuai untuk pemrosesan batch. | |
Kinerja | Baik. | Istimewa. | |
Catatan Rinci | Didukung. | Didukung. | |
Kunci Utama | ClickHouse tidak memerlukan kunci utama unik. Kunci utama tidak dapat digunakan sebagai kendala unik dan hanya digunakan untuk pengindeksan dan operasi penggabungan. | Hologres memerlukan kunci utama database standar. Kunci utama dapat digunakan sebagai kendala unik. | |
Kinerja Pembaruan | Tidak lengkap dan lemah. ClickHouse tidak mendukung pembaruan sering berdasarkan kunci utama. | Lengkap. Hologres mendukung pembaruan sering berdasarkan kunci utama. | |
Penulisan Data Real-Time | Tambah |
| |
Indeks |
|
Catatan Indeks seperti minmax, filter Bloom, dan N-gram dibuat secara otomatis dan transparan bagi pengguna. | |
Kueri | Pengoptimal | Pengoptimal berbasis aturan (RBO). | Pengoptimal berbasis biaya (CBO). |
Kueri Federasi | Didukung. ClickHouse memungkinkan Anda melakukan kueri federasi berdasarkan Sistem File Terdistribusi Hadoop (HDFS) dan mesin Kafka. | Didukung. Hologres memungkinkan Anda menggunakan pembungkus data asing (FDW) untuk langsung membaca data MaxCompute dan Hive. | |
Pra-agregasi | Didukung. Pra-agregasi dilakukan berdasarkan MergeTree. | Didukung. Pra-agregasi dilakukan berdasarkan prosedur tersimpan dan penjadwalan periodik. | |
Kueri Titik Sering | Tidak didukung. | Didukung. Lebih dari 10 juta kueri titik dapat dilakukan per detik. | |
Kinerja Kueri Kompleks Tabel Tunggal | Baik. | Baik. | |
Kinerja Penggabungan Beberapa Tabel | Buruk. | Baik. | |
Sintaks SQL | Sintaks kustom. | Hologres kompatibel dengan sintaks PostgreSQL standar dan menyediakan lebih banyak fitur. | |
Fungsi Jendela | Tidak didukung. | Didukung. | |
Transaksi | Keatomikan, konsistensi, isolasi, durabilitas (ACID) transaksi | ClickHouse tidak menjamin ACID transaksi. Misalnya, ClickHouse tidak menjamin bahwa data dapat dilihat secara instan setelah ditulis. Selain itu, ClickHouse tidak menjamin konsistensi data. | Hologres menjamin ACID transaksi hingga tingkat tertentu. Misalnya, Hologres menjamin visibilitas data untuk transaksi bahasa deskripsi data (DDL), transaksi satu baris, dan transaksi berbasis snapshot. |
Replikasi | Pemulihan bencana dan cadangan | ClickHouse menggunakan replika data untuk pemulihan bencana dan cadangan pada server Zookeeper dan ClickHouse jarak jauh. | Hologres menggunakan fitur pencatatan biner untuk mereplikasi data secara logis dan menggunakan mekanisme dasar untuk mereplikasi data secara fisik. |
Fitur Canggih | Pencatatan Biner | Tidak didukung. | Didukung. |
Pencarian Vektor | Didukung oleh ClickHouse 22.8 atau lebih baru. | Didukung. | |
Data Spasial | Tidak didukung. | Didukung. | |
Manajemen Keamanan | ClickHouse memungkinkan Anda menyesuaikan izin untuk manajemen keamanan. | Hologres kompatibel dengan model izin Postgres dan memungkinkan Anda melakukan berbagai operasi untuk mengelola izin, mengonfigurasi daftar putih alamat IP, dan menutupi data sensitif untuk manajemen keamanan. | |
Pemisahan Penyimpanan dan Komputasi | Penyimpanan dan komputasi tidak dipisahkan. Kapasitas penyimpanan pada satu server terbatas. | Penyimpanan dan komputasi dipisahkan. Kapasitas penyimpanan pada satu server hampir tidak terbatas. | |
Ketersediaan | Failover harus ditangani secara manual. | Failover dapat ditangani secara otomatis. | |
O&M | O&M kompleks, dan distribusi shard harus dipelihara secara manual. | Tidak diperlukan operasi O&M. | |
Ekosistem | Koneksi Data | Berbagai mitra ekosistem seperti Apache Kafka, Apache Flink, dan Apache Spark didukung. | Berbagai mitra ekosistem seperti Apache Flink, Apache Spark, Java Database Connectivity (JDBC), dan DataX didukung. |
Alat Business Intelligence (BI) | Sejumlah kecil alat BI seperti Tableau dan Superset didukung. | Hologres kompatibel dengan ekosistem PostgreSQL dan mendukung lebih dari 100 alat BI mainstream. |
Pemetaan tipe data
Tabel berikut menjelaskan pemetaan antara tipe data di ClickHouse dan Hologres.
Kategori | ClickHouse | Hologres |
Tanggal | Date | Date |
DateTime | TIMESTAMPTZ | |
DateTime(timezone) | TIMESTAMPTZ | |
DateTime64 | TIMESTAMPTZ | |
Nilai numerik | Int8 | Hologres tidak mendukung tipe data INT satu byte, tetapi menggunakan tipe data SMALLINT sebagai gantinya. |
Int16 | SMALLINT | |
Int32 | INT | |
Int64 | BIGINT | |
UInt8 | INT | |
UInt16 | INT | |
UInt32 | BIGINT | |
UInt64 | BIGINT | |
Float32 | FLOAT | |
Float64 | DOUBLE PRECISION | |
Decimal(P, S) | DECIMAL | |
Decimal32(S) | DECIMAL | |
Decimal64(S) | DECIMAL | |
Decimal128(S) | DECIMAL | |
Nilai boolean | ClickHouse tidak mendukung tipe data BOOLEAN, tetapi menggunakan tipe data UInt8 sebagai gantinya. | BOOLEAN |
String | String | TEXT |
FixString(N) | Hologres tidak mendukung tipe data FixedString(N), tetapi menggunakan tipe data TEXT sebagai gantinya. | |
LowCardinality | Hologres tidak mendukung tipe data LowCardinality. Hologres dapat secara cerdas mengaktifkan pengkodean kamus dan juga memungkinkan Anda memanggil fungsi | |
Nilai biner | ClickHouse tidak mendukung tipe data BINARY, tetapi menggunakan tipe data STRING atau FixedString(N) sebagai gantinya. | Hologres mendukung tipe data seperti BIT(n), VARBIT(n), BYTEA, dan CHAR(n). |
Lainnya | UUID | UUID |
Enum | Hologres tidak mendukung tipe data Enum, tetapi menggunakan tipe data TEXT sebagai gantinya. | |
Nested, Tuple, dan Array | ARRAY |
Migrasi metadata
Migrasi metadata melibatkan migrasi pernyataan DDL yang digunakan untuk membuat tabel. Untuk memigrasikan metadata, lakukan langkah-langkah berikut:
Jalankan pernyataan berikut pada klien ClickHouse untuk menanyakan database di kluster ClickHouse Anda.
CatatanDatabase bernama system dalam hasil kueri adalah database sistem. Database ini tidak perlu dimigrasi dan dapat dilewati.
clickhouse-client --host="<host>" --port="<port>" --user="<username>" --password="<password>" --query="SHOW databases" > database.list;Tabel berikut menjelaskan parameter.
Parameter
Deskripsi
host
Titik akhir kluster ClickHouse.
port
Nomor port kluster ClickHouse.
username
Nama pengguna akun yang Anda gunakan untuk masuk ke kluster ClickHouse. Pengguna harus memiliki izin untuk mengeksekusi pernyataan DML tertentu, termasuk izin baca, tulis, dan pengaturan. Pengguna juga harus memiliki izin untuk mengeksekusi pernyataan DDL.
password
Kata sandi akun yang Anda gunakan untuk masuk ke kluster ClickHouse.
Jalankan pernyataan berikut pada klien ClickHouse untuk menanyakan tabel di kluster ClickHouse Anda.
CatatanAnda dapat melewati tabel yang dikembalikan dengan nama yang dimulai dengan .inner. karena tabel-tabel ini adalah representasi internal dari tampilan materialisasi.
clickhouse-client --host="<host>" --port="<port>" --user="<username>" --password="<password>" --query="SHOW tables from <database_name>" > table.list;Tabel berikut menjelaskan parameter.
Parameter
Deskripsi
host
Titik akhir kluster ClickHouse.
port
Nomor port kluster ClickHouse.
username
Nama pengguna akun yang Anda gunakan untuk masuk ke kluster ClickHouse. Pengguna harus memiliki izin untuk mengeksekusi pernyataan DML tertentu, termasuk izin baca, tulis, dan pengaturan. Pengguna juga harus memiliki izin untuk mengeksekusi pernyataan DDL.
password
Kata sandi akun yang Anda gunakan untuk masuk ke kluster ClickHouse.
database_name
Nama database tempat tabel yang akan dimigrasi berada.
Anda juga dapat menjalankan pernyataan berikut untuk menanyakan nama semua database dan tabel di kluster ClickHouse:
select distinct database, name from system.tables where database != 'system';Jalankan pernyataan berikut pada klien ClickHouse untuk mengekspor pernyataan DDL yang digunakan untuk membuat tabel di kluster ClickHouse:
clickhouse-client --host="<host>" --port="<port>" --user="<username>" --password="<password>" --query="SHOW CREATE TABLE <database_name>.<table_name>" > table.sql;Anda juga dapat menjalankan pernyataan berikut untuk menanyakan tabel sistem:
SELECT * FROM system.tables where database = '<database_name>' and engine != 'Distributed';Tabel berikut menjelaskan konversi bidang tabel sistem di ClickHouse saat metadata dimigrasikan dari ClickHouse ke Hologres.
Parameter
Deskripsi
database
Database di ClickHouse, yang sesuai dengan skema di Hologres yang menggunakan sintaks PostgreSQL. Pernyataan
create database "<database_name>";di ClickHouse sesuai dengan pernyataancreate schema "<schema_name>";di Hologres.name
Nama tabel ClickHouse. Tidak diperlukan konversi.
engine
Hologres tidak memiliki tabel terdistribusi. Tabel di Hologres tidak diklasifikasikan menjadi tabel terdistribusi dan tabel lokal. Tabel di Hologres adalah tabel individu untuk penyimpanan dan kueri terdistribusi. Saat Anda menanyakan tabel sistem di database ClickHouse, Anda harus melewati tabel yang memenuhi kondisi
engine='Distributed'.is_temporary
Menentukan apakah tabel tersebut merupakan tabel sementara di ClickHouse. Tabel sementara tidak perlu dimigrasi. Selain itu, Hologres tidak mendukung tabel sementara.
data_paths
metadata_path
metadata_modification_time
Bidang-bidang ini dapat diabaikan.
dependencies_database
dependencies_table
Bidang-bidang ini diperlukan saat menggunakan tampilan dan tampilan materialisasi. Di Hologres, tampilan dengan dependensi harus dibuat sebelum tabel dasar dibuat. Hologres tidak mendukung tampilan materialisasi.
create_table_query
Pernyataan DDL yang digunakan untuk membuat tabel sumber ClickHouse. Untuk membuat tabel tujuan Hologres, pernyataan tersebut harus dikonversi menjadi pernyataan DDL yang menggunakan sintaks PostgreSQL.
engine_full
Detail mesin. Bidang ini dapat diabaikan.
partition_key
Kolom kunci partisi tabel ClickHouse, yang sesuai dengan kolom kunci partisi tabel Hologres. Misalnya, jika parameter partition_key tabel ClickHouse disetel ke col1, Anda harus menambahkan klausa
partition by list (col1);ke pernyataan yang digunakan untuk membuat tabel Hologres.sorting_key
Kunci urutan tabel ClickHouse. Kunci urutan sesuai dengan kunci segmen atau kunci pengelompokan tabel Hologres.
primary_key
Kunci utama tabel ClickHouse. Kunci utama sesuai dengan kunci utama dalam pernyataan DDL yang digunakan untuk membuat tabel Hologres.
sampling_key
Kunci yang digunakan untuk pengambilan sampel. Pernyataan DDL Hologres tidak mendukung pengambilan sampel.
storage_policy
Kebijakan penyimpanan database ClickHouse. Bidang ini dapat diabaikan.
Konversikan pernyataan DDL yang digunakan untuk membuat tabel sumber ClickHouse menjadi pernyataan yang digunakan untuk membuat tabel tujuan Hologres. Hologres kompatibel dengan sintaks PostgreSQL.
Anda harus mengonversi pernyataan DDL berdasarkan deskripsi konversi bidang dalam tabel sebelumnya dan bagian Pemetaan Tipe Data dalam topik ini. Contoh:
Konversikan pernyataan DDL yang digunakan untuk membuat tabel lineitem di kluster ClickHouse menjadi pernyataan DDL yang digunakan untuk membuat tabel tujuan Hologres.
Kode contoh berikut menunjukkan pernyataan DDL yang digunakan untuk membuat tabel lineitem di kluster ClickHouse:
-- lineitem on ClickHouse CREATE TABLE lineitem_local ON CLUSTER default( l_orderkey UInt64, l_partkey UInt32, l_suppkey UInt32, l_linenumber UInt32, l_quantity decimal(15,2), l_extendedprice decimal(15,2), l_discount decimal(15,2), l_tax decimal(15,2), l_returnflag LowCardinality(String), l_linestatus LowCardinality(String), l_shipdate Date, l_commitdate Date, l_receiptdate Date, l_shipinstruct LowCardinality(String), l_shipmode LowCardinality(String), l_comment LowCardinality(String) ) ENGINE = MergeTree PARTITION BY toYear(l_shipdate) ORDER BY (l_orderkey, l_linenumber); CREATE TABLE lineitem on cluster default as lineitem_local ENGINE = Distributed(default, default, lineitem_local, l_orderkey);Kode contoh berikut menunjukkan pernyataan DDL yang telah dikonversi yang digunakan untuk membuat tabel tujuan Hologres:
-- lineitem on Hologres -- buat grup tabel dengan 32 shard CALL hg_create_table_group ('lineitem_tg', 32); BEGIN; CREATE TABLE LINEITEM ( L_ORDERKEY BIGINT NOT NULL, L_PARTKEY INT NOT NULL, L_SUPPKEY INT NOT NULL, L_LINENUMBER INT NOT NULL, L_QUANTITY DECIMAL(15,2) NOT NULL, L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL, L_DISCOUNT DECIMAL(15,2) NOT NULL, L_TAX DECIMAL(15,2) NOT NULL, L_RETURNFLAG TEXT NOT NULL, L_LINESTATUS TEXT NOT NULL, L_SHIPDATE TIMESTAMPTZ NOT NULL, L_COMMITDATE TIMESTAMPTZ NOT NULL, L_RECEIPTDATE TIMESTAMPTZ NOT NULL, L_SHIPINSTRUCT TEXT NOT NULL, L_SHIPMODE TEXT NOT NULL, L_COMMENT TEXT NOT NULL, PRIMARY KEY (L_ORDERKEY,L_LINENUMBER) ); CALL set_table_property('LINEITEM', 'clustering_key', 'L_SHIPDATE,L_ORDERKEY'); CALL set_table_property('LINEITEM', 'segment_key', 'L_SHIPDATE'); CALL set_table_property('LINEITEM', 'table_group', 'lineitem_tg'); CALL set_table_property('LINEITEM', 'distribution_key', 'L_ORDERKEY'); -- kolom dengan LowCardinality CALL set_table_property('LINEITEM', 'bitmap_columns', 'L_RETURNFLAG,L_LINESTATUS,L_SHIPINSTRUCT,L_SHIPMODE,L_COMMENT'); -- kolom dengan LowCardinality CALL set_table_property('LINEITEM', 'dictionary_encoding_columns', 'L_RETURNFLAG,L_LINESTATUS,L_SHIPINSTRUCT,L_SHIPMODE,L_COMMENT'); CALL set_table_property('LINEITEM', 'time_to_live_in_seconds', '31536000'); COMMIT;
Konversikan pernyataan DDL yang digunakan untuk membuat tabel customer di kluster ClickHouse menjadi pernyataan DDL yang digunakan untuk membuat tabel tujuan Hologres.
Kode contoh berikut menunjukkan pernyataan DDL yang digunakan untuk membuat tabel lineitem di kluster ClickHouse:
-- customer on ClickHouse CREATE TABLE customer_local ON CLUSTER default( c_custkey UInt32, c_name String, c_address String, c_nationkey UInt32, c_phone LowCardinality(String), c_acctbal decimal(15,2), c_mktsegment LowCardinality(String), c_comment LowCardinality(String) ) ENGINE = MergeTree ORDER BY (c_custkey); CREATE TABLE customer on cluster default as customer_local ENGINE = Distributed(default, default, customer_local, c_custkey);Kode contoh berikut menunjukkan pernyataan DDL yang telah dikonversi yang digunakan untuk membuat tabel tujuan Hologres:
-- customer on Hologres BEGIN; CREATE TABLE CUSTOMER ( C_CUSTKEY INT NOT NULL PRIMARY KEY, C_NAME TEXT NOT NULL, C_ADDRESS TEXT NOT NULL, C_NATIONKEY INT NOT NULL, C_PHONE TEXT NOT NULL, C_ACCTBAL DECIMAL(15,2) NOT NULL, C_MKTSEGMENT TEXT NOT NULL, C_COMMENT TEXT NOT NULL ); CALL set_table_property('CUSTOMER', 'distribution_key', 'C_CUSTKEY'); CALL set_table_property('CUSTOMER', 'table_group', 'lineitem_tg'); CALL set_table_property('CUSTOMER', 'bitmap_columns', 'C_CUSTKEY,C_NATIONKEY,C_NAME,C_ADDRESS,C_PHONE,C_MKTSEGMENT,C_COMMENT'); CALL set_table_property('CUSTOMER', 'dictionary_encoding_columns', 'C_NAME,C_ADDRESS,C_PHONE,C_MKTSEGMENT,C_COMMENT'); CALL set_table_property('CUSTOMER', 'time_to_live_in_seconds', '31536000'); COMMIT;
Jalankan pernyataan berikut pada klien PostgreSQL untuk mengimpor pernyataan DDL yang telah dikonversi ke instans Hologres tujuan:
PGUSER="<username>" PGPASSWORD="<password>" psql -h "<host>" -p "<port>" -d "<database_name>" -f table.sql;
Migrasi data
Anda dapat menggunakan salah satu metode berikut untuk memigrasikan data dari kluster ClickHouse ke instans Hologres:
(Direkomendasikan) Ekspor data yang ingin Anda migrasikan dari kluster ClickHouse sebagai file. Kemudian, jalankan pernyataan
COPYuntuk JDBC atau PostgreSQL untuk mengimpor file ke instans Hologres.Gunakan penyebaran Realtime Compute for Apache Flink atau pekerjaan Spark untuk membaca data dari kluster ClickHouse dan menulis data ke instans Hologres. Untuk informasi lebih lanjut, lihat Gunakan Spark untuk Mengimpor Data.
Gunakan layanan Data Integration dari DataWorks untuk membaca data dari kluster ClickHouse dan menulis data ke instans Hologres. Untuk informasi lebih lanjut, lihat Ikhtisar.
Contoh berikut menunjukkan cara mengekspor data yang ingin Anda migrasikan dari kluster ClickHouse sebagai file dan mengimpor file ke instans Hologres. Untuk menggunakan metode ini, lakukan langkah-langkah berikut:
Jalankan pernyataan berikut pada klien ClickHouse untuk mengekspor data dari kluster ClickHouse ke file CSV lokal:
clickhouse-client --host="<host>" --port="<port>" --user="<username>" --password="<password>" --query="select * from <database_name>.<table_name> FORMAT CSV" > table.csv;Tabel berikut menjelaskan parameter.
Parameter
Deskripsi
host
Titik akhir kluster ClickHouse.
port
Nomor port kluster ClickHouse.
username
Nama pengguna akun yang Anda gunakan untuk masuk ke kluster ClickHouse. Pengguna harus memiliki izin untuk mengeksekusi pernyataan DML tertentu, termasuk izin baca, tulis, dan pengaturan. Pengguna juga harus memiliki izin untuk mengeksekusi pernyataan DDL.
password
Kata sandi akun yang Anda gunakan untuk masuk ke kluster ClickHouse.
database_name
Nama database tempat tabel yang akan dimigrasi berada.
table_name
Nama tabel yang ingin Anda migrasikan dari kluster ClickHouse.
Jalankan pernyataan berikut pada klien PostgreSQL untuk mengimpor file CSV lokal ke instans Hologres:
PGUSER="<username>" PGPASSWORD="<password>" psql -h "<host>" -p "<port>" -d "<database_name>" -c "COPY <schema_name>.<table_name> FROM STDIN (FORMAT 'csv')" < table.csv;Tabel berikut menjelaskan parameter.
Parameter
Deskripsi
username
Nama pengguna akun yang Anda gunakan untuk masuk ke instans Hologres. Pengguna harus memiliki izin untuk mengeksekusi pernyataan DML tertentu, termasuk izin baca, tulis, dan pengaturan. Pengguna juga harus memiliki izin untuk mengeksekusi pernyataan DDL. Nama pengguna biasanya adalah ID AccessKey akun Alibaba Cloud Anda. Anda dapat mengarahkan pointer ke foto profil di sudut kanan atas konsol Hologres dan memilih Manajemen AccessKey untuk mendapatkan ID AccessKey.
password
Kata sandi akun yang Anda gunakan untuk masuk ke instans Hologres. Kata sandi biasanya adalah rahasia AccessKey akun Alibaba Cloud Anda. Anda dapat mengarahkan pointer ke foto profil di sudut kanan atas konsol Hologres dan memilih Manajemen AccessKey untuk mendapatkan rahasia AccessKey.
host
Titik akhir instans Hologres.
Anda dapat memperoleh informasi ini dari bagian Network Information halaman detail instans di konsol Hologres.
port
Nomor port instans Hologres.
Anda dapat memperoleh informasi ini dari bagian Network Information halaman detail instans di konsol Hologres.
database_name
Nama database Hologres ke mana file CSV lokal akan diimpor.
schema_name
Nama skema Hologres ke mana file CSV lokal akan diimpor. Nilai default: public.
table_name
Nama tabel Hologres ke mana file CSV lokal akan diimpor.
Kueri data yang diimpor pada instans Hologres untuk memverifikasi apakah impor berhasil.
Sinkronkan semua data dari database ClickHouse ke Hologres dalam mode offline
Anda dapat menggunakan tugas sinkronisasi yang disediakan oleh DataWorks Data Integration untuk menyinkronkan semua data dari database ClickHouse ke Hologres dalam mode offline. Untuk informasi lebih lanjut, lihat Sinkronkan Data dari Beberapa Tabel di Database ApsaraDB for ClickHouse ke Hologres dalam Mode Offline.
Konversi pernyataan kueri data
Pernyataan kueri data di Hologres menggunakan sintaks PostgreSQL, sedangkan yang di ClickHouse menggunakan sintaks kustom. Sintaks SQL ClickHouse sebagian kompatibel dengan sintaks SQL standar American National Standards Institute (ANSI). Sintaks SQL Hologres dan ClickHouse secara keseluruhan serupa tetapi memiliki perbedaan dalam detail. Oleh karena itu, Anda perlu mengonversi pernyataan kueri data, terutama fungsi-fungsi seperti fungsi skalar dan fungsi jendela dalam pernyataan kueri data.
Sintaks SQL ClickHouse dan Hologres memiliki perbedaan berikut:
Nama kolom dalam sintaks ClickHouse diapit oleh tanda kutip tunggal (
'), sedangkan dalam sintaks SQL Hologres diapit oleh tanda kutip ganda (").ClickHouse menggunakan pernyataan
SELECT X FROM <database_name>.<table_name>untuk menanyakan data, sedangkan Hologres menggunakan pernyataanSELECT X FROM <schema_name>.<table_name>untuk menanyakan data.Ekspresi dalam pernyataan kueri data di ClickHouse dan Hologres berbeda. Perbedaan utama terletak pada fungsi-fungsi. Tabel berikut menjelaskan pemetaan antara fungsi spesifik di ClickHouse dan Hologres. Fungsi-fungsi yang digunakan bersama oleh ClickHouse dan Hologres tidak dijelaskan.
ClickHouse
Hologres
toYear(expr)
to_char(expr, 'YYYY')
toInt32(expr)
CAST(expr as INTEGER)
uniq()
uniqCombined()
uniqCombined64()
uniqHLL12()
approx_count_distinct()
uniqExact()
count(distinct x)
quantile(level) (expr)
approx_percentile(level) WITHIN GROUP(ORDER BY expr)
quantileExact(level) (expr)
percentile_cont (level) WITHIN GROUP(ORDER BY expr)
Anda dapat menggunakan salah satu metode berikut untuk mengonversi pernyataan kueri data:
Ekspresi Reguler
Anda dapat menggunakan ekspresi reguler untuk mengonversi sintaks ClickHouse tertentu dengan pola tetap, seperti nama fungsi, tanda baca, dan ekspresi, menjadi sintaks SQL Hologres. Misalnya, Anda dapat mengonversi tanda kutip tunggal (
') dalam sintaks ClickHouse menjadi tanda kutip ganda (") dalam sintaks SQL Hologres.Ekstensi ClickHouse
Hologres dilengkapi dengan ekstensi ClickHouse dan kompatibel dengan fungsi-fungsi ClickHouse tertentu, seperti fungsi
toUInt32(). Fungsi-fungsi ini tidak perlu dikonversi sebelum digunakan di Hologres.
Contoh berikut menunjukkan cara mengonversi pernyataan kueri TPC-H tertentu yang menggunakan sintaks ClickHouse menjadi pernyataan yang menggunakan sintaks SQL Hologres:
Contoh 1
Kode contoh berikut menunjukkan pernyataan kueri TPC-H yang digunakan untuk menanyakan data di kluster ClickHouse:
-- Q1 on ClickHouse select l_returnflag, l_linestatus, sum(l_quantity) as sum_qty, sum(l_extendedprice) as sum_base_price, sum(l_extendedprice * (1 - l_discount)) as sum_disc_price, sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge, avg(l_quantity) as avg_qty, avg(l_extendedprice) as avg_price, avg(l_discount) as avg_disc, count(*) as count_order from lineitem where l_shipdate <= date '1998-12-01' - interval '90' day group by l_returnflag, l_linestatus order by l_returnflag, l_linestatus;Kode contoh berikut menunjukkan pernyataan kueri TPC-H yang telah dikonversi yang digunakan untuk menanyakan data di instans Hologres:
-- Q1 on Hologres select l_returnflag, l_linestatus, sum(l_quantity) as sum_qty, sum(l_extendedprice) as sum_base_price, sum(l_extendedprice * (1 - l_discount)) as sum_disc_price, sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge, avg(l_quantity) as avg_qty, avg(l_extendedprice) as avg_price, avg(l_discount) as avg_disc, count(*) as count_order from lineitem where l_shipdate <= date '1998-12-01' - interval '90' day group by l_returnflag, l_linestatus order by l_returnflag, l_linestatus;
Contoh 2
Kode contoh berikut menunjukkan pernyataan kueri TPC-H yang digunakan untuk menanyakan data di kluster ClickHouse:
-- Q4 on ClickHouse select o_orderpriority, count(*) as order_count from orders where o_orderdate >= date '1993-07-01' and o_orderdate < date '1993-07-01' + interval '3' month and o_orderdate in ( select o_orderdate from lineitem, orders where l_orderkey = o_orderkey and l_commitdate < l_receiptdate ) group by o_orderpriority order by o_orderpriority;Kode contoh berikut menunjukkan pernyataan kueri TPC-H yang telah dikonversi yang digunakan untuk menanyakan data di instans Hologres:
-- Q4 on Hologres select o_orderpriority, count(*) as order_count from orders where o_orderdate >= date '1993-07-01' and o_orderdate < date '1993-07-01' + interval '3' month and exists ( select * from lineitem where l_orderkey = o_orderkey and l_commitdate < l_receiptdate ) group by o_orderpriority order by o_orderpriority;
Contoh 3
Kode contoh berikut menunjukkan pernyataan kueri TPC-H yang digunakan untuk menanyakan data di kluster ClickHouse:
-- Q11 on ClickHouse select ps_partkey, sum(ps_supplycost * ps_availqty) as value from partsupp, supplier, nation where ps_suppkey = s_suppkey and s_nationkey = n_nationkey and n_name = 'GERMANY' group by ps_partkey having sum(ps_supplycost * ps_availqty) > ( select sum(ps_supplycost * ps_availqty) * toDecimal32(0.0000010000,9) from partsupp, supplier, nation where ps_suppkey = s_suppkey and s_nationkey = n_nationkey and n_name = 'GERMANY' ) order by value desc limit 100;Kode contoh berikut menunjukkan pernyataan kueri TPC-H yang telah dikonversi yang digunakan untuk menanyakan data di instans Hologres:
-- Q11 on Hologres select ps_partkey, sum(ps_supplycost * ps_availqty) as value from partsupp, supplier, nation where ps_suppkey = s_suppkey and s_nationkey = n_nationkey and n_name = 'GERMANY' group by ps_partkey having sum(ps_supplycost * ps_availqty) > ( select sum(ps_supplycost * ps_availqty) * 0.0000010000 from partsupp, supplier, nation where ps_suppkey = s_suppkey and s_nationkey = n_nationkey and n_name = 'GERMANY' ) order by value desc limit 100;
Kompatibilitas fungsi
Sintaks banyak fungsi dasar di Hologres sama dengan sintaks fungsi dasar di ClickHouse. Hologres mendukung beberapa fungsi ClickHouse atau fungsi ClickHouse yang memiliki semantik yang sama dengan fungsi Hologres. Untuk informasi lebih lanjut tentang kompatibilitas fungsi antara Hologres dan ClickHouse, lihat Fungsi ClickHouse yang Didukung.