Hologres PostgreSQL ile uyumludur ve standart PostgreSQL dizi işlevlerini destekler. Ayrıca küme işlemleri ve toplama işlemleri için çeşitli uzantılar sunar. Bu konuda her bir işlevin sözdizimi, parametreleri ve örnekleri açıklanmaktadır.
Sınırlamalar
array_max, array_min, array_contains, array_except, array_distinct ve array_union işlevleri sabit sorguları desteklemez. Örneğin, SELECT array_max(ARRAY[-2, NULL, -3, -12, -7]); sorgusu desteklenmez; bunun yerine bir tablodan dizi sütunlarını girdi olarak kullanın.
İşlev referansı
| İşlev | Sözdizimi | Dönüş Değeri | Açıklama |
|---|---|---|---|
| ARRAY_AGG | array_agg(anyelement) |
ARRAY | Birden çok satırdaki sütun değerlerini bir dizide toplar. |
| ARRAY_APPEND | array_append(anyarray, anyelement) |
ARRAY | Bir öğeyi dizinin sonuna ekler. |
| ARRAY_CAT | array_cat(anyarray, anyarray) |
ARRAY | İki diziyi birleştirir. |
| ARRAY_CONTAINS | array_contains(array, target_value) |
BOOLEAN | Bir dizinin belirli bir değer içerip içermediğini denetler. |
| ARRAY_DIMS | array_dims(anyarray) |
TEXT | Bir dizinin boyut sınırlarını metin dizesi olarak döndürür. |
| ARRAY_DISTINCT | array_distinct(array) |
ARRAY | Bir diziden yinelenen öğeleri kaldırır. |
| ARRAY_EXCEPT | array_except(array1, array2) |
ARRAY | array1 içinde bulunan ancak array2 içinde bulunmayan öğeleri döndürür. |
| ARRAY_LENGTH | array_length(anyarray, int) |
INT | Belirtilen dizi boyutundaki öğe sayısını döndürür. |
| ARRAY_LOWER | array_lower(anyarray, int) |
INT | Belirtilen dizi boyutunun alt sınırını döndürür. |
| ARRAY_MAX | array_max(array) |
INT | NULL değerleri atlayarak en büyük öğe değerini döndürür. |
| ARRAY_MIN | array_min(array) |
INT | En küçük öğe değerini döndürür. |
| ARRAY_NDIMS | array_ndims(anyarray) |
INT | Bir dizinin boyut sayısını döndürür. |
| ARRAY_POSITIONS | array_positions(anyarray, anyelement) |
ARRAY | Tek boyutlu bir dizideki bir öğenin tüm oluşumlarının alt simgelerini döndürür. |
| ARRAY_PREPEND | array_prepend(anyelement, anyarray) |
ARRAY | Bir öğeyi dizinin başına ekler. |
| ARRAY_REMOVE | array_remove(anyarray, anyelement) |
ARRAY | Tek boyutlu bir diziden belirtilen değere eşit olan tüm öğeleri kaldırır. |
| ARRAY_SORT | array_sort(anyarray) |
ARRAY | Bir dizinin öğelerini artan düzende sıralar. |
| ARRAY_TO_STRING | array_to_string(anyarray, text[, text]) |
TEXT | Dizi öğelerini bir ayırıcı kullanarak birleştirir; isteğe bağlı olarak NULL değerlerinin yerine başka bir değer koyar. |
| ARRAY_UNION | array_union(array1, array2) |
ARRAY | İki diziyi birleştirir ve yinelenen öğeleri kaldırır. |
| ARRAY_UPPER | array_upper(anyarray, int) |
INT | Belirtilen dizi boyutunun üst sınırını döndürür. |
| REGEXP_MATCH | regexp_match(text, text) |
ARRAY | Bir dizeyi düzenli ifadeyle eşleştirir ve yakalanan alt dizeleri döndürür. |
| REGEXP_SPLIT_TO_ARRAY | regexp_split_to_array(text, text) |
ARRAY | Bir dizeyi düzenli ifadeye göre böler ve parçaları bir dizi olarak döndürür. |
| UNNEST | unnest(anyarray) |
setof TEXT | Her bir dizi öğesini ayrı bir satıra genişletir. |
Dizi işlevleri
ARRAY_TO_STRING
array_to_string(anyarray, text[, text]) → TEXT
Belirtilen bir ayırıcı kullanarak dizi öğelerini birleştirir. Üçüncü bağımsız değişken isteğe bağlıdır ve NULL öğelerin yerine kullanılacak değeri belirtir; bu bağımsız değişken belirtilmezse NULL değerleri atlanır.
Parametreler
| Parametre | Zorunlu | Açıklama |
|---|---|---|
anyarray |
Evet | Öğeleri birleştirilecek dizi. |
text (2.) |
Evet | Ayırıcı dize. |
text (3.) |
Hayır | NULL değerlerinin yerine kullanılacak dize. |
Örnek
-- Result: 1,2,3
SELECT array_to_string(ARRAY[1, 2, 3], ',');
ARRAY_AGG
array_agg(anyelement) → ARRAY
Birden çok satırdaki sütun değerlerini tek bir dizide toplar. İki sözdizimi biçimi desteklenir.
Sözdizimi 1: Temel toplama
array_agg(anyelement)
Sözdizimi 2: Sıralama ve filtreleme ile toplama
array_agg(expression [order_by_clause]) [FILTER (WHERE filter_clause)]
Parametreler
| Parametre | Zorunlu | Açıklama |
|---|---|---|
anyelement / expression |
Evet | Toplanacak sütun veya ifade. |
order_by_clause |
Hayır | Sonuç dizisindeki öğe sırasını denetleyen ORDER BY yan tümcesi. |
filter_clause |
Hayır | FILTER yan tümcesi için koşul. Yalnızca bu koşulu karşılayan satırlar dahil edilir. |
Kullanım notları
Hologres V1.3 ve sonraki sürümlerde desteklenen türler: DECIMAL, DATE, TIMESTAMP, TIMESTAMPTZ.
Desteklenmeyen türler: JSON, JSONB, TIMETZ, INTERVAL, INET, OID, UUID, ARRAY.
FILTER yan tümcesini kullanmak için Hologres V1.3 veya sonraki bir sürüm gerekir. Örneğinizi yükseltmek için bkz. Instance upgradation veya How do I get more online support?.
Örnekler
Temel toplama:
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;
Sonuç:
array_agg
-----------
{2,1}
(1 row)
FILTER ile toplama (Hologres V1.3+ gerekir):
SELECT array_agg(c1) FILTER (WHERE c1 > 1)
FROM test_array_agg_int;
Sonuç:
array_agg
-----------
{2}
(1 row)
ARRAY_APPEND
array_append(anyarray, anyelement) → ARRAY
Bir öğeyi dizinin sonuna ekler.
Parametreler
| Parametre | Zorunlu | Açıklama |
|---|---|---|
anyarray |
Evet | Kaynak dizi. |
anyelement |
Evet | Eklenecek öğe. |
Örnek
-- Result: {1,2,3}
SELECT array_append(ARRAY[1,2], 3);
ARRAY_CAT
array_cat(anyarray, anyarray) → ARRAY
Aynı öğe türüne sahip iki diziyi birleştirir.
Parametreler
| Parametre | Zorunlu | Açıklama |
|---|---|---|
anyarray (1.) |
Evet | İlk dizi. |
anyarray (2.) |
Evet | İkinci dizi. |
Örnek
-- Result: {1,2,3,4,5}
SELECT array_cat(ARRAY[1,2,3], ARRAY[4,5]);
ARRAY_NDIMS
array_ndims(anyarray) → INT
Bir dizinin boyut sayısını döndürür.
Parametreler
| Parametre | Zorunlu | Açıklama |
|---|---|---|
anyarray |
Evet | İncelenecek dizi. |
Örnek
-- Result: 2
SELECT array_ndims(ARRAY[[1,2,3], [4,5,6]]);
ARRAY_DIMS
array_dims(anyarray) → TEXT
Bir dizinin boyut sınırlarını metin dizesi olarak döndürür; her boyutun alt ve üst sınırlarını gösterir.
Parametreler
| Parametre | Zorunlu | Açıklama |
|---|---|---|
anyarray |
Evet | İncelenecek dizi. |
Örnek
-- Result: [1:2][1:3]
SELECT array_dims(ARRAY[[1,2,3], [4,5,6]]);
ARRAY_LENGTH
array_length(anyarray, int) → INT
Bir dizinin belirtilen boyutundaki öğe sayısını döndürür. Boyutlar 1'den başlayarak numaralandırılır.
Parametreler
| Parametre | Zorunlu | Açıklama |
|---|---|---|
anyarray |
Evet | İncelenecek dizi. |
int |
Evet | Boyut numarası (1 tabanlı). |
Örnek
-- Result: 3
SELECT array_length(ARRAY[1,2,3], 1);
ARRAY_LOWER
array_lower(anyarray, int) → INT
Belirtilen dizi boyutunun alt sınırını döndürür. Standart diziler için bu değer 1'dir. Özel alt sınırı olan dizilerde (örneğin '[0:2]={1,2,3}'::int[] gibi) gerçek alt sınır döndürülür. Boyutlar 1'den başlayarak numaralandırılır.
Parametreler
| Parametre | Zorunlu | Açıklama |
|---|---|---|
anyarray |
Evet | İncelenecek dizi. |
int |
Evet | Boyut numarası (1 tabanlı). |
Örnek
-- Result: 0
SELECT array_lower('[0:2]={1,2,3}'::int[], 1);
ARRAY_POSITIONS
array_positions(anyarray, anyelement) → ARRAY
Tek boyutlu bir dizide belirtilen bir öğenin alt simgelerini döndürür.
Parametreler
| Parametre | Zorunlu | Açıklama |
|---|---|---|
anyarray |
Evet | Aranacak tek boyutlu dizi. |
anyelement |
Evet | Bulunacak öğe. |
Örnek
-- Result: {1,2,4}
SELECT array_positions(ARRAY['A','A','B','A'], 'A');
ARRAY_PREPEND
array_prepend(anyelement, anyarray) → ARRAY
Bir öğeyi dizinin başına ekler.
Parametreler
| Parametre | Zorunlu | Açıklama |
|---|---|---|
anyelement |
Evet | Başa eklenecek öğe. |
anyarray |
Evet | Kaynak dizi. |
Örnek
-- Result: {1,2,3}
SELECT array_prepend(1, ARRAY[2,3]);
ARRAY_REMOVE
array_remove(anyarray, anyelement) → ARRAY
Tek boyutlu bir diziden belirtilen değere eşit olan tüm öğeleri kaldırır.
Parametreler
| Parametre | Zorunlu | Açıklama |
|---|---|---|
anyarray |
Evet | İşlenecek tek boyutlu dizi. |
anyelement |
Evet | Kaldırılacak değer. Eşleşen tüm öğeler kaldırılır. |
Örnek
-- Result: {1,3}
SELECT array_remove(ARRAY[1,2,3,2], 2);
ARRAY_SORT
array_sort(anyarray) → ARRAY
Bir dizinin öğelerini artan düzende sıralar.
Kullanım notları
| Hologres sürümü | Desteklenen dizi türleri |
|---|---|
| V1.1.46+ | TEXT dizileri (sıralama için INT8'e dönüştürülür; sıralanmış TEXT dizisi döndürülür) |
| V1.3.18+ | INT4, INT8, FLOAT4, FLOAT8, BOOLEAN ve TEXT dizileri. TEXT dizileri leksikografik sıraya göre sıralanır. |
Parametreler
| Parametre | Zorunlu | Açıklama |
|---|---|---|
anyarray |
Evet | Sıralanacak dizi. |
Örnek
-- Result: {1,1,2,3}
SELECT array_sort(ARRAY[1,3,2,1]);
ARRAY_UPPER
array_upper(anyarray, int) → INT
Belirtilen dizi boyutunun üst sınırını döndürür. Standart tek boyutlu bir dizi için bu değer, öğe sayısına eşittir. Boyutlar 1'den başlayarak numaralandırılır.
Parametreler
| Parametre | Zorunlu | Açıklama |
|---|---|---|
anyarray |
Evet | İncelenecek dizi. |
int |
Evet | Boyut numarası (1 tabanlı). |
Örnek
-- Result: 4
SELECT array_upper(ARRAY[1,8,3,7], 1);
UNNEST
unnest(anyarray) → setof TEXT
Bir dizinin her bir öğesini ayrı bir satıra genişletir. Bu işlevi FROM yan tümcesinde veya küme döndüren bir işlev olarak kullanın.
Parametreler
| Parametre | Zorunlu | Açıklama |
|---|---|---|
anyarray |
Evet | Genişletilecek dizi. |
Örnek
SELECT unnest(ARRAY[1,2]);
Sonuç:
unnest
------
1
2
(2 rows)
ARRAY_MAX
array_max(array) → INT
Bir dizideki en büyük öğe değerini döndürür. Hesaplama sırasında NULL değerleri atlanır. Hologres V1.3.19 veya sonraki bir sürüm gerektirir.
array_max sabit sorguları desteklemez; girdi olarak bir tablo sütunu kullanın.
Parametreler
| Parametre | Zorunlu | Açıklama |
|---|---|---|
array |
Evet | Değerlendirilecek dizi. NULL değerleri atlanır. |
Örnek
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;
Sonuç:
c1 | array_max
------------------+-----------
\N | \N
{-2,0,-3,-12,-7} | 0
(2 rows)
ARRAY_MIN
array_min(array) → INT
Bir dizideki en küçük öğe değerini döndürür. Hologres V1.3.19 veya sonraki bir sürüm gerektirir.
array_min sabit sorguları desteklemez; girdi olarak bir tablo sütunu kullanın.
Parametreler
| Parametre | Zorunlu | Açıklama |
|---|---|---|
array |
Evet | Değerlendirilecek dizi. |
Örnek
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;
Sonuç:
c1 | array_min
------------------------------+-----------
\N | \N
{hello,holo,blackhole,array} | array
(2 rows)
ARRAY_CONTAINS
array_contains(array, target_value) → BOOLEAN
Bir dizinin belirtilen bir değeri içerip içermediğini denetler. Değer bulunursa true, bulunamazsa false döndürür. Hologres V1.3.19 veya sonraki bir sürüm gerektirir.
array_contains sabit sorguları desteklemez; girdi olarak bir tablo sütunu kullanın.
Parametreler
| Parametre | Zorunlu | Açıklama |
|---|---|---|
array |
Evet | Aranacak dizi. |
target_value |
Evet | Aranan değer. |
Örnek
CREATE TABLE test_array_contains_text (
c1 text[],
c2 text
);
INSERT INTO test_array_contains_text
VALUES (ARRAY[NULL, 'cs', 'holo', 'sql', 'a', NULL, ''], 'holo'),
(ARRAY['holo', 'array', 'FE', 'l', NULL, ''], 'function');
SELECT c1, c2, array_contains(c1, c2)
FROM test_array_contains_text;
Sonuç:
c1 | c2 | array_contains
--------------------------+----------+----------------
{holo,array,FE,l,"",""} | function | f
{"",cs,holo,sql,a,"",""} | holo | t
(2 rows)
ARRAY_EXCEPT
array_except(array1, array2) → ARRAY
array1 içinde bulunan ancak array2 içinde bulunmayan öğeleri döndürür. Hologres V1.3.19 veya sonraki bir sürüm gerektirir.
array_except sabit sorguları desteklemez; girdi olarak tablo sütunları kullanın.
Parametreler
| Parametre | Zorunlu | Açıklama |
|---|---|---|
array1 |
Evet | Kaynak dizi. |
array2 |
Evet | array1 dışlanacak öğelerin bulunduğu dizi. |
Örnek
CREATE TABLE test_array_except_text (
c1 text[],
c2 text[]
);
INSERT INTO test_array_except_text
VALUES (ARRAY['o', 'y', 'l', 'l', NULL, ''], NULL),
(ARRAY['holo', 'hello', 'hello', 'SQL', '', 'blackhole'], ARRAY['holo', 'SQL', NULL, 'kk']);
SELECT c1, c2, array_except(c1, c2)
FROM test_array_except_text;
Sonuç:
c1 | c2 | array_except
-------------------------------------+------------------+-------------------
{o,y,l,l,"",""} | | {o,l,y,""}
{holo,hello,hello,SQL,"",blackhole} | {holo,SQL,"",kk} | {blackhole,hello}
(2 rows)
ARRAY_DISTINCT
array_distinct(array) → ARRAY
Bir diziden yinelenen öğeleri kaldırır. Hologres V1.3.19 veya sonraki bir sürüm gerektirir.
array_distinct sabit sorguları desteklemez; girdi olarak bir tablo sütunu kullanın.
Parametreler
| Parametre | Zorunlu | Açıklama |
|---|---|---|
array |
Evet | Yinelenenlerin kaldırılacağı dizi. |
Örnek
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;
Sonuç:
c1 | array_distinct
---------------------------+------------------
{holo,hello,holo,SQL,SQL} | {SQL,hello,holo}
{} | {NULL}
(2 rows)
ARRAY_UNION
array_union(array1, array2) → ARRAY
İki diziyi yeni bir dizide birleştirir ve yinelenen öğeleri kaldırır. Hologres V1.3.19 veya sonraki bir sürüm gerektirir.
array_union sabit sorguları desteklemez; girdi olarak tablo sütunları kullanın.
Parametreler
| Parametre | Zorunlu | Açıklama |
|---|---|---|
array1 |
Evet | İlk dizi. |
array2 |
Evet | İkinci dizi. Birleştirildikten sonra her iki dizideki yinelenenler kaldırılır. |
Örnek
CREATE TABLE test_array_union_int (
c1 int[],
c2 int[]
);
INSERT INTO test_array_union_int
VALUES (NULL, ARRAY[2, -3, 2, 7]),
(ARRAY[2, 7, -3, 2, 7], ARRAY[12, 9, 8, 7]);
SELECT c1, c2, array_union(c1, c2)
FROM test_array_union_int;
Sonuç:
c1 | c2 | array_union
--------------+------------+-----------------
\N | {2,-3,2,7} | {2,7,-3}
{2,7,-3,2,7} | {12,9,8,7} | {9,2,7,8,12,-3}
(2 rows)
REGEXP_MATCH
regexp_match(str TEXT, pattern TEXT) → ARRAY
Bir dizeyi düzenli ifadeyle eşleştirir ve yakalanan alt dizeleri içeren bir dizi döndürür.
Parametreler
| Parametre | Zorunlu | Açıklama |
|---|---|---|
str |
Evet | Eşleştirilecek dize. |
pattern |
Evet | Düzenli ifade. Alt dizeleri ayıklamak için (...) yakalama gruplarını kullanın. |
Örnek
SELECT regexp_match('foobarbequebaz', '(bar)(beque)');
Sonuç:
regexp_match
--------------
{bar,beque}
REGEXP_SPLIT_TO_ARRAY
regexp_split_to_array(str TEXT, pattern TEXT) → ARRAY
Bir dizeyi düzenli ifade ayırıcısına göre böler ve parçaları bir dizi olarak döndürür.
Parametreler
| Parametre | Zorunlu | Açıklama |
|---|---|---|
str |
Evet | Bölünecek dize. |
pattern |
Evet | Bölme ayırıcısı olarak kullanılan düzenli ifade. |
Örnek
CREATE TABLE interests_test (
name text,
intrests text
);
INSERT INTO interests_test
VALUES ('Ava', 'singing, dancing'),
('Bob', 'playing football, running, painting'),
('Jack', 'arranging flowers, writing calligraphy, playing the piano, sleeping');
SELECT name, regexp_split_to_array(intrests, ',')
FROM interests_test;
Sonuç:
name | regexp_split_to_array
----------------------------
Ava | {singing, dancing}
Bob | {playing football, running, painting}
Jack | {arranging flowers, writing calligraphy, playing the piano, sleeping}
Operatörler
Aşağıdaki operatörler dizilerle çalışır.
| Operatör | Dönüş Değeri | Açıklama | Örnek | Sonuç |
|---|---|---|---|---|
@> |
BOOLEAN | Sol dizinin sağ dizideki tüm öğeleri içerip içermediğini denetler. | SELECT ARRAY[1,2,3] @> ARRAY[1,2]; |
t |
<@ |
BOOLEAN | Sol dizinin sağ dizi tarafından kapsanıp kapsanmadığını denetler. | SELECT ARRAY[1,2,3] <@ ARRAY[1,2]; |
f |
&& |
BOOLEAN | İki dizinin herhangi bir ortak öğe paylaşıp paylaşmadığını denetler. Hologres V1.3.37 ve sonraki sürümler, girdi olarak dizi sütunlarını da destekler. | SELECT ARRAY[1,2,3] && ARRAY[1,2]; |
t |
Yüksek düzey dizi işlevleri
Hologres V3.2 ve sonraki sürümler yüksek düzey dizi işlevlerini destekler. Daha fazla bilgi için bkz. LAMBDA expressions and related functions.