AnalyticDB for MySQLバージョン3.1.1以降は、ARRAYおよびMAPタイプをサポートしています。 このトピックでは、MAPタイプの定義、注意事項、および例について説明します。
定義
マップは、Javaのマップと同様に、キーと値のペアを格納するために使用されます。 キーは、tinyint
、boolean
、smallint
、int
、bigint
、float
、double
、string
などのネイティブデータ型である必要があります。 値は、ネイティブデータ型、または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 | キーに基づいて値を返します。 例: | V |
size | キーと値の総数を返します。 | int |
map_keys | すべてのキーのリストを返します。 | array<K> |
map_values | すべての値のリストを返します。 | array<V> |