Tipe MAP menyimpan pasangan kunci-nilai dan didukung di AnalyticDB for MySQL 3.1.1 serta versi yang lebih baru.
Definisi
Kolom MAP memetakan kunci ke nilai:
Kunci harus berupa tipe data primitif:
TINYINT,BOOLEAN,SMALLINT,INT,BIGINT,FLOAT,DOUBLE, atauSTRING.Nilai dapat berupa tipe data primitif atau tipe MAP atau ARRAY, sehingga memungkinkan struktur bersarang.
Sebagai contoh, definisikan map<int, string> untuk map datar, atau map<int, map<int, string>> untuk map bersarang.
Catatan penggunaan
Indeks tidak didukung pada kolom MAP atau ARRAY. Gunakan kondisi filter dalam Pernyataan SQL untuk mengurangi jumlah data yang dipindai.
Kunci harus unik dalam satu map.
Urutan penyisipan kunci tidak dipertahankan. Sebagai contoh, menyisipkan
{"a":1,"b":2,"d":3}mungkin dikembalikan sebagai{"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`);Sisipkan data
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)Gunakan element_at untuk mengambil nilai berdasarkan kunci. Argumennya adalah kunci, bukan indeks.
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)Gunakan map_keys dan map_values untuk mengekstrak semua kunci atau nilai sebagai array. Fungsi size mengembalikan jumlah total pasangan kunci-nilai.
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 | Contoh | Tipe kembalian |
|---|---|---|---|
element_at | Mengembalikan nilai untuk kunci tertentu. | element_at(map(array["a","b"], array[1,2]), a) → 1 | V |
size | Mengembalikan jumlah total kunci dan nilai. | size(map(array["a","b"], array[1,2])) → 4 | INT |
map_keys | Mengembalikan semua kunci sebagai array. | map_keys(map(array["a","b"], array[1,2])) → ["a","b"] | ARRAY<K> |
map_values | Mengembalikan semua nilai sebagai array. | map_values(map(array["a","b"], array[1,2])) → [1,2] | ARRAY<V> |