AnalyticDB for MySQL versi 3.1.1 dan yang lebih baru mendukung tipe data ARRAY dan MAP. Halaman ini menjelaskan tipe ARRAY, mencakup definisinya, batasan, contoh penggunaan, serta fungsi yang didukung.
Definisi
ARRAY menyimpan kumpulan elemen dengan tipe data yang sama dan memperbolehkan duplikat—mirip dengan list di Java. Semua elemen dalam array harus memiliki tipe yang sama. Misalnya, mendefinisikan array<int> untuk suatu kolom berarti setiap elemen dalam kolom tersebut bertipe INT.
Array bersarang (nested arrays) didukung. Contoh: array<array<string>>.
Batasan
Indeks tidak dapat dibuat pada kolom ARRAY atau MAP.
Untuk memfilter data array secara efisien, gabungkan kondisi pencarian dalam kueri SQL Anda alih-alih melakukan pemindaian penuh terhadap array. Meminimalkan data yang dipindai meningkatkan performa kueri.
Gunakan array
Buat tabel
Pernyataan berikut membuat tabel dengan dua kolom array: b bertipe array<int> dan c bertipe array<array<string>>.
Create Table `array_test` (
`a` int,
`b` array<int>,
`c` array<array<string>>,
primary key (`a`)
) DISTRIBUTED BY HASH(`a`)Masukkan data
Masukkan nilai array sebagai string JSON. Pernyataan berikut memasukkan satu baris dengan nilai b sebesar [1,2,3] dan c sebesar [["a"],["b","c"]].
insert into array_test values (1, '[1,2,3]', '[["a"],["b","c"]]');Kueri data
Kueri tabel untuk mengambil semua baris:
mysql> select * from array_test;
+------+---------+-------------------+
| a | b | c |
+------+---------+-------------------+
| 1 | [1,2,3] | [["a"],["b","c"]] |
+------+---------+-------------------+
1 row in set (0.08 sec)Kolom ARRAY dan MAP dikembalikan dalam format JSON. Sebagai contoh, c[2], yang merupakan subkolom array<string> bersarang, dikembalikan sebagai array JSON.
Akses elemen array
Gunakan notasi kurung siku atau fungsi element_at untuk mengambil elemen berdasarkan indeks.
Indeks array dimulai dari 1, bukan 0. b[1] dan element_at(b, 1) ekuivalen.
Tabel berikut menunjukkan kedua sintaks akses beserta hasilnya:
| Ekspresi | Hasil |
|---|---|
b[1] | 1 (elemen pertama dari b) |
element_at(b, 1) | 1 (elemen pertama dari b) |
c[2] | ["b","c"] (elemen kedua dari c) |
element_at(c, 2) | ["b","c"] (elemen kedua dari c) |
Contoh kueri lengkap:
mysql> select a,b[1],element_at(b,1),c[2],element_at(c,2) from array_test;
+------+------+-----------------+-----------+-----------------+
| a | b[1] | element_at(b,1) | c[2] | element_at(c,2) |
+------+------+-----------------+-----------+-----------------+
| 1 | 1 | 1 | ["b","c"] | ["b","c"] |
+------+------+-----------------+-----------+-----------------+
1 row in set (0.11 sec)Fungsi yang didukung
| Fungsi | Deskripsi | Tipe kembalian |
|---|---|---|
element_at | Mengembalikan elemen pada indeks yang diberikan (berbasis 1). Contoh: element_at(array[1,2], 1) mengembalikan 1. | T |
size | Mengembalikan jumlah elemen dalam array. | int |
contains | Mengembalikan apakah array berisi nilai yang ditentukan. Contoh: contains(array[1,2], 2) mengembalikan 1. | BOOL |
array_max | Mengembalikan elemen maksimum dalam array. | T |
array_min | Mengembalikan elemen minimum dalam array. | T |
array_position | Mengembalikan indeks kemunculan pertama suatu elemen. Contoh: array_position(array['a','b','b'],'b') mengembalikan 2. | int |
array_remove | Menghapus semua elemen yang nilainya sama dengan nilai yang ditentukan. Contoh: array_remove(array['a','b','b'],'b') mengembalikan ['a']. | array<T> |
array_sort | Mengurutkan array. Contoh: array_sort(array[3,2,1]) mengembalikan [1,2,3]. | array<T> |
reverse | Membalik urutan elemen. Contoh: reverse(array[5,9,3]) mengembalikan [3,9,5]. | array<T> |
shuffle | Mengembalikan array dengan elemen dalam urutan acak. Contoh: shuffle(array[1,5,8]) dapat mengembalikan [5,1,8]. | array<T> |
slice | Mengembalikan subarray. start adalah indeks awal berbasis 1; length adalah jumlah elemen yang dikembalikan. Contoh: slice(array[1,2,3,4,5], 3, 2) mengembalikan [3,4]. | array<T> |
concat | Menggabungkan dua atau lebih array, termasuk duplikat. Contoh: concat(array[1], array[1,2]) mengembalikan [1,1,2]. | array<T> |
array_distinct | Menghapus elemen duplikat dari array. Contoh: array_distinct(array[1,1,2]) mengembalikan [1,2]. | array<T> |
array_union | Menggabungkan dua atau lebih array dan menghapus duplikat. Contoh: array_union(array[1], array[1,2]) mengembalikan [1,2]. | array<T> |
array_intersect | Mengembalikan elemen yang muncul di semua array input. Contoh: array_intersect(array[1], array[1,2]) mengembalikan [1]. | array<T> |
array_join | Menggabungkan elemen array menjadi string menggunakan pembatas yang ditentukan. Contoh: array_join(array[1,2,3,4],'a') mengembalikan 1a2a3a4. | string |
flatten | Meratakan array bersarang menjadi array tingkat tunggal. Contoh: flatten(array[array[1,2],array[3]]) mengembalikan [1,2,3]. | array<X> |