ARRAY
ARRAY はデータベースの拡張型として、PostgreSQL、ClickHouse、Snowflake などのさまざまなデータベースシステムでサ ポートされています。ARRAY は A/B テスト、ユーザータグ分析、ユーザープロファイリングなどのシナリオで広く使用されています。StarRocks は多次元配列のネスト、配列のスライス、比較、フィルタリングをサポートしています。
ARRAY カラムの定義
テーブルを作成する際に ARRAY カラムを定義できます。
-- 一次元配列を定義します。
ARRAY<type>
-- ネストされた配列を定義します。
ARRAY<ARRAY<type>>
-- 配列カラムを NOT NULL として定義します。
ARRAY<type> NOT NULL
type
は配列内の要素のデータ型を指定します。StarRocks は次の要素型をサポートしています: BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, LARGEINT, FLOAT, DOUBLE, VARCHAR, CHAR, DATETIME, DATE, JSON, ARRAY (v3.1 以降), MAP (v3.1 以降), STRUCT (v3.1 以降)。
配列内の要素はデフォルトで NULL 可能です。例えば、[null, 1 ,2]
のように。配列内の要素を NOT NULL として指定することはできませんが、テーブル作成時に ARRAY カラムを NOT NULL として指定することは可能です。以下のコードスニペットの3番目の例を参照してください。
例:
-- c1 を要素型が INT の一次元配列として定義します。
create table t0(
c0 INT,
c1 ARRAY<INT>
)
duplicate key(c0)
distributed by hash(c0);
-- c1 を要素型が VARCHAR のネストされた配列として定義します。
create table t1(
c0 INT,
c1 ARRAY<ARRAY<VARCHAR(10)>>
)
duplicate key(c0)
distributed by hash(c0);
-- c1 を NOT NULL の配列カラムとして定義します。
create table t2(
c0 INT,
c1 ARRAY<INT> NOT NULL
)
duplicate key(c0)
distributed by hash(c0);
制限事項
StarRocks テーブルで ARRAY カラムを作成する際には、以下の制限があります:
- v2.1 より前のバージョンでは、ARRAY カラムは重複キーテーブルでのみ作成できます。v2.1 以降では、他のタイプのテーブル(Primary Key、Unique Key、集計)でも ARRAY カラムを作成できます。ただし、集計テーブルでは、そのカラムでデータを集計するために使用される関数が replace() または replace_if_not_null() の場合にのみ ARRAY カラムを作成できます。詳細は Aggregate table を参照してください。
- ARRAY カラムはキー列として使用できません。
- ARRAY カラムはパーティションキー(PARTITION BY に含まれる)やバケッティングキー(DISTRIBUTED BY に含まれる)として使用できません。
- DECIMAL V3 は ARRAY でサポートされていません。
- 配列は最大14レベルのネストが可能です。
SQL で配列を構築する
配列は、SQL で角括弧 []
を使用して構築でき、各配列要素はカンマ(,
)で区切られます。
mysql> select [1, 2, 3] as numbers;
+---------+
| numbers |
+---------+
| [1,2,3] |
+---------+
mysql> select ["apple", "orange", "pear"] as fruit;
+---------------------------+
| fruit |
+---------------------------+
| ["apple","orange","pear"] |
+---------------------------+
mysql> select [true, false] as booleans;
+----------+
| booleans |
+----------+
| [1,0] |
+----------+