文字列の分割
区切り文字で文字列を分け、1 件 1 行に積み直します。 A,B,C と入っていたタグを 3 行に分けるときに使います。
分析プロジェクトとの違い
| 見るところ | SQLビルダー | 分析プロジェクト |
|---|---|---|
| 分けた結果 | 行が増える(列は増えない) | 列が増える。縦持ちに切り替えもできる |
| 結果の列名 | 入力した名前に flatten_ が付く | 入力した名前に 0 からの連番が付く |
| もとの列 | 必ず消える | 残すか消すか選べる |
| 欠損の置換 | ない | ある |
入出力
| ポート | 内容 |
|---|---|
| 入力データ | データ |
| 出力データ | データ |
設定項目
フォームの見出しの並び — 「新規列名を入力」 → 「対象列を選択」 → 「分割文字の設定」。条件によって出ない見出しもあります。
- 列名必須
- 分けた結果を入れる列の名前のもと。実際にできる列は、ここに入れた名前の前に
flatten_が付いたものです。タグと入れるとflatten_タグになります。 - 列を選択必須
- 分けるもとの列。文字列の列から 1 つ選べます。この列は結果に残りません。
- 分割文字
- 区切りに使う文字。入れた文字はそのまま SQL に渡ります。つなぎ先によっては正規表現として読まれるので、
.や|のような記号を区切りにしたいときは、先に SQLプレビュー で組まれた SQL を確かめてください。
出力される列
| 列 | どうなるか |
|---|---|
| 分けたもとの列 | 消えます |
flatten_ + 入力した名前 | 分けた値が 1 つずつ入ります(文字列) |
| そのほかの列 | そのまま。増えた行すべてに同じ値が入ります |
つなぎ先による違い
| つなぎ先 | 使えるか |
|---|---|
| MySQL / Amazon Redshift / SQL Server/Azure T-SQL | 使えません(実行するとエラーになります) |
| そのほか | 使えます |
生成される SQL
PostgreSQL につないで、タグ を , で分け、列名に タグ と入れた場合です。
SELECT "商品", "flatten_タグ"FROM ( SELECT "商品", REGEXP_SPLIT_TO_ARRAY("タグ", ',') AS "タグ" FROM "products") AS "node_2"CROSS JOIN UNNEST(タグ) as flatten_タグいったん配列にしてから UNNEST で広げる、という 2 段構えです。 行が増えるのはこの UNNEST のためです。
つなぎ先によって形が変わります。
| つなぎ先 | 使われるもの |
|---|---|
| PostgreSQL | REGEXP_SPLIT_TO_ARRAY + CROSS JOIN UNNEST |
| Treasure Data | LATERAL VIEW EXPLODE |
| Snowflake | LATERAL FLATTEN |
| Amazon Athena / Presto | CROSS JOIN UNNEST |
エラーと対処
どのエラーも、設定を直してノードを実行し直せば消えます。
使えないデータベースにつないでいる
MySQL / Amazon Redshift / SQL Server/Azure T-SQL で実行すると出ます。
この関数はサポートしていません
直し方 — この機能を外してください。どうしても分けたいときは、データソース化するで nehan に取り込んでから、分析プロジェクトの文字列の分割を使ってください。
上流にない列が選ばれている
前のノードで列が消えたあとに実行すると出ます。
存在しない列が選択されています
直し方 — 対象列を選び直してください。
入力がつながっていない
前のノードがつながっていないと出ます。
カラムが選択されていません。条件を確認してください
直し方 — 入力にノードをつないでください。
対象列が選ばれていない
対象列が空のまま実行した場合です。翻訳された文言はなく、英語のまま出ます。
column is not selected
直し方 — 分ける列を選んでください。
よく使う例
1. タグを 1 件 1 行にする
お題 — A,B,C と入っているタグを集計したい
入力 — 商品 タグ
設定 — 列名 タグ、対象列 タグ、分割文字 ,
出力 — 商品 flatten_タグ。1 商品につきタグの数だけ行が増えます
2. タグごとの件数を数える
お題 — どのタグが多いか
入力 — 例 1 の出力(商品 flatten_タグ)
設定 — この機能のあとにデータ集計をつなぎ、キー列 flatten_タグ、カウント
出力 — タグごとの件数
3. 分けた値で絞り込む
お題 — 特定のタグが付いた商品だけ見たい
入力 — 例 1 の出力(商品 flatten_タグ)
設定 — この機能のあとに条件で行を絞り込みをつなぎ、flatten_タグ で絞る
出力 — そのタグの付いた行だけ
4. 名前を整える
お題 — flatten_ が付いたままだと使いにくい
入力 — 例 1 の出力(商品 flatten_タグ)
設定 — この機能のあとに列名の変更をつなぐ
出力 — 好きな名前の列
5. もとの列を残す
お題 — 分ける前の文字列も見たい
入力 — 商品 タグ(A,B,C)
設定 — 手前に条件に応じて値を列に挿入を置いて タグ を別の列に写しておきます。新規列 タグ_元、型は文字列型、条件は「タグ 欠損値を含む → 返り値は空欄」、不一致は「既存列の値を返り値にする」で タグ を選びます
出力 — 商品 タグ_元(A,B,C のまま)flatten_タグ(A / B / C)