Topik ini menjelaskan sintaks dasar dan contoh fungsi serta operator array.
Log Service mendukung fungsi dan operator array berikut.
|
Nama fungsi |
Sintaks |
Deskripsi |
SQL |
SPL |
|
[x] |
Mengembalikan elemen pada indeks x dalam sebuah array. Ini setara dengan fungsi |
√ |
× |
|
|
array_agg(x) |
Mengembalikan array dari semua nilai dalam x. |
√ |
× |
|
|
array_distinct(x) |
Menghapus elemen duplikat dari sebuah array. |
√ |
√ |
|
|
array_except(x, y) |
Mengembalikan selisih antara dua array. |
√ |
√ |
|
|
array_intersect(x, y) |
Mengembalikan irisan dua array. |
√ |
√ |
|
|
array_join(x, delimiter) |
Menggabungkan elemen-elemen array menjadi sebuah string, menggunakan delimiter yang ditentukan. Elemen null diabaikan. Penting
Fungsi array_join mengembalikan hasil hingga 1 KB. Data yang melebihi batas tersebut akan dipotong. |
√ |
√ |
|
|
array_join(x, delimiter, null_replacement) |
Menggabungkan elemen-elemen array menjadi sebuah string, menggunakan delimiter yang ditentukan. Elemen null diganti dengan nilai null_replacement. Penting
Fungsi array_join mengembalikan hasil hingga 1 KB. Data yang melebihi batas tersebut akan dipotong. |
√ |
√ |
|
|
array_max(x) |
Mengembalikan nilai maksimum dalam sebuah array. |
√ |
√ |
|
|
array_min(x) |
Mengembalikan nilai minimum dalam sebuah array. |
√ |
√ |
|
|
array_position(x, element) |
Mengembalikan indeks berbasis 1 dari elemen yang ditentukan. Mengembalikan 0 jika elemen tidak ada. |
√ |
√ |
|
|
array_remove(x, element) |
Menghapus elemen yang ditentukan dari sebuah array. |
√ |
√ |
|
|
array_sort(x) |
Mengurutkan elemen-elemen array secara ascending. Elemen null ditempatkan di akhir. |
√ |
√ |
|
|
array_transpose(x) |
Memutar balik array dua dimensi (array dari array) dengan menukar baris dan kolomnya. |
√ |
× |
|
|
array_union(x, y) |
Mengembalikan gabungan dua array. |
√ |
× |
|
|
cardinality(x) |
Mengembalikan jumlah elemen dalam sebuah array. |
√ |
√ |
|
|
concat(x, y…) |
Menggabungkan beberapa array menjadi satu array. |
√ |
× |
|
|
contains(x, element) |
Mengembalikan |
√ |
× |
|
|
element_at(x, y) |
Mengembalikan elemen pada indeks y dalam sebuah array. |
√ |
× |
|
|
filter(x, lambda_expression) |
Menyaring array menggunakan ekspresi lambda, hanya mengembalikan elemen yang memenuhi ekspresi tersebut. |
√ |
√ |
|
|
flatten(x) |
Mengonversi array dua dimensi menjadi array satu dimensi. |
√ |
× |
|
|
reduce(x, lambda_expression) |
Mereduksi array menjadi satu nilai dengan menerapkan ekspresi lambda pada elemen-elemennya. |
√ |
√ |
|
|
reverse(x) |
Membalik urutan elemen dalam sebuah array. |
√ |
√ |
|
|
sequence(x, y) |
Mengembalikan array nilai berurutan yang meningkat dalam rentang tertentu. Langkah default adalah 1. |
√ |
√ |
|
|
sequence(x, y, step) |
Mengembalikan array nilai berurutan yang meningkat dalam rentang tertentu, dengan langkah khusus. |
√ |
√ |
|
|
shuffle(x) |
Mengacak elemen-elemen dalam sebuah array. |
√ |
√ |
|
|
slice(x, start, length) |
Mengembalikan subset dari sebuah array. |
√ |
√ |
|
|
transform(x, lambda_expression) |
Mentransformasi setiap elemen dalam array menggunakan ekspresi lambda. |
√ |
√ |
|
|
zip(x, y...) |
Menggabungkan beberapa array menjadi satu array dua dimensi. Elemen pada indeks yang sama dari array input membentuk subarray baru. |
√ |
√ |
|
|
zip_with(x, y, lambda_expression) |
Menggabungkan dua array menjadi satu array dengan menerapkan ekspresi lambda pada setiap pasangan elemen yang bersesuaian. |
√ |
× |
Operator subscript
Operator subscript mengembalikan elemen pada indeks x dalam sebuah array. Operator ini setara dengan fungsi element_at.
Sintaks
[x]
Parameter
|
Parameter |
Deskripsi |
|
x |
Indeks berbasis 1 dari elemen yang akan diambil dari array. Nilainya harus bertipe |
Tipe nilai kembali
Nilai kembali memiliki tipe data yang sama dengan elemen array.
Contoh
Contoh ini mengembalikan elemen pertama dari field number.
-
Field contoh
number:[49,50,45,47,50] -
Pernyataan kueri
* | SELECT cast(json_parse(number) as array(bigint)) [1] -
Kueri mengembalikan
49.
Fungsi array_agg
Fungsi array_agg mengembalikan array dari semua nilai dalam x.
Sintaks
array_agg (x)
Parameter
|
Parameter |
Deskripsi |
|
x |
Parameter dapat berupa tipe data apa pun. |
Tipe nilai kembali
array
Contoh
Mengembalikan nilai field status sebagai array.
-
Pernyataan kueri
* | SELECT array_agg(status) AS array -
Hasil kueri: Field array berisi array kode status HTTP (seperti 200, 202, 204, 303, 304, 401, 402, dan 501).
Fungsi array_distinct
Menghapus elemen duplikat dari sebuah array.
Sintaks
array_distinct(x)
Parameter
|
Parameter |
Deskripsi |
|
x |
Harus berupa array. |
Tipe nilai kembali
array
Contoh
Menghapus elemen duplikat dari field number.
-
Field contoh
number:[49,50,45,47,50] -
Pernyataan kueri
*| SELECT array_distinct(cast(json_parse(number) as array(bigint))) -
Hasil kueri adalah
[49,50,45,47]. Elemen duplikat 50 dihapus dari array asli.
Fungsi array_except
Fungsi array_except mengembalikan selisih antara dua array.
Sintaks
array_except(x, y)
Parameter
|
Parameter |
Deskripsi |
|
x |
Harus berupa array. |
|
y |
Harus berupa array. |
Tipe nilai kembali
array
Contoh
Menghitung selisih antara array [1,2,3,4,5] dan [1,3,5,7].
-
Pernyataan kueri
* | SELECT array_except(array[1,2,3,4,5],array[1,3,5,7]) -
Kueri mengembalikan
[2,4].
Fungsi array_intersect
Menghitung irisan dua array.
Sintaks
array_intersect(x, y)
Parameter
|
Parameter |
Deskripsi |
|
x |
Array. |
|
y |
Array. |
Tipe nilai kembali
array
Contoh
Menghitung irisan array [1,2,3,4,5] dan [1,3,5,7].
-
Pernyataan kueri dan analisis
* | SELECT array_intersect(array[1,2,3,4,5],array[1,3,5,7]) -
Hasil kueri dan analisis adalah
[1,3,5].
Fungsi array_join
Menggabungkan elemen-elemen array menjadi sebuah string menggunakan delimiter yang ditentukan.
Sintaks
-
Menggabungkan elemen-elemen array menjadi sebuah string menggunakan delimiter. Elemen null diabaikan.
array_join(x, delimiter) -
Menggabungkan elemen-elemen array menjadi sebuah string menggunakan delimiter. Mengganti elemen null dengan null_replacement.
array_join(x, delimiter,null_replacement)
Parameter
|
Parameter |
Deskripsi |
|
x |
Array input. |
|
delimiter |
String yang digunakan untuk memisahkan elemen-elemen array. |
|
null_replacement |
String yang digunakan untuk mengganti elemen null. |
Tipe nilai kembali
varchar.
Contoh
Contoh ini menggabungkan elemen-elemen array [null, 'Log', 'Service'] menjadi sebuah string menggunakan spasi sebagai delimiter. Elemen null diganti dengan 'Alicloud'.
-
Kueri
* | SELECT array_join(array[null,'Log','Service'],' ','Alicloud') -
Hasil: Nilai kolom _col0 adalah
Alicloud Log Service.
Fungsi array_max
Mengembalikan nilai maksimum dalam sebuah array.
Sintaks
array_max(x)
Parameter
|
Parameter |
Deskripsi |
|
x |
Input harus berupa array. Penting
Jika array berisi elemen null, fungsi mengembalikan null. |
Tipe nilai kembali
Nilai yang dikembalikan memiliki tipe data yang sama dengan elemen array.
Contoh
Contoh ini mencari nilai maksimum dalam array angka.
-
Field contoh
number:[49,50,45,47,50] -
Pernyataan kueri
*| SELECT array_max(try_cast(json_parse(number) as array(bigint))) AS max_number -
Hasil kueri: Nilai max_number adalah 50.
Fungsi array_min
Mengembalikan nilai minimum dalam sebuah array.
Sintaks
array_min(x)
Parameter
|
Parameter |
Deskripsi |
|
x |
Array input. Penting
Jika array berisi elemen null, fungsi mengembalikan null. |
Tipe nilai kembali
Nilai kembali memiliki tipe data yang sama dengan elemen array.
Contoh
Mencari nilai minimum dalam array angka.
-
Field contoh
number:[49,50,45,47,50] -
Pernyataan kueri
*| SELECT array_min(try_cast(json_parse(number) as array(bigint))) AS min_number -
Kueri mengembalikan 45.
Fungsi array_position
Fungsi array_position mengembalikan indeks berbasis 1 dari elemen dalam array. Fungsi ini mengembalikan 0 jika elemen tidak ditemukan.
Sintaks
array_position(x, element)
Parameter
|
Parameter |
Deskripsi |
|
x |
Array yang akan dicari. |
|
element |
Elemen yang akan dicari dalam array. Catatan
Jika elemen yang dicari adalah null, fungsi mengembalikan null. |
Tipe nilai kembali
Mengembalikan nilai bigint.
Contoh
Mencari indeks 45 dalam array [49,45,47].
-
Pernyataan kueri dan analisis
* | SELECT array_position(array[49,45,47],45) -
Hasilnya adalah
2, yang menunjukkan bahwa elemen45berada pada indeks2dalam array.
Fungsi array_remove
Fungsi array_remove menghapus semua kemunculan elemen yang ditentukan dari sebuah array.
Sintaks
array_remove(x, element)
Parameter
|
Parameter |
Deskripsi |
|
x |
Array input. |
|
element |
Elemen yang akan dihapus dari array. Catatan
Jika element adalah null, fungsi mengembalikan null. |
Tipe nilai kembali
Mengembalikan array.
Contoh
Menghapus 45 dari array [49,45,47].
-
Pernyataan kueri dan analisis
* | SELECT array_remove(array[49,45,47],45) -
Hasilnya adalah
[49,47].
Fungsi array_sort
Fungsi array_sort mengurutkan elemen-elemen array secara ascending, menempatkan elemen null di akhir.
Sintaks
array_sort(x)
Parameter
|
Parameter |
Deskripsi |
|
x |
Array yang akan diurutkan. |
Tipe nilai kembali
Mengembalikan array.
Contoh
Mengurutkan array ['b', 'd', null, 'c', 'a'] secara ascending.
-
Pernyataan kueri
* | SELECT array_sort(array['b','d',null,'c','a']) -
Hasilnya adalah
["a","b","c","d",null]. Elemen-elemen diurutkan secara ascending berdasarkan abjad, dan nilai null ditempatkan di akhir.
Fungsi array_transpose
Fungsi array_transpose memutar balik array dua dimensi (matriks). Fungsi ini membuat array dua dimensi baru dengan mengelompokkan elemen yang memiliki indeks yang sama di seluruh array dalam.
Sintaks
array_transpose(x)
Parameter
|
Parameter |
Deskripsi |
|
x |
Input berupa array dua dimensi bertipe |
Tipe nilai kembali
array(double)
Contoh
Fungsi ini mengelompokkan elemen pada indeks yang sama di setiap array dalam untuk membentuk array dalam baru. Misalnya, dari array [0,1,2,3], [10,19,18,17], dan [9,8,7], fungsi mengambil elemen pertama (0, 10, dan 9) dan mengelompokkannya menjadi array dalam baru [0.0,10.0,9.0].
-
Pernyataan kueri dan analisis
* | SELECT array_transpose(array[array[0,1,2,3],array[10,19,18,17],array[9,8,7]]) -
Hasil kueri dan analisis: Nilai dalam kolom _col0 adalah
[[0.0,10.0,9.0],[1.0,19.0,8.0],[2.0,18.0,7.0],[3.0,17.0]].
Fungsi array_union
Mengembalikan array elemen dalam gabungan dua array, tanpa duplikat.
Sintaks
array_union(x, y)
Parameter
|
Parameter |
Deskripsi |
|
x |
Harus berupa array. |
|
y |
Harus berupa array. |
Tipe nilai kembali
array
Contoh
Contoh ini menghitung gabungan array [1,2,3,4,5] dan [1,3,5,7].
-
Pernyataan kueri
* | SELECT array_union(array[1,2,3,4,5],array[1,3,5,7]) -
Kueri mengembalikan
[1,2,3,4,5,7].
Fungsi cardinality
Mengembalikan jumlah elemen dalam sebuah array.
Sintaks
cardinality(x)
Parameter
|
Parameter |
Deskripsi |
|
x |
Array input. |
Tipe nilai kembali
Mengembalikan nilai bigint.
Contoh
Contoh ini menghitung jumlah elemen dalam field number.
-
Field contoh
number:[49,50,45,47,50] -
Pernyataan kueri
*| SELECT cardinality(cast(json_parse(number) as array(bigint))) -
Kueri mengembalikan
5, karena array berisi 5 elemen.
Fungsi concat
Menggabungkan beberapa array menjadi satu array.
Sintaks
concat(x, y…)
Parameter
|
Parameter |
Deskripsi |
|
x |
Harus berupa array. |
|
y |
Harus berupa array. |
Tipe nilai kembali
array
Contoh
Menggabungkan array ['red','blue'] dan ['yellow','green'].
-
Pernyataan kueri
* | SELECT concat(array['red','blue'],array['yellow','green']) -
Kueri mengembalikan
["red","blue","yellow","green"].
fungsi contains
Memeriksa apakah array berisi elemen tertentu. Mengembalikan true jika ditemukan.
Sintaks
contains(x, element)
Parameter
|
Parameter |
Deskripsi |
|
x |
Array yang akan diperiksa. |
|
element |
Elemen yang akan dicari dalam array. |
Tipe nilai kembali
boolean
Contoh
Memeriksa apakah field region berisi 'cn-beijing'.
-
Field contoh
region:["cn-hangzhou","cn-shanghai","cn-beijing"] -
Pernyataan kueri
*| SELECT contains(cast(json_parse(region) as array(varchar)),'cn-beijing') -
Kueri mengembalikan kolom bernama
_col0dengan nilaitrue, yang menunjukkan bahwa arrayregionberisicn-beijing.
Fungsi element_at
Mengembalikan elemen pada indeks y dalam sebuah array.
Sintaks
element_at(x, y)
Parameter
|
Parameter |
Deskripsi |
|
x |
Array dari mana elemen akan diambil. |
|
y |
Indeks bigint berbasis 1 dari elemen yang akan diambil dari array. |
Tipe nilai kembali
Nilai kembali memiliki tipe data yang sama dengan elemen dalam array.
Contoh
Contoh ini mengambil elemen kedua dari array yang disimpan sebagai string JSON dalam field number.
-
Field contoh
number:[49,50,45,47,50] -
Pernyataan kueri dan analisis
* | SELECT element_at(cast(json_parse(number) AS array(varchar)), 2) -
Kueri mengembalikan kolom bernama
_col0dengan nilai50.
Fungsi filter
Fungsi filter menyaring array berdasarkan ekspresi lambda, mengembalikan array baru yang hanya berisi elemen yang membuat ekspresi tersebut bernilai true.
Sintaks
filter(x, lambda_expression)
Parameter
|
Parameter |
Deskripsi |
|
x |
Array input. |
|
lambda_expression |
Ekspresi lambda. Untuk informasi lebih lanjut, lihat ekspresi lambda. |
Tipe nilai kembali
Mengembalikan array.
Contoh
Mengembalikan elemen yang lebih besar dari 0 dari array [5,-6,null,7]. Ekspresi lambdanya adalah x -> x > 0.
-
Pernyataan kueri
* | SELECT filter(array[5,-6,null,7],x -> x > 0) -
Kueri mengembalikan
[5,7].
Fungsi flatten
Meratakan array dua dimensi menjadi array satu dimensi.
Sintaks
flatten(x)
Parameter
|
Parameter |
Deskripsi |
|
x |
Array dua dimensi yang akan diratakan. Nilainya harus berupa array. |
Tipe nilai kembali
Mengembalikan array satu dimensi.
Contoh
Contoh ini meratakan array dua dimensi menjadi array satu dimensi.
-
Pernyataan kueri
* | SELECT flatten(array[array[1,2,3,4],array[5,2,2,4]]) -
Hasil kueri dan analisis: Kolom _col0 berisi
[1,2,3,4,5,2,2,4].
Fungsi reduce
Fungsi reduce menerapkan ekspresi lambda pada array, mengagregasi elemen-elemennya menjadi satu nilai.
Sintaks
reduce(array, initialState, inputFunction, outputFunction)
Parameter
|
Parameter |
Deskripsi |
|
array |
Array input elemen bigint. |
|
initialState, inputFunction, outputFunction |
Menentukan logika reduksi, yang mencakup keadaan awal, fungsi input yang memproses setiap elemen, dan fungsi output yang menyelesaikan hasil. Untuk informasi lebih lanjut, lihat ekspresi lambda. |
Tipe nilai kembali
bigint
Contoh
Menghitung jumlah elemen dalam array [5, 20, 50].
-
Pernyataan kueri
* | SELECT reduce(array[5, 20, 50], 0, (s, x) -> s + x, s -> s) -
Hasil kueri:
75
Fungsi reverse
Membalik urutan elemen dalam sebuah array.
Sintaks
reverse(x)
Parameter
|
Parameter |
Deskripsi |
|
x |
Array yang akan dibalik. |
Tipe nilai kembali
Array dengan elemen-elemennya dalam urutan terbalik.
Contoh
Membalik elemen-elemen dalam array [1,2,3,4,5].
-
Pernyataan kueri
* | SELECT reverse(array[1,2,3,4,5]) -
Hasil kueri:
[5,4,3,2,1].
Fungsi sequence
Fungsi sequence mengembalikan array nilai berurutan yang meningkat dalam rentang tertentu.
Sintaks
-
Menggunakan langkah default 1.
sequence(x, y) -
Menggunakan langkah khusus.
sequence(x, y, step)
Parameter
|
Parameter |
Deskripsi |
|
x |
Nilai awal urutan. Tipe data yang didukung adalah bigint dan timestamp. Untuk tipe timestamp, Anda dapat menggunakan Stempel waktu UNIX atau ekspresi tanggal dan waktu. |
|
y |
Nilai akhir urutan. Tipe data yang didukung adalah bigint dan timestamp. Untuk tipe timestamp, Anda dapat menggunakan Stempel waktu UNIX atau ekspresi tanggal dan waktu. |
|
step |
Nilai langkah. Ketika x dan y adalah ekspresi tanggal dan waktu, parameter step harus dalam salah satu format berikut:
|
Tipe nilai kembali
array
Contoh
-
Mengembalikan angka genap dari 0 hingga 10.
-
Pernyataan kueri
* | SELECT sequence(0,10,2) -
Kueri mengembalikan
[0,2,4,6,8,10].
-
-
Mengembalikan tanggal dari 23 Oktober 2017 hingga 12 Agustus 2021, dengan interval satu tahun.
-
Pernyataan kueri
ww* | SELECT sequence(from_unixtime(1508737026),from_unixtime(1628734085),interval '1' year to month ) -
Hasil kueri
["2017-10-23 13:37:06.000","2018-10-23 13:37:06.000","2019-10-23 13:37:06.000","2020-10-23 13:37:06.000"]
-
-
Mengembalikan Stempel waktu UNIX antara 1628733298 dan 1628734085 dengan interval 60 detik.
-
Pernyataan kueri
* | SELECT sequence(1628733298,1628734085,60) -
Dalam hasilnya, field
_col0berisi array stempel waktu[1628733298,1628733358,1628733418,1628733478,1628733538,1628733598,1628733658,1628733718,1628733778,1628733838,1628733898,1628733958,1628734018,1628734078].
-
Fungsi shuffle
Mengacak elemen-elemen dalam sebuah array secara acak.
Sintaks
shuffle(x)
Parameter
|
Parameter |
Deskripsi |
|
x |
Harus berupa array. |
Tipe nilai kembali
Mengembalikan array.
Contoh
Contoh ini mengembalikan permutasi acak dari array [1,2,3,4,5].
-
Pernyataan kueri dan analisis
*| SELECT shuffle(array[1,2,3,4,5]) -
Hasil kueri dan analisis: Kueri mengembalikan satu kolom,
_col0, yang berisi array yang diurutkan ulang secara acak. Contoh nilai termasuk[3,1,2,4,5],[5,1,2,4,3], dan[2,5,3,1,4].
Fungsi slice
Mengembalikan subset dari sebuah array.
Sintaks
slice(x, start, length)
Parameter
|
Parameter |
Deskripsi |
|
x |
Array input. |
|
start |
Indeks awal berbasis 1 dari irisan.
|
|
length |
Jumlah elemen yang akan disertakan dalam subset. |
Tipe nilai kembali
array
Contoh
Contoh ini mengembalikan subset dua elemen dari array [1,2,4,5,6,7,7], dimulai dari elemen ketiga.
-
Pernyataan kueri dan analisis
* | SELECT slice(array[1,2,4,5,6,7,7],3,2) -
Hasil kueri dan analisis: Kolom _col0 berisi
[4,5].
Fungsi transform
Fungsi transform menerapkan ekspresi lambda pada setiap elemen array.
Sintaks
transform(x, lambda_expression)
Parameter
|
Parameter |
Deskripsi |
|
x |
Harus berupa array. |
|
lambda_expression |
Ekspresi lambda yang akan diterapkan. Untuk informasi lebih lanjut, lihat ekspresi lambda. |
Tipe nilai kembali
Array.
Contoh
Contoh ini menambahkan 1 ke setiap elemen dalam array [5,6].
-
Pernyataan kueri dan analisis
* | SELECT transform(array[5,6],x -> x + 1) -
Kueri mengembalikan
[6,7].
Fungsi zip
Fungsi zip menggabungkan beberapa array menjadi array dua dimensi. Fungsi ini mengelompokkan elemen dengan indeks yang sama dari array input untuk membentuk array bersarang.
Sintaks
zip(x, y...)
Parameter
|
Parameter |
Deskripsi |
|
x |
Harus berupa array. |
|
y |
Harus berupa array. |
Tipe nilai kembali
Mengembalikan array dua dimensi.
Contoh
Contoh ini menggabungkan array [1,2,3], ['1b',null,'3b'], dan [1,2,3] menjadi array dua dimensi.
-
Pernyataan kueri dan analisis
* | SELECT zip(array[1,2,3], array['1b',null,'3b'],array[1,2,3]) -
Kolom _col0 dalam hasil kueri dan analisis mengembalikan
[[1,"1b",1],[2,null,2],[3,"3b",3]]. Fungsi ini mengelompokkan elemen dari array input berdasarkan indeks yang sama.
Fungsi zip_with
Fungsi zip_with menggabungkan dua array dengan menerapkan ekspresi lambda pada elemen-elemen yang bersesuaian.
Sintaks
zip_with(x, y, lambda_expression)
Parameter
|
Parameter |
Deskripsi |
|
x |
Array input pertama. |
|
y |
Array input kedua. |
|
lambda_expression |
Ekspresi lambda yang menentukan cara menggabungkan elemen-elemen. Untuk informasi lebih lanjut, lihat ekspresi lambda. |
Tipe nilai kembali
array
Contoh
Contoh ini menggunakan ekspresi lambda (x, y) -> x + y untuk menjumlahkan elemen-elemen yang bersesuaian dari array [1,2] dan [3,4]. Fungsi ini mengembalikan hasilnya dalam array baru.
-
Pernyataan kueri dan analisis
SELECT zip_with(array[1,2], array[3,4],(x,y) -> x + y) -
Hasil kueri dan analisis: Nilai dalam kolom
_col0adalah[4,6].