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

AnalyticDB:Array

最終更新日:Mar 29, 2026

AnalyticDB for MySQL 3.1.1 以降では、ARRAY および MAP データの型がサポートされています。本ページでは、ARRAY 型について、その定義、制限事項、使用例、およびサポートされる関数を説明します。

定義

ARRAY は、同一のデータの型を持つ要素のコレクションを格納するものであり、重複を許容します。これは Java のリストと類似しています。配列内のすべての要素は、同じデータの型である必要があります。たとえば、列に対して array<int> を定義した場合、その列のすべての要素は INT 型となります。

ネストされた配列もサポートされます。例: array<array<string>>

制限事項

重要

ARRAY または MAP 型の列には、インデックスを作成できません。

配列データを効率的にフィルター処理するには、SQL クエリ内で検索条件を組み合わせて、配列全体をスキャンしないようにしてください。スキャン対象となるデータ量を最小限に抑えることで、クエリのパフォーマンスを向上させることができます。

配列の操作

テーブルの作成

以下のステートメントは、2 つの配列型の列を含むテーブルを作成します。b 列は array<int> 型、c 列は array<array<string>> 型です。

Create Table `array_test` (
  `a` int,
  `b` array<int>,
  `c` array<array<string>>,
  primary key (`a`)
) DISTRIBUTED BY HASH(`a`)

データの挿入

配列値は JSON 文字列として挿入します。以下のステートメントは、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)

ARRAY および MAP 型の列は、JSON 形式で返されます。たとえば、c[2] はネストされた array<string> のサブカラムであり、JSON 配列として返されます。

配列要素へのアクセス

添字による要素の取得には、角括弧表記または element_at 関数を使用します。

重要

配列の添字は 1 から始まり、0 ではありません。b[1]element_at(b, 1) は等価です。

以下の表は、両方のアクセス構文とその結果を示しています:

結果
b[1]1b の先頭要素)
element_at(b, 1)1b の先頭要素)
c[2]["b","c"]c の 2 番目の要素)
element_at(c, 2)["b","c"]c の 2 番目の要素)

完全なクエリ例を以下に示します:

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)

サポートされる関数

関数説明戻り値の型
element_at指定された添字(1 基準)の要素を返します。例:element_at(array[1,2], 1)1 を返します。T
size配列内の要素数を返します。int
contains配列に指定された値が含まれているかどうかを返します。例: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要素をランダムな順序で並べ替えた配列を返します。例:shuffle(array[1,5,8])[5,1,8] を返す可能性があります。array<T>
slice部分配列を返します。start は 1 基準の開始インデックス、length は返す要素数です。例:slice(array[1,2,3,4,5], 3, 2)[3,4] を返します。array<T>
concat2 つ以上の配列をマージし、重複を保持します。例:concat(array[1], array[1,2])[1,1,2] を返します。array<T>
array_distinct配列から重複要素を削除します。例:array_distinct(array[1,1,2])[1,2] を返します。array<T>
array_union2 つ以上の配列をマージし、重複を削除します。例:array_union(array[1], array[1,2])[1,2] を返します。array<T>
array_intersectすべての入力配列に共通して出現する要素を返します。例:array_intersect(array[1], array[1,2])[1] を返します。array<T>
array_join指定されたデリミタを使用して、配列要素を文字列に連結します。例:array_join(array[1,2,3,4],'a')1a2a3a4 を返します。string
flattenネストされた配列を単一レベルの配列にフラット化します。例:flatten(array[array[1,2],array[3]])[1,2,3] を返します。array<X>