BigQueryデータテーブルのフィールドを分割したい。
サンプルケースを差し上げます。
==ケース1 ==ソースファイル= "idx1-cnt1-name1、idx2-cnt2-name2 ...同じパターン"
Result table
idx | cnt | name |
idx1,cnt1,name1
idx2,cnt2,name2,....
クエリ内:
select
regexp_extract(split_col, r'([\d]*)-') as ItemIdx,
regexp_extract(split_col, r'-([\d]*)-') as Cnt,
regexp_extract(split_col, r'-([\d]*)$') as TitleIdx
From (
Select pid,now, split(source field, ',') split_col from (
SELECT * FROM table ))
しかし、この場合はコードを作成できません
このケース文字列には複数の区切り文字があります。
==ケース2 ==
ソース文字列= "item1-name1-type1-value1、....同じパターン"
Result Table
name | type
name1, type1
name2,type2
フィールド数が異なります。
しかし、2番目と3番目のフィールド値が必要です。
どうすればクエリを実行できますか。
BigQueryのレガシーSQLを使用しているようです-以下の例(注-可能な限りBigQuery標準SQLを使用することを強くお勧めします-移行を検討してください)-以下は、ロジックを読みやすくして簡単に拡張できるように簡略化されています潜在的により類似したケースにそれ
ケース1 /例
#legacySQL
SELECT
REGEXP_EXTRACT(split_col, r'^(.*?)-.*?-.*?$') AS idx,
REGEXP_EXTRACT(split_col, r'^.*?-(.*?)-.*?$') AS cnt,
REGEXP_EXTRACT(split_col, r'^.*?-.*?-(.*?$)') AS name
FROM (
SELECT SPLIT(source_field, ',') split_col
FROM (SELECT "idx1-cnt1-name1,idx2-cnt2-name2" source_field)
)
結果:
Row idx cnt name
1 idx1 cnt1 name1
2 idx2 cnt2 name2
ケース2 /例
#legacySQL
SELECT
REGEXP_EXTRACT(split_col, r'^.*?-(.*?)-.*?') AS name,
REGEXP_EXTRACT(split_col, r'^.*?-.*?-(.*?)-') AS type
FROM (
SELECT SPLIT(source_string, ',') split_col
FROM (SELECT "item1-name1-type1-value1, item2-name2-type2-value2" source_string)
)
結果:
Row name type
1 name1 type1
2 name2 type2
以下は同じ例ですが、BigQuery標準SQLの場合です(実際に類似しているのでケース2のみ)
#standardSQL
WITH `project.dataset.table` AS (
SELECT "item1-name1-type1-value1, item2-name2-type2-value2" source_string
)
SELECT
REGEXP_EXTRACT(split_col, r'^.*?-(.*?)-.*?') AS name,
REGEXP_EXTRACT(split_col, r'^.*?-.*?-(.*?)-') AS type
FROM `project.dataset.table`, UNNEST(SPLIT(source_string, ',')) split_col
明らかに-同じ結果
Row name type
1 name1 type1
2 name2 type2
さらに別のオプションは-
#standardSQL
WITH `project.dataset.table` AS (
SELECT "item1-name1-type1-value1, item2-name2-type2-value2" source_string
)
SELECT
SPLIT(split_col, '-')[SAFE_OFFSET(1)] AS name,
SPLIT(split_col, '-')[SAFE_OFFSET(2)] AS type
FROM `project.dataset.table`, UNNEST(SPLIT(source_string, ',')) split_col
等々 ...
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加