コンテンツにスキップ

文字列の分割

区切り文字で文字列を分け、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 のためです。

つなぎ先によって形が変わります。

つなぎ先使われるもの
PostgreSQLREGEXP_SPLIT_TO_ARRAY + CROSS JOIN UNNEST
Treasure DataLATERAL VIEW EXPLODE
SnowflakeLATERAL FLATTEN
Amazon Athena / PrestoCROSS 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)

関連