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

AnalyticDB:Map

最終更新日:Sep 06, 2024

AnalyticDB for MySQLバージョン3.1.1以降は、ARRAYおよびMAPタイプをサポートしています。 このトピックでは、MAPタイプの定義、注意事項、および例について説明します。

定義

マップは、Javaのマップと同様に、キーと値のペアを格納するために使用されます。 キーは、tinyintbooleansmallintintbigintfloatdoublestringなどのネイティブデータ型である必要があります。 値は、ネイティブデータ型、またはMAP型またはARRAY型にすることができます。 たとえば、列にmap<int, string>map<int, map<int, string> を定義できます。

注意事項

  • ARRAYまたはMAPタイプの列にはインデックスを作成できません。 データを直接フィルタリングするのではなく、検索条件と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`)
      ) DISTRIBUTE BY HASH(`a`);
  • 書き込みデータ

    • たとえば、bが {1:"a"} に設定され、cが {1:{11:"a"},2:{22:"b"}} に設定されたデータの行を挿入できます。

      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(b, 1) 関数を使用して、キーに基づいて値を取得できます。 1は、下付き文字の代わりにキーを示す。

      • size関数は、キーと値の総数を返します。

      • map_keys関数とmap_values関数は配列を返します。

      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)

サポートされている関数

関数

説明

戻り値の型

element_at

キーに基づいて値を返します。 例: element_at(map(array["a","b"],array[1,2]), a) ==> 1

V

size

キーと値の総数を返します。

int

map_keys

すべてのキーのリストを返します。

array<K>

map_values

すべての値のリストを返します。

array<V>