👏

BigQueryでSELECTするときはWITH句が見やすい

2022/07/21に公開

例えば、

SELECT 
  TRIM(JSON_EXTRACT(data, '$.count'), '\"') as count
FROM `project.firestore_export.posts_raw_latest`

Firestoreのデータをbigqueryにインポートすると、json形式となります。

今回はdatastudioに取り込みたいので、カスタムクエリでJSONを整形して取り込みます。

あるカラムに依存する形で CASE WHENを書きたいのですが、

SELECT 
  TRIM(JSON_EXTRACT(data, '$.count'), '\"') as count
  CASE
    WHEN CAST(ifnull(TRIM(JSON_EXTRACT(data, '$.count'), '\"'), "1") AS INT64) > 0 THEN true
  ELSE false
FROM `project.firestore_export.posts_raw_latest`

毎回TRIMを書くのも見通しが悪いので、

WITH Posts AS (
  SELECT 
    TRIM(JSON_EXTRACT(data, '$.count'), '\"') as count
  FROM `project.firestore_export.posts_raw_latest`
)
SELECT
  count,
  CASE
    WHEN CAST(ifnull(count, "1") AS INT64) > 0 THEN true
  ELSE false
  END as has_count,
FROM Posts

WITH句を使うことで、整形後の状態で扱え、可読性が向上します。

複数人がメンテナンスする場合も、あとからわかりやすくメンテナンス性が高いですね。

参考

Discussion