カテゴリ:

文字列とバイナリ関数 (一般)、 テーブル関数

SPLIT_TO_TABLE

このテーブル関数は、文字列を分割(指定された区切り文字に基づく)し、結果を行にフラット化します。

こちらもご参照ください:

SPLIT

構文

SPLIT_TO_TABLE(<string>, <delimiter>)

引数

文字列

分割するテキストです。

区切り文字

文字列を分割するテキストです。

戻り値

返される値はテーブルです。

返される行は、固定された列のセットで構成されます。

+-----+-------+------ +
| SEQ | INDEX | VALUE |
|-----+------+--------|
SEQ

入力レコードに関連付けられた一意のシーケンス番号です。シーケンスにギャップがないことや、特定の方法で順序付けられていることは保証されません。

INDEX

要素のインデックスです。1つのベースです。

VALUE

フラット化された配列の要素の値です。

注釈

クエリは、この関数のデータのソースとして機能した元の(相関した)テーブルの列にもアクセスできます。元のテーブルの単一の行がフラット化されたビューで複数の行になった場合、この入力行の値は SPLIT_TO_TABLEによって生成された行の数と一致するように複製されます。

定数入力の簡単な例を次に示します。

SELECT table1.value 
    FROM table(split_to_table('a.b', '.')) AS table1
    ORDER BY table1.value;
+-------+
| VALUE |
|-------|
| a     |
| b     |
+-------+

次の例では、以下で作成されたテーブルとデータを使用します。

CREATE OR REPLACE TABLE splittable (v VARCHAR);
INSERT INTO splittable (v) VALUES ('a.b.c'), ('d'), ('');

このクエリは、関数の使用法を相関テーブルとして示しています。

SELECT * 
    FROM splittable, LATERAL SPLIT_TO_TABLE(splittable.v, '.')
    ORDER BY SEQ, INDEX;
+-------+-----+-------+-------+
| V     | SEQ | INDEX | VALUE |
|-------+-----+-------+-------|
| a.b.c |   1 |     1 | a     |
| a.b.c |   1 |     2 | b     |
| a.b.c |   1 |     3 | c     |
| d     |   2 |     1 | d     |
|       |   3 |     1 |       |
+-------+-----+-------+-------+