すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:マップ

最終更新日:Mar 29, 2026

MAP 型はキーと値のペアを格納するデータの型であり、AnalyticDB for MySQL 3.1.1 以降でサポートされます。

定義

MAP 列では、キーが対応する値にマッピングされます。

  • キーには基本データ型を指定する必要があります: TINYINTBOOLEANSMALLINTINTBIGINTFLOATDOUBLE、または STRING です。

  • には基本データ型、MAP 型、または ARRAY 型を指定できます。これにより、ネストされた構造を実現できます。

たとえば、フラットなマップには map<int, string> を定義し、ネストされたマップには map<int, map<int, string>> を定義します。

注意事項

  • MAP 列および ARRAY 列にはインデックスはサポートされていません。SQL ステートメント内でフィルター条件を指定して、スキャン対象となるデータ量を削減してください。

  • マップ内のキーは一意である必要があります。

  • キーの挿入順序は保持されません。たとえば、{"a":1,"b":2,"d":3} を挿入しても、返される結果は {"d":3,"a":1,"b":2} のようになる場合があります。

使用例

テーブルの作成

CREATE TABLE map_test (
  `a` INT,
  `b` MAP<INT, STRING>,
  `c` MAP<INT, MAP<INT, STRING>>,
  PRIMARY KEY (`a`)
) DISTRIBUTED BY HASH(`a`);

データの挿入

INSERT INTO map_test VALUES (1, '{1:"a"}', '{1:{11:"a"},2:{22:"b"}}');

データの照会

SELECT * FROM map_test;
+------+---------+-------------------------+
| a    | b       | c                       |
+------+---------+-------------------------+
|    1 | {1:"a"} | {1:{11:"a"},2:{22:"b"}} |
+------+---------+-------------------------+
1 row in set (0.07 sec)

element_at 関数を使用すると、キーを指定して値を取得できます。引数には添字ではなく、キーを指定します。

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)

map_keys 関数および map_values 関数を使用すると、すべてのキーまたは値を配列として抽出できます。size 関数は、キーと値の合計数を返します。

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)

サポートされる関数

関数説明使用例戻り値の型
element_at指定されたキーに対応する値を返します。element_at(map(array["a","b"], array[1,2]), a)1V
sizeキーと値の合計数を返します。size(map(array["a","b"], array[1,2]))4INT
map_keysすべてのキーを配列として返します。map_keys(map(array["a","b"], array[1,2]))["a","b"]ARRAY<K>
map_valuesすべての値を配列として返します。map_values(map(array["a","b"], array[1,2]))[1,2]ARRAY<V>