All Products
Search
Document Center

AnalyticDB:Map

Last Updated:Mar 29, 2026

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, atau STRING.

  • 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

FungsiDeskripsiContohTipe kembalian
element_atMengembalikan nilai untuk kunci tertentu.element_at(map(array["a","b"], array[1,2]), a)1V
sizeMengembalikan jumlah total kunci dan nilai.size(map(array["a","b"], array[1,2]))4INT
map_keysMengembalikan semua kunci sebagai array.map_keys(map(array["a","b"], array[1,2]))["a","b"]ARRAY<K>
map_valuesMengembalikan semua nilai sebagai array.map_values(map(array["a","b"], array[1,2]))[1,2]ARRAY<V>