Hologres, ClickHouse işlevlerinin bir alt kümesini yerel olarak destekler ve diğer yaygın ClickHouse işlevleri için eşdeğer uygulamalar sunar. Aşağıdaki bölümlerde her işlev kategorisi ele alınır, Hologres eşdeğerleri listelenir ve çalıştırılabilir örnekler verilir.
Dize işlevleri
LENGTH, LOWER, UPPER, CONCAT, SUBSTRING ve TRIM dahil olmak üzere yaygın ClickHouse dize işlevlerinin sözdizimi, Hologres karşılıklarıyla aynıdır. Tam liste için bkz. Dize işlevleri.
Matematiksel işlevler
CBRT, DEGREES, EXP, IN, LOG, PI, RADIANS, SIGN ve SQRT dahil olmak üzere yaygın ClickHouse matematiksel işlevlerinin sözdizimi, Hologres karşılıklarıyla aynıdır. Tam liste için bkz. Matematiksel işlevler.
Tür dönüştürme işlevleri
Hologres V1.3.36 ve sonraki sürümler aşağıdaki ClickHouse tarzı tür dönüştürme işlevlerini destekler. Sabit değerler giriş parametresi olarak kullanılamaz. Bu işlevlerin kapsamadığı veri türlerini dönüştürmek için bunun yerine CAST(col AS type) veya col::type sözdizimini kullanın.
Uyumsuz bir türde değer geçirildiğinde hata döndürülür. Örneğin, sayısal olmayan bir dizeyi toInt64 işlevine geçirmek, kaynak ve hedef türler uyumsuz olduğu için başarısız olur.
| ClickHouse işlevi | Hologres eşdeğeri | Dönüş türü |
|---|---|---|
toString(anyelement) |
toString(anyelement) |
TEXT |
toInt64(anyelement) |
toInt64(anyelement) |
BIGINT |
toInt32(anyelement) |
toInt32(anyelement) |
INT |
toDate(text) |
toDate(text) |
DATE |
toFloat64(anyelement) |
toFloat64(anyelement) |
DOUBLE PRECISION |
Aşağıdaki örneklerde, şu şekilde oluşturulan public.tb1 tablosu kullanılır:
CREATE TABLE public.tb1 (
id bigint NOT NULL,
id_text text,
data_date text,
data_float text,
data_text text
);
INSERT INTO public.tb1 VALUES (1234,'123','20190102','1.23','hologres');
toString(anyelement)
Herhangi bir türdeki değeri TEXT türüne dönüştürür.
SELECT toString(id) FROM public.tb1;
1234
toInt64(anyelement)
BIGINT dışındaki sayısal bir değeri BIGINT türüne dönüştürür.
SELECT toInt64(id_text) FROM public.tb1;
1234
toInt32(anyelement)
INT dışındaki sayısal bir değeri INT türüne dönüştürür.
SELECT toInt32(id_text) FROM public.tb1;
123
toDate(text)
Bir TEXT değerini DATE türüne dönüştürür. Giriş geçerli bir tarih biçiminde olmalıdır; aksi takdirde hata döndürülür.
Başarılı dönüştürme:
SELECT toDate(data_date) FROM public.tb1;
2019-01-02
Başarısız dönüştürme (uyumsuz biçim):
SELECT toDate(data_text) FROM public.tb1;
ERROR: *** invalid input syntax for type date ***
toFloat64(anyelement)
DOUBLE PRECISION dışındaki sayısal bir değeri DOUBLE PRECISION türüne dönüştürür.
SELECT toFloat64(data_float) FROM public.tb1;
1.23
Tarih/saat işlevleri
Hologres tarafından desteklenen tarih/saat işlevlerinin tam listesi için bkz. Tarih/saat dönüştürme işlevleri.
| ClickHouse işlevi | Hologres eşdeğeri |
|---|---|
toYear, toMonth, toQuarter |
extract(field FROM timestamp) veya date_part(text, timestamp) |
addDays, addMonths, addYears |
+ işleci ile interval |
subtractDays, subtractMonths, subtractYears |
- işleci ile interval |
toYear, toMonth ve toQuarter
Bir zaman damgasından yıl, ay veya çeyreği çıkarır. extract(field FROM timestamp) veya date_part(text, timestamp) kullanın. Ayrıntılar için bkz. Tarih/saat kesme işlevleri.
Ayı çıkarın:
SELECT extract(month FROM timestamp '2001-02-16 20:38:40');
2
Çeyreği çıkarın:
SELECT extract(quarter FROM timestamp '2001-02-16 20:38:40');
1
addDays, addMonths ve addYears
+ işlecini kullanarak bir tarihe veya zaman damgasına bir zaman aralığı ekler.
SELECT date '2001-09-28' + interval '1 hour';
2001-09-28 01:00:00
subtractDays, subtractMonths ve subtractYears
- işlecini kullanarak bir tarihten veya zaman damgasından bir zaman aralığı çıkarır.
SELECT date '2001-09-28' - interval '1 day';
2001-09-27 00:00:00
Toplama işlevleri
Hologres tarafından desteklenen toplama işlevlerinin tam listesi için bkz. Genel amaçlı toplama işlevleri. Özel işlevler için bkz. APPROX_COUNT_DISTINCT, UNIQ ve MAX_BY ve MIN_BY.
| ClickHouse işlevi | Hologres eşdeğeri | Kullanılabilirlik başlangıcı |
|---|---|---|
argMin(x, y) |
min_by(x, y) |
V1.3.36 |
argMax(x, y) |
max_by(x, y) |
V1.3.36 |
groupArray(anyelement) |
array_agg(anyelement) |
— |
argMin(x, y)
y minimum değerine karşılık gelen x değerini döndürür. Minimum y değeri birden fazla x değerine eşleniyorsa bu x değerlerinin minimumu döndürülür.
Hologres V1.3.36 veya sonraki bir sürüm gerektirir. Örnek tablo tanımı için bkz. Örnek veriler.
SELECT min_by(name, cost) FROM test;
min_by
--------
cc
(1 row)
argMax(x, y)
y maksimum değerine karşılık gelen x değerini döndürür. Maksimum y değeri birden fazla x değerine eşleniyorsa bu x değerlerinin maksimumu döndürülür.
Hologres V1.3.36 veya sonraki bir sürüm gerektirir. Örnek tablo tanımı için bkz. Örnek veriler.
SELECT id, max_by(name, cost) FROM test GROUP BY id;
id | max_by
----+--------
2 | bb
1 | aaa
3 | c
(3 rows)
groupArray(anyelement)
Bir ifadenin tüm değerlerini bir dizi halinde birleştirir. array_agg(anyelement) kullanın.
CREATE TABLE test_array_agg_int (c1 int);
INSERT INTO test_array_agg_int VALUES (1), (2);
SELECT array_agg(c1) FROM test_array_agg_int;
array_agg
-----------
{1,2}
(1 row)
Dizi işlevleri
Hologres tarafından desteklenen dizi işlevlerinin tam listesi için bkz. Dizi işlevleri.
| ClickHouse işlevi | Hologres eşdeğeri | Kullanılabilirlik başlangıcı |
|---|---|---|
arrayJoin(anyarray) |
unnest(anyarray) |
— |
arrayConcat(anyarray, anyarray...) |
array_cat(anyarray, anyarray) |
— |
arrayDistinct(anyarray) |
array_distinct(anyarray) |
V1.3.19 |
arrayMin(anyarray) |
array_min(anyarray) |
1.3.19 |
arrayMax(anyarray) |
array_max(anyarray) |
1.3.19 |
arraySum(anyarray) |
unnest + sum |
— |
arrayJoin(anyarray)
Her dizi öğesini ayrı bir satıra genişletir. unnest(anyarray) kullanın.
SELECT unnest(ARRAY[1,2]);
1
2
arrayConcat(anyarray, anyarray...)
Dizileri birleştirir. array_cat(anyarray, anyarray) kullanın. array_cat aynı anda iki dizi kabul ettiğinden, ikiden fazla diziyi birleştirmek için çağrıları zincirleyin.
SELECT array_cat(array_cat(ARRAY[1,2], ARRAY[3,4]), ARRAY[5,6]);
{1,2,3,4,5,6}
arrayDistinct(anyarray)
Yinelenen öğeleri kaldırarak yeni bir dizi döndürür. array_distinct(anyarray) kullanın.
Hologres V1.3.19 veya sonraki bir sürüm gerektirir. Sabit değerler giriş parametresi olarak kullanılamaz.
CREATE TABLE test_array_distinct_text (c1 text[]);
INSERT INTO test_array_distinct_text
VALUES (ARRAY['holo', 'hello', 'holo', 'SQL', 'SQL']), (ARRAY[]::text[]);
SELECT c1, array_distinct(c1) FROM test_array_distinct_text;
c1 | array_distinct
---------------------------+------------------
{holo,hello,holo,SQL,SQL} | {SQL,hello,holo}
{} | {NULL}
(2 rows)
arrayMin(anyarray)
Bir dizideki minimum değeri döndürür. array_min(anyarray) kullanın.
Hologres 1.3.19 veya sonraki bir sürüm gerektirir. Sabit değerler giriş parametresi olarak kullanılamaz.
CREATE TABLE test_array_min_text (c1 text[]);
INSERT INTO test_array_min_text
VALUES (NULL), (ARRAY['hello', 'holo', 'blackhole', 'array']);
SELECT c1, array_min(c1) FROM test_array_min_text;
c1 | array_min
------------------------------+-----------
|
{hello,holo,blackhole,array} | array
(2 rows)
arrayMax(anyarray)
Bir dizideki maksimum değeri döndürür. array_max(anyarray) kullanın.
Hologres 1.3.19 veya sonraki bir sürüm gerektirir. Sabit değerler giriş parametresi olarak kullanılamaz.
CREATE TABLE test_array_max_int (c1 int[]);
INSERT INTO test_array_max_int VALUES (NULL), (ARRAY[-2, NULL, -3, -12, -7]);
SELECT c1, array_max(c1) FROM test_array_max_int;
c1 | array_max
------------------+-----------
|
{-2,0,-3,-12,-7} | 0
(2 rows)
arraySum(anyarray)
Bir dizideki tüm öğelerin toplamını döndürür. Diziyi satırlara genişletmek için unnest kullanın, ardından sum uygulayın.
SELECT sum(ele) FROM (SELECT unnest(ARRAY[1,2,4]) AS ele) a;
7
Bit eşlem işlevleri
Hologres tarafından desteklenen Roaring bit eşlem işlevlerinin tam listesi için bkz. Roaring bit eşlem işlevleri.
| ClickHouse işlevi | Hologres eşdeğeri |
|---|---|
bitmapToArray(roaringbitmap) |
rb_to_array(roaringbitmap) |
groupBitmapState(integer) |
rb_build_agg(integer) |
groupBitmap(integer) |
rb_cardinality(rb_build_agg(integer)) |
groupBitmapAndState(roaringbitmap) |
rb_and_agg(roaringbitmap) |
groupBitmapOrState(roaringbitmap) |
rb_or_agg(roaringbitmap) |
groupBitmapAnd(roaringbitmap) |
rb_and_cardinality_agg(roaringbitmap) |
groupBitmapOr(roaringbitmap) |
rb_or_cardinality_agg(roaringbitmap) |
bitmapToArray(roaringbitmap)
Bir Roaring bit eşlemi tamsayı dizisine dönüştürür. rb_to_array(roaringbitmap) kullanın.
SELECT rb_to_array(rb_build('{1,2,3}'));
{1,2,3}
groupBitmapState(integer)
Bir grup tamsayı değerinden bir Roaring bit eşlemi oluşturur. rb_build_agg(integer) kullanın.
SELECT rb_build_agg(1);
\x3a3000000100000000000000100000000100
groupBitmap(integer)
Bir grup tamsayı değerinden oluşturulan Roaring bit eşleminin kardinalitesini hesaplar. rb_cardinality(rb_build_agg(integer)) kullanın—rb_build_agg önce değerleri bir Roaring bit eşlemine toplar, ardından rb_cardinality farklı öğeleri sayar.
SELECT rb_cardinality(rb_build_agg(1));
1
groupBitmapAndState(roaringbitmap)
Roaring bit eşlemleri arasında AND toplama işlemi gerçekleştirir ve sonuçta oluşan bit eşlemi döndürür. rb_and_agg(roaringbitmap) kullanın.
SELECT rb_and_agg(rb_build('{1,2,3}'));
\x3a300000010000000000020010000000010002000300
groupBitmapOrState(roaringbitmap)
Roaring bit eşlemleri arasında OR toplama işlemi gerçekleştirir ve sonuçta oluşan bit eşlemi döndürür. rb_or_agg(roaringbitmap) kullanın.
SELECT rb_or_agg(rb_build('{1,2,3}'));
\x3a300000010000000000020010000000010002000300
groupBitmapAnd(roaringbitmap)
Roaring bit eşlemleri arasında AND toplama işlemi gerçekleştirir ve sonuçta oluşan bit eşlemin kardinalitesini döndürür. rb_and_cardinality_agg(roaringbitmap) kullanın.
SELECT rb_and_cardinality_agg(rb_build('{1,2,3}'));
3
groupBitmapOr(roaringbitmap)
Roaring bit eşlemleri arasında OR toplama işlemi gerçekleştirir ve sonuçta oluşan bit eşlemin kardinalitesini döndürür. rb_or_cardinality_agg(roaringbitmap) kullanın.
SELECT rb_or_cardinality_agg(rb_build('{1,2,3}'));
3
Karma işlevleri
sipHash64(text)
Metin girişi için 64 bitlik bir SipHash değeri döndürür. ClickHouse'ta dönüş türü UInt64 iken Hologres'te BIGINT'dir. hg_sip_hash_64(text) kullanın.
Hologres V2.0.1 veya sonraki bir sürüm gerektirir. Sabit değerler giriş parametresi olarak kullanılamaz.
CREATE TABLE test_hg_sip_hash_64_text (c1 text);
INSERT INTO test_hg_sip_hash_64_text VALUES ('abc');
SELECT hg_sip_hash_64(c1) FROM test_hg_sip_hash_64_text;
4596069200710135518
Diğer işlevler
Hologres çoğu PostgreSQL işleviyle uyumludur. Bu konuda açıklanan dize ve matematiksel işlevlerin ötesinde birçok PostgreSQL işlevi, ClickHouse karşılıklarıyla aynı anlamlara sahiptir. Ayrıntılar için bkz. PostgreSQL.