AnalyticDB for MySQLバージョン3.1.1以降は、ARRAYおよびMAPタイプをサポートしています。 このトピックでは、ARRAY型の定義、注意事項、および例について説明します。
定義
配列はデータを格納するために使用され、Javaのリストに似た重複要素をサポートします。 配列内のすべてのデータは同じデータ型です。 たとえば、列Aにarray<int> が定義されている場合、列Aの子要素はすべてINT型です。 入れ子構造はサポートされています。 例: array<array<string>> 。
注意事項
ARRAYまたはMAPタイプの列にはインデックスを作成できません。 データを直接フィルタリングするのではなく、検索条件とSQL文を組み合わせてデータをフィルタリングすることをお勧めします。 スキャンするデータ量を最小限に抑えます。
例
テーブルの作成
Create Table `array_test` ( `a` int, `b` array<int>, `c` array<array<string>>, primary key (`a`) ) DISTRIBUTE BY HASH(`a`)
書き込みデータ
たとえば、bが [1,2,3] に設定され、cが [["a"] 、["b" 、"c"]] に設定されているデータの行を挿入できます。
insert into array_test values (1, '[1,2,3]', '[["a"],["b","c"]]');
クエリデータ
mysql> select * from array_test; +------+---------+-------------------+ | a | b | c | +------+---------+-------------------+ | 1 | [1,2,3] | [["a"],["b","c"]] | +------+---------+-------------------+ 1 row in set (0.08 sec)
重要配列の下付き文字は0ではなく1から始まります。
b[1] を使用して、配列内のデータのアドレスを取得できます。これは、element_at(b, 1) 関数に相当します。
mysql> select a,b[1],element_at(b,1),c[2],element_at(c,2) from array_test; +------+------+-----------------+-----------+-----------------+ | a | b[1] | element_at(b,1) | c[2] | element_at(c,2) | +------+------+-----------------+-----------+-----------------+ | 1 | 1 | 1 | ["b","c"] | ["b","c"] | +------+------+-----------------+-----------+-----------------+ 1 row in set (0.11 sec)
クエリ結果には、ARRAYまたはMAP型の列がJSON形式で返されます。 たとえば、c[2] がネストされたサブ列に対応し、その型がarray<string> として定義されている場合、このサブ列はJSON形式で返されます。
サポートされている関数
関数 | 説明 | 戻り値の型 |
element_at | 値を返します。 下付き文字は1から始まる。 例: element_at(array[1,2], 1) ==> 1。 | T |
size | 要素の数を返します。 | int |
を含む | 配列に子要素が含まれるかどうかを指定します。 例: contains(array[1,2], 2) ==> 1。 | BOOL |
array_max | 配列内の最大の子要素を返します。 | T |
array_min | 配列内の最小の子要素を返します。 | T |
array_position | 配列内の要素の最初の出現のインデックスを返します。 例: array_position(array['a','b','b'],'b') ==> 2. | int |
array_remove | 指定された値に等しいすべての子要素を配列から削除します。 例: array_remove(array['a','b','b'],'b')==>['a'] 。 | array<T> |
array_sort | 配列を並べ替えます。 例: array_sort(array[3,2,1]) ==> [1,2,3] 。 | array<T> |
reverse | 配列内の子要素の順序を逆にします。 例: reverse(array[5,9,3]) ==>[3,9,5] 。 | array<T> |
シャッフル | 配列内の要素の順序をランダム化します。 例: shuffle(array[1,5,8])==> [5,1,8] 。 | array<T> |
スライス | 配列の選択した子要素を抽出します。 例: array slice(array[1,2,3,4,5], 3,2) ==> [3,4] 。 | array<T> |
concat | 重複を削除せずに、2つ以上の配列の子要素をマージします。 例: concat(array[1], array[1,2]) ==>[1,1,2] 。 | array<T> |
array_distinct | 重複した子要素を配列から削除します。 例: array_distinct(array[1,1,2]) ==>[1,2] 。 | array<T> |
array_union | 2つ以上の配列の子要素を重複なしでマージします。 例: array_union(array[1], array[1,2])==>[1,2] 。 | array<T> |
array_intersect | 2つ以上の配列の要素を比較し、一致を返します。 例: array_intersect(array[1], array[1,2]) ==>[1] 。 | array<T> |
array_join | 指定された区切り文字を使用して、配列内の要素を連結します。これはJoinerに似ています。 例: array_join(array[1,2,3,4],'a') ===> 1a2a3a4 | String |
平らにする | ネストされた配列を単一の配列にフラット化します。 例: flatten(array[1,2],array[3])==>[1,2,3] 。 | array<X> |