全部产品
Search
文档中心

Hologres:Impor data dari ClickHouse

更新时间:Jul 06, 2025

Topik ini menjelaskan cara memigrasikan tabel dan data dari kluster ClickHouse yang dikelola sendiri ke Hologres untuk pengembangan dan analitik data.

Prasyarat

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

  • Tambah

  • insert or ignore

  • insert or replace

  • update

Indeks

  • kunci utama

  • minmax

  • ngram

  • token

  • filter Bloom

  • bitmap

  • kamus

  • segmen

  • primer

  • pengelompokan

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 set_table_properties('x', 'dictionary_encoding_columns', 'col') untuk membangun pemetaan kamus untuk kolom tertentu.

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:

  1. Jalankan pernyataan berikut pada klien ClickHouse untuk menanyakan database di kluster ClickHouse Anda.

    Catatan

    Database 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.

  2. Jalankan pernyataan berikut pada klien ClickHouse untuk menanyakan tabel di kluster ClickHouse Anda.

    Catatan

    Anda 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';
  3. 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 pernyataan create 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.

  4. 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;
  5. 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 COPY untuk 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:

  1. 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.

  2. 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.

  3. 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 pernyataan SELECT 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.