Tüm Ürünler
Search
Belge Merkezi

Hologres:Migrate data from ClickHouse

Son Güncelleme:Oct 06, 2026

Hologres, tamamen yönetilen ve PostgreSQL ile uyumlu gerçek zamanlı bir veri ambarıdır. Bu kılavuz, kendi altyapınızda barındırdığınız bir ClickHouse örneğinden şemaları, verileri ve sorguları Hologres'e geçirme sürecini adım adım açıklar.

Önkoşullar

Başlamadan önce aşağıdaki öğelere sahip olduğunuzdan emin olun:

Arka plan

ClickHouse, çevrimiçi analitik işleme (OLAP) için tasarlanmış sütun tabanlı bir veritabanı yönetim sistemidir (DBMS). Hologres ise bu yeteneği PostgreSQL uyumluluğu, yüksek sorgu başına saniye (QPS) nokta sorguları, tam çoklu tablo JOIN desteği ve maliyet tabanlı bir iyileştirici (CBO) ile genişletir. Aşağıdaki tabloda temel farklılıklar özetlenmiştir.

Kategori Kriter ClickHouse Hologres
Ürün Amaç Ağ trafiği analizi Genel amaçlı gerçek zamanlı veri ambarı: veri analitiği ve çevrimiçi hizmetler
Yazma Depolama Sütun deposu Sütun deposu ve satır deposu
Yazma görünürlüğü Saniye düzeyinde (istemci tarafında toplu işlem gerektirir; dağıtılmış tablo yazmaları parça çoğaltmasının tamamlanmasına bağlıdır) Milisaniye düzeyinde (uyarlanabilir yazma toplu işlemi; yazmadan hemen sonra sorgulanabilir)
Yazma performansı Yüksek Çok yüksek
Ayrıntı depolama Desteklenir Desteklenir
Birincil anahtar Gerçek bir veritabanı birincil anahtarı değildir (benzersizlik kısıtlaması yoktur; yalnızca dizinleme ve toplama için kullanılır) Benzersizlik kısıtlaması desteğine sahip standart veritabanı birincil anahtarı
Güncellenebilir Eksik (birincil anahtarlara dayalı yüksek QPS güncellemelerini desteklemez) Tamamen desteklenir (birincil anahtarlara dayalı yüksek QPS güncellemelerini destekler)
Gerçek zamanlı yazma Ekleme Ekleme / yoksa ekle / varsa değiştir / güncelle
Dizin birincil anahtar, minmax, ngram, token, bloom filtresi bitmap, sözlük, segment, birincil, kümeleme (otomatik olarak minmax, bloom filtresi ve ngram dizinleri oluşturur)
Sorgu İyileştirici Kural tabanlı iyileştirici (RBO) Maliyet tabanlı iyileştirici (CBO)
Birleşik sorgu Desteklenir (HDFS ve Kafka) Desteklenir (FDW, MaxCompute ve Hive'ı doğrudan okur)
Ön toplama Desteklenir (MergeTree aracılığıyla) Desteklenir (saklı yordamlar ve zamanlanmış işler aracılığıyla)
Yüksek QPS nokta sorgusu Desteklenmez Desteklenir; QPS on milyonları aşar
Karmaşık tek tablo sorgusu İyi İyi
Çoklu tablo JOIN Zayıf İyi
SQL sözdizimi Özel sözdizimi PostgreSQL uyumlu
Pencere işlevleri Desteklenmez Desteklenir
İşlem ACID Yok (nihai tutarlılık; anında sorgulanabilirlik garantisi yok) Sınırlı (DDL işlemleri, tek satır işlemleri, anlık görüntü tabanlı görünürlük)
Olağanüstü durum kurtarma Yedekleme ZooKeeper + ClickHouse aracılığıyla çoğaltma Binlog aracılığıyla mantıksal çoğaltma; altta yatan mekanizmalar aracılığıyla fiziksel çoğaltma
Gelişmiş özellikler Binlog Yok Desteklenir
Vektör arama Desteklenir (ClickHouse 22.8+) Desteklenir
Mekansal veriler Desteklenmez Desteklenir
Güvenlik Özel izinler IP izin listeleri ve veri maskeleme ile PostgreSQL uyumlu izin modeli
Depolama-işlem ayrımı Ayrılmamış; tek düğüm kapasitesi ile sınırlı Ayrılmış; neredeyse sınırsız depolama kapasitesi
Kullanılabilirlik Manuel yük devretme Otomatik yük devretme kurtarma
İşletme ve Bakım Karmaşık (manuel parça dağıtımı) Tamamen yönetilen
Ekosistem Veri alımı Kafka, Flink, Spark Flink, Spark, JDBC, DataX
BI araçları Sınırlı (Tableau, Superset) PostgreSQL ekosistemi; 100'den fazla ana akım BI aracını destekler

Veri türü eşlemesi

ClickHouse ve Hologres farklı tür sistemleri kullanır. Aşağıdaki tablolar, her bir ClickHouse türünü Hologres eşdeğerine eşler ve dönüştürme sırasında dikkat edilmesi gereken tuzakları vurgular.

Sayısal türler

ClickHouse, birden fazla hassasiyette imzalı ve imzasız tamsayı türleri sunar. Hologres ise standart SQL tamsayı hiyerarşisini kullanır. Temel fark: ClickHouse'un yerel bir Boolean türü yoktur; Hologres ise BOOLEAN türünü yerel olarak destekler.

ClickHouse türü Hologres türü Notlar
Int8 SMALLINT Tek baytlık INT desteklenmez; SMALLINT kullanın
Int16 SMALLINT
Int32 INT
Int64 BIGINT
UInt8 INT
UInt16 INT
UInt32 BIGINT
UInt64 BIGINT Maksimuma yakın UInt64 değerleri (18.446.744.073.709.551.615) BIGINT aralığını aşar; geçişten önce verileri doğrulayın
Float32 FLOAT
Float64 DOUBLE PRECISION
Decimal(P, S) DECIMAL
Decimal32(S) DECIMAL
Decimal64(S) DECIMAL
Decimal128(S) DECIMAL
Boolean BOOLEAN ClickHouse'un Boolean türü yoktur; boolean değerlerini temsil etmek için ClickHouse'ta UInt8 kullanın

Dize ve karakter türleri

ClickHouse tüm dize verilerini ham bayt olarak String türüyle depolar. Hologres bunu TEXT türüne eşler. LowCardinality doğrudan bir Hologres eşdeğeri olmayan bir ClickHouse depolama optimizasyonudur — geçişten sonra ilgili sütunlarda sözlük kodlamasını manuel olarak etkinleştirin.

ClickHouse türü Hologres türü Notlar
String TEXT
FixString(N) TEXT Sabit uzunluklu dizeler değişken uzunluklu hale gelir; Hologres'te sabit uzunluklu dize eşdeğeri yoktur
LowCardinality(T) TEXT (veya altta yatan tür) Yerel bir tür olarak desteklenmez. Geçişten sonra sözlük kodlamasını manuel olarak etkinleştirin: CALL set_table_property('table', 'dictionary_encoding_columns', 'col');

Tarih ve saat türleri

ClickHouse, Date ve çeşitli DateTime varyantlarını kullanır. Hologres, saat dilimi farkındalığı olan tüm türleri TIMESTAMPTZ türüne eşler.

ClickHouse türü Hologres türü Notlar
Date Date
DateTime TIMESTAMPTZ
DateTime(timezone) TIMESTAMPTZ
DateTime64 TIMESTAMPTZ

Karmaşık ve diğer türler

ClickHouse'taki iç içe yapılar (Nested ve Tuple gibi) Hologres'te dizilere düzleştirilir. Binary veriler için kullanım durumunuza göre Hologres türünü seçin.

ClickHouse türü Hologres türü Notlar
UUID UUID
Enum TEXT Yerel bir tür olarak desteklenmez; bunun yerine TEXT kullanın
Nested, Tuple, Array Array İç içe türler dizilere düzleştirilir
Binary BIT(n), VARBIT(n), BYTEA, CHAR(n) Kullanım durumuna göre seçin

Şemaları geçirin

Şema geçişi, ClickHouse veri tanımlama dili (DDL) ifadelerini Hologres (PostgreSQL uyumlu) DDL'ye dönüştürür. Aşağıdaki adımları tamamlayın.

1. Adım: Tüm veritabanlarını listeleyin

Kaynak örnekteki veritabanlarını listelemek için ClickHouse istemcisinde aşağıdaki komutu çalıştırın.

clickhouse-client --host="<host>" --port="<port>" --user="<username>" --password="<password>" \
  --query="SHOW databases" > database.list
Sonuçlarda system veritabanı görünür ancak geçirilmesi gerekmez. Bu veritabanını filtreleyin.
Parametre Açıklama
<host> Kaynak ClickHouse örneğinin adresi
<port> Kaynak ClickHouse örneğinin bağlantı noktası
<username> DML okuma/yazma, ayarlar ve DDL izinlerine sahip hesap
<password> Hesabın parolası

2. Adım: Tüm tabloları listeleyin

Belirli bir veritabanındaki tabloları listelemek için ClickHouse istemcisinde aşağıdaki komutu çalıştırın.

clickhouse-client --host="<host>" --port="<port>" --user="<username>" --password="<password>" \
  --query="SHOW tables from <database_name>" > table.list
.inner. ile başlayan tablolar, materyalleştirilmiş görünümler için kullanılan dahili tablolardır ve geçirilmeleri gerekmez. Bunları filtreleyin.

Tüm veritabanlarını ve tabloları tek seferde listelemek için system.tables meta veri tablosunu sorgulayın:

SELECT DISTINCT database, name FROM system.tables WHERE database != 'system';

3. Adım: Tablo DDL'lerini dışa aktarın

Geçirmek istediğiniz her tablo için DDL'yi dışa aktarın.

clickhouse-client --host="<host>" --port="<port>" --user="<username>" --password="<password>" \
  --query="SHOW CREATE TABLE <database_name>.<table_name>" > table.sql

Alternatif olarak, dağıtılmamış tüm tablolar için DDL ve meta verileri incelemek amacıyla system.tables tablosunu doğrudan sorgulayabilirsiniz:

SELECT * FROM system.tables
WHERE database = '<database_name>' AND engine != 'Distributed';

Aşağıdaki tabloda, her bir system.tables alanının Hologres kavramlarına nasıl eşlendiği açıklanmaktadır.

Alan Eşleme kuralı
database ClickHouse veritabanları, Hologres'teki şemalara eşlenir. CREATE DATABASE "<db>"; ifadesi CREATE SCHEMA "<schema>"; haline gelir
name Tablo adı; değişiklik gerekmez
engine Hologres'te Yerel/Dağıtılmış tablo ayrımı yoktur. engine = 'Distributed' olan satırları filtreleyin
is_temporary Geçici tabloların geçirilmesi gerekmez. Hologres geçici tabloları desteklemez
data_paths, metadata_path, metadata_modification_time Yoksayın
dependencies_database, dependencies_table Bağımlılığı olan görünümler, temel tablolarından önce oluşturulmalıdır. Hologres materyalleştirilmiş görünümleri desteklemez
create_table_query Kaynak DDL; Hologres DDL'ye (PostgreSQL sözdizimi) dönüştürün
engine_full Yoksayın
partition_key Hologres'teki bölümleme anahtarına eşlenir. Eğer partition_key değeri col1 ise, Hologres DDL'ye PARTITION BY LIST (col1) ekleyin
sorting_key Hologres'teki segment anahtarı ve kümeleme anahtarı dizinlerine eşlenir
primary_key Hologres DDL'deki PRIMARY KEY yan tümcesine eşlenir
sampling_key Hologres örnekleme özelliğini desteklemez; yoksayın
storage_policy Yoksayın

4. Adım: ClickHouse DDL'yi Hologres DDL'ye dönüştürün

Her tablonun DDL'sini dönüştürmek için tür eşlemelerini ve alan dönüştürme kurallarını uygulayın. Aşağıdaki örnekler TPC-H kıyaslama tablolarını kullanır.

Örnek: lineitem tablosu

ClickHouse DDL:

-- 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);

Dönüştürülmüş Hologres DDL:

-- lineitem on Hologres
-- Create a table group with 32 shards
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)
);
-- sorting_key (l_orderkey, l_linenumber) maps to clustering key and segment key
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');
-- LowCardinality columns: enable bitmap and dictionary encoding
CALL set_table_property('LINEITEM', 'bitmap_columns', 'L_RETURNFLAG,L_LINESTATUS,L_SHIPINSTRUCT,L_SHIPMODE,L_COMMENT');
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;

Örnek: customer tablosu

ClickHouse DDL:

-- 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);

Dönüştürülmüş Hologres DDL:

-- 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. Adım: DDL'yi Hologres'e aktarın

Dönüştürülen DDL'yi hedef Hologres örneğinde yürütmek için psql istemcisinde aşağıdaki komutu çalıştırın.

PGUSER="<username>" PGPASSWORD="<password>" psql \
  -h "<host>" -p "<port>" -d "<database_name>" -f table.sql

Verileri geçirin

Üç yöntem mevcuttur. Veri hacminize, gecikme gereksinimlerinize ve mevcut araçlarınıza göre seçim yapın.

Yöntem En uygun olduğu durum Araçlar
CSV'ye dışa aktarma, ardından COPY (önerilen) Tek seferlik toplu geçiş; basit kurulum; ek altyapı gerekmez ClickHouse istemcisi + psql
Flink veya Spark işi Büyük ölçekli geçiş; gerçek zamanlı veya artımlı senkronizasyon; mevcut Flink/Spark altyapısına sahip ekipler Flink, Spark
DataWorks Veri Entegrasyonu veya DataX Özel kod gerektirmeyen yönetilen geçiş; tam veritabanı çevrimdışı senkronizasyonu DataWorks, DataX

Flink ve Spark için bkz. Spark kullanarak veri aktarma. DataWorks Veri Entegrasyonu için bkz. Veri Entegrasyonu ve Tüm bir ClickHouse veritabanını Hologres'e çevrimdışı senkronize etme.

Aşağıdaki adımlar CSV dışa aktarma ve COPY yaklaşımını açıklamaktadır.

1. Adım: ClickHouse'tan verileri CSV'ye dışa aktarın

CSV, basitliği ve geniş araç desteği nedeniyle önerilir. Karmaşık iç içe türlere veya yüksek hassasiyetli ondalık sayılara sahip tablolar için, CSV tür meta verilerini korumadığından yüklemeden önce dışa aktarılan değerleri doğrulayın.

Tablo verilerini yerel bir CSV dosyasına dışa aktarmak için ClickHouse istemcisinde aşağıdaki komutu çalıştırın.

clickhouse-client --host="<host>" --port="<port>" --user="<username>" --password="<password>" \
  --query="SELECT * FROM <database_name>.<table_name> FORMAT CSV" > table.csv
Parametre Açıklama
<host> Kaynak ClickHouse örneğinin adresi
<port> Kaynak ClickHouse örneğinin bağlantı noktası
<username> DML okuma/yazma, ayarlar ve DDL izinlerine sahip hesap
<password> Hesabın parolası
<database_name> Geçişi yapılacak tabloyu içeren veritabanının adı
<table_name> Geçişi yapılacak tablonun adı

2. Adım: CSV dosyasını Hologres'e aktarın

CSV dosyasını hedef Hologres tablosuna yüklemek için psql istemcisinde aşağıdaki komutu çalıştırın.

PGUSER="<username>" PGPASSWORD="<password>" psql \
  -h "<host>" -p "<port>" -d "<database_name>" \
  -c "COPY <schema_name>.<table_name> FROM STDIN (FORMAT 'csv')" < table.csv
Parametre Açıklama
<username> Alibaba Cloud hesabınızın AccessKey ID'si. AccessKey Yönetimi sayfasından edinin
<password> Alibaba Cloud hesabınızın AccessKey gizli anahtarı. AccessKey Yönetimi sayfasından edinin
<host> Hologres örneğinin uç noktası. Yönetim Konsolu ndaki örnek ayrıntıları sayfasında Ağ Bilgileri altında bulun
<port> Hologres örneğinin bağlantı noktası. Yönetim Konsolu ndaki Ağ Bilgileri altında bulun
<database_name> Hologres örneğindeki hedef veritabanı adı
<schema_name> Hedef şema adı. Belirtilmezse varsayılan olarak public olur
<table_name> Hologres'teki hedef tablo adı

3. Adım: Aktarmayı doğrulayın

Verilerin doğru yüklendiğini onaylamak için Hologres'te aktarılan tabloyu sorgulayın.

SELECT COUNT(*) FROM <schema_name>.<table_name>;

Sorguları geçirin

Hologres PostgreSQL sözdizimini kullanırken, ClickHouse kendi SQL lehçesini kullanır. Çoğu ifade uyumludur ancak skaler işlevler, toplama işlevleri ve tanımlayıcı tırnaklama farklılık gösterir.

Sözdizimi farklılıkları

Alan ClickHouse Hologres
Dize tanımlayıcıları 'column_name' (tek tırnak) "column_name" (çift tırnak)
Tablo referansı SELECT x FROM <database>.<table> SELECT x FROM <schema>.<table>

İşlev eşdeğerleri

Aşağıda listelenmeyen işlevlerin sözdizimi her iki sistemde de aynıdır.

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)
toDecimal32(val, scale) Doğrudan sayısal değişmez kullanın (ör. 0.0000010000)

Geçiş stratejileri

Normal ifade değiştirmesi — işlev adları, tanımlayıcı tırnaklama ve <database>.<table> referansları gibi sabit kalıpları Hologres eşdeğerleriyle değiştirmek için normal ifadeler kullanın.

ClickHouse Uzantısı — Hologres, toUInt32() gibi bazı ClickHouse işlevlerini dönüştürme gerektirmeden yerel olarak destekleyen bir ClickHouse Uzantısı sağlar. Bkz. ClickHouse uyumlu işlevler.

Sorgu geçiş örnekleri

Aşağıdaki örnekler TPC-H kıyaslama sorgularını kullanır. Her örnek belirli bir geçiş kalıbını vurgular.

Örnek 1: Basit toplama — değişiklik gerekmez

Standart SQL işlevlerini kullanan basit toplamalar için ClickHouse ve Hologres sorguları aynıdır.

ClickHouse (Q1):

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;

Hologres (Q1) — değişiklik yok:

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;

Örnek 2: Alt sorguyu yeniden yazma — IN yerine EXISTS

ClickHouse, Hologres'in desteklemediği şekilde çapraz tablo referanslarıyla IN (alt sorgu) kullanımını destekler. Bunun yerine EXISTS kullanarak yeniden yazın.

ClickHouse (Q4):

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;

Hologres (Q4) — IN (alt sorgu) ifadesi EXISTS ile değiştirildi:

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;

Örnek 3: İşlev değiştirme — toDecimal32() yerine değişmez değer

ClickHouse'un toDecimal32(value, scale) işlevinin Hologres eşdeğeri yoktur. Bunun yerine düz bir sayısal değişmez değer kullanın.

ClickHouse (Q11):

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;

Hologres (Q11) — toDecimal32(0.0000010000, 9) ifadesi 0.0000010000 ile değiştirildi:

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;

İşlev uyumluluğu

Hologres ve ClickHouse, sözdizimi aynı olan birçok temel işlevi paylaşır. Farklılık gösteren işlevler için Hologres ya yerel bir eşdeğer ya da anlamsal olarak aynı olan bir alternatif sunar. Tam uyumluluk listesi için bkz. ClickHouse uyumlu işlevler.

Sonraki adımlar