- カテゴリ:
文字列とバイナリ関数 (一般)、 テーブル関数
SPLIT_TO_TABLE¶
このテーブル関数は、文字列を分割(指定された区切り文字に基づく)し、結果を行にフラット化します。
- こちらもご参照ください。
構文¶
SPLIT_TO_TABLE(<string>, <delimiter>)
引数¶
string
分割するテキストです。
delimiter
文字列を分割するテキスト。
出力¶
この関数は、次の列を返します。
列名 |
データ型 |
説明 |
---|---|---|
SEQ |
NUMBER |
入力記録に関連する一意のシーケンス番号。シーケンスにギャップがないことや、特定の方法で順序付けられていることは保証されません。 |
INDEX |
NUMBER |
要素の1ベースのインデックス。 |
VALUE |
VARCHAR |
フラット化された配列の要素の値です。 |
注釈
クエリは、この関数のデータのソースとして機能した元の(相関した)テーブルの列にもアクセスできます。元のテーブルの単一の行がフラット化されたビューの複数の行になった場合、この入力行の値は、この関数によって生成された行の数と一致するように複製されます。
例¶
定数入力の簡単な例を次に示します。
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;
+-------+
| V |
|-------|
| a.b.c |
| d |
| |
+-------+
SPLIT_TO_TABLE 関数で LATERAL キーワードを使用すると、関数は splittable
テーブルの各行で相関テーブルとして実行されます。
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 | |
+-------+-----+-------+-------+
1つの列に著者、もう1つの列にコンマで区切られた書籍のタイトルを含む別のテーブルを作成します。
CREATE OR REPLACE TABLE authors_books_test (author VARCHAR, titles VARCHAR);
INSERT INTO authors_books_test (author, titles) VALUES
('Nathaniel Hawthorne', 'The Scarlet Letter , The House of the Seven Gables,The Blithedale Romance'),
('Herman Melville', 'Moby Dick,The Confidence-Man');
SELECT * FROM authors_books_test;
+---------------------+---------------------------------------------------------------------------+
| AUTHOR | TITLES |
|---------------------+---------------------------------------------------------------------------|
| Nathaniel Hawthorne | The Scarlet Letter , The House of the Seven Gables,The Blithedale Romance |
| Herman Melville | Moby Dick,The Confidence-Man |
+---------------------+---------------------------------------------------------------------------+
LATERAL キーワードと SPLIT_TO_TABLE 関数を使用して、各タイトルごとに個別の行を返すクエリを実行します。さらに、 TRIM 関数を使用して、タイトルの先頭と後続のスペースを削除します。なお、 SELECT のリストには、関数が返す固定 value
列が含まれています。
SELECT author, TRIM(value) AS title
FROM authors_books_test, LATERAL SPLIT_TO_TABLE(titles, ',')
ORDER BY author;
+---------------------+-------------------------------+
| AUTHOR | TITLE |
|---------------------+-------------------------------|
| Herman Melville | Moby Dick |
| Herman Melville | The Confidence-Man |
| Nathaniel Hawthorne | The Scarlet Letter |
| Nathaniel Hawthorne | The House of the Seven Gables |
| Nathaniel Hawthorne | The Blithedale Romance |
+---------------------+-------------------------------+