AnalyticDB for MySQL versi 3.1.1 dan yang lebih baru mendukung tipe ARRAY dan MAP. Topik ini menjelaskan definisi, peringatan, serta contoh penggunaan tipe ARRAY.
Definisi
Array digunakan untuk menyimpan data dan mendukung elemen duplikat, mirip dengan daftar di Java. Semua elemen dalam array memiliki tipe data yang sama. Sebagai contoh, jika array<int> didefinisikan untuk Kolom A, maka semua elemen anak di Kolom A bertipe INT. Array juga mendukung struktur bersarang, seperti array<array<string>>.
Peringatan
Indeks tidak dapat dibuat untuk kolom dengan tipe ARRAY atau MAP. Disarankan untuk menggabungkan kondisi pencarian dengan pernyataan SQL guna memfilter data, alih-alih memfilter data secara langsung. Hal ini membantu mengurangi jumlah data yang harus dipindai.
Contoh
Buat tabel
Create Table `array_test` ( `a` int, `b` array<int>, `c` array<array<string>>, primary key (`a`) ) DISTRIBUTED BY HASH(`a`)
Tulis data
Sebagai contoh, Anda dapat menyisipkan satu baris data dengan b disetel ke [1,2,3] dan c disetel ke [["a"],["b","c"]].
insert into array_test values (1, '[1,2,3]', '[["a"],["b","c"]]');
Kueri data
mysql> select * from array_test; +------+---------+-------------------+ | a | b | c | +------+---------+-------------------+ | 1 | [1,2,3] | [["a"],["b","c"]] | +------+---------+-------------------+ 1 row in set (0,08 sec)PentingSubskrip array dimulai dari 1, bukan 0.
Anda dapat menggunakan b[1] untuk mendapatkan alamat data dalam array, yang setara dengan fungsi element_at(b, 1).
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)Kolom dengan tipe ARRAY atau MAP dikembalikan dalam hasil kueri dalam format JSON. Sebagai contoh, jika c[2] sesuai dengan subkolom bersarang dengan tipe array<string>, subkolom tersebut akan dikembalikan dalam format JSON.
Fungsi yang didukung
Fungsi | Deskripsi | Tipe pengembalian |
element_at | Mengembalikan nilai. Subskrip dimulai dari 1. Contoh: element_at(array[1,2], 1) ==> 1. | T |
size | Mengembalikan jumlah elemen. | int |
contains | Menentukan apakah array berisi elemen anak. Contoh: contains(array[1,2], 2) ==> 1. | BOOL |
array_max | Mengembalikan elemen anak maksimum dalam array. | T |
array_min | Mengembalikan elemen anak minimum dalam array. | T |
array_position | Mengembalikan indeks kemunculan pertama suatu elemen dalam array. Contoh: array_position(array['a','b','b'],'b') ==>2. | int |
array_remove | Menghapus semua elemen anak yang sama dengan nilai tertentu dari array. Contoh: array_remove(array['a','b','b'],'b')==>['a']. | array<T> |
array_sort | Mengurutkan array. Contoh: array_sort(array[3,2,1]) ==> [1,2,3]. | array<T> |
reverse | Membalik urutan elemen anak dalam array. Contoh: reverse(array[5,9,3]) ==>[3,9,5]. | array<T> |
shuffle | Mengacak urutan elemen dalam array. Contoh: shuffle(array[1,5,8])==> [5,1,8]. | array<T> |
slice | Mengekstrak elemen anak terpilih dari array. Contoh: array slice(array[1,2,3,4,5], 3,2) ==> [3,4]. | array<T> |
concat | Menggabungkan elemen anak dari dua atau lebih array tanpa menghapus duplikat. Contoh: concat(array[1], array[1,2]) ==>[1,1,2]. | array<T> |
array_distinct | Menghapus elemen anak duplikat dari array. Contoh: array_distinct(array[1,1,2]) ==>[1,2]. | array<T> |
array_union | Menggabungkan elemen anak dari dua atau lebih array tanpa duplikat. Contoh: array_union(array[1], array[1,2])==>[1,2]. | array<T> |
array_intersect | Membandingkan elemen dari dua atau lebih array dan mengembalikan kecocokan. Contoh: array_intersect(array[1], array[1,2]) ==>[1]. | array<T> |
array_join | Menggabungkan elemen dalam array menggunakan pemisah yang diberikan, mirip dengan Joiner. Contoh: array_join(array[1,2,3,4],'a') ==>1a2a3a4. | string |
flatten | Meratakan array bersarang menjadi array tunggal. Contoh: flatten(array[array[1,2],array[3]])==>[1,2,3]. | array<X> |