全部产品
Search
文档中心

AnalyticDB:Map

更新时间:Jun 26, 2025

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)
      Penting
      • Gunakan 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_keys dan map_values mengembalikan 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: element_at(map(array["a","b"],array[1,2]), a) ==> 1.

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>