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

AnalyticDB:Array

最終更新日:Sep 06, 2024

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>