AnalyticDB for MySQL versi 3.1.1 dan yang lebih baru mendukung tipe ARRAY dan MAP. Topik ini menjelaskan definisi, perhatian, serta contoh penggunaan tipe MAP.
Definisi
Sebuah map digunakan untuk menyimpan pasangan kunci-nilai, mirip dengan map dalam Java. Kunci harus berupa tipe data primitif seperti tinyint, boolean, smallint, int, bigint, float, double, atau string. Nilai dapat berupa tipe data primitif, tipe MAP, atau ARRAY. Sebagai contoh, Anda dapat mendefinisikan map<int, string> dan map<int, map<int, string>> untuk sebuah kolom.
Perhatian
Anda tidak dapat membuat indeks untuk kolom bertipe ARRAY atau MAP. Kami menyarankan Anda menggabungkan kondisi pencarian dengan pernyataan SQL untuk memfilter data alih-alih langsung memfilter data. Minimalkan jumlah data yang dipindai.
Kunci dalam sebuah map harus unik.
Urutan penulisan kunci tidak dijamin. Sebagai contoh,
{"a":1,"b":2,"d":3}ditulis, tetapi hasil kueri yang dikembalikan adalah{"d":3, "a":1, "b":2}.
Contoh
Buat Tabel
Create Table `map_test` ( `a` int, `b` map<int, string>, `c` map<int, map<int, string>>, PRIMARY KEY (`a`) ) DISTRIBUTED BY HASH(`a`);
Tulis Data
Sebagai contoh, Anda dapat menyisipkan satu baris data di mana b disetel ke {1:"a"} dan c disetel ke {1:{11:"a"},2:{22:"b"}}.
INSERT INTO map_test VALUES (1, '{1:"a"}','{1:{11:"a"},2:{22:"b"}}');
Kueri Data
SELECT * FROM map_test; +------+---------+-------------------------+ | a | b | c | +------+---------+-------------------------+ | 1 | {1:"a"} | {1:{11:"a"},2:{22:"b"}} | +------+---------+-------------------------+ 1 row in set (0,07 sec)PentingGunakan fungsi
element_at(b, 1)untuk mendapatkan nilai berdasarkan kunci. Angka 1 menunjukkan kunci, bukan indeks.Fungsi size mengembalikan jumlah total kunci dan nilai.
Fungsi
map_keysdanmap_valuesmengembalikan array.
SELECT element_at(c,1), element_at(element_at(c,1),11) FROM map_test; +-----------------+--------------------------------+ | element_at(c,1) | element_at(element_at(c,1),11) | +-----------------+--------------------------------+ | {11:"a"} | a | +-----------------+--------------------------------+ 1 row in set (0,07 sec) SELECT map_keys(b),map_values(b),size(b),size(map_keys(b)),size(map_values(b)) FROM map_test; +-------------+---------------+---------+-------------------+---------------------+ | map_keys(b) | map_values(b) | size(b) | size(map_keys(b)) | size(map_values(b)) | +-------------+---------------+---------+-------------------+---------------------+ | [1] | ["a"] | 2 | 1 | 1 | +-------------+---------------+---------+-------------------+---------------------+ 1 row in set (0,08 sec) SELECT map_keys(c),map_values(c),size(c),size(map_keys(c)),size(map_values(c)) FROM map_test; +-------------+---------------------+---------+-------------------+---------------------+ | map_keys(c) | map_values(c) | size(c) | size(map_keys(c)) | size(map_values(c)) | +-------------+---------------------+---------+-------------------+---------------------+ | [1,2] | [{11:"a"},{22:"b"}] | 4 | 2 | 2 | +-------------+---------------------+---------+-------------------+---------------------+ 1 row in set (0,08 sec)
Fungsi yang didukung
Fungsi | Deskripsi | Tipe pengembalian |
element_at | Mengembalikan nilai berdasarkan kunci. Contoh: | V |
size | Mengembalikan jumlah total kunci dan nilai. | int |
map_keys | Mengembalikan daftar semua kunci. | array<K> |
map_values | Mengembalikan daftar semua nilai. | array<V> |