dataformでsourceテーブルから中間テーブルを生成してassertionを書いていた
検算したら件数が合わないなーということで調べた
次のようなSQLでfrom
,to
を指定して単月分のレコードのみ抜き出すというパターン
SELECT
*,
'private' AS workspace
FROM
`sample.rawdata-private`,
UNNEST(data) AS d
WHERE
DATE(start) BETWEEN ${target_date.from}
AND ${target_date.to}
SQLXなのでtarget_date.to
とtarget_date.from
はその時々によって変化する
今回は2021-04-01
~ 2021-04-30
をという感じ
rawdata-private
はAPIのレスポンスをそのまま保存していて1行にtotal_count
とdata
列に実際のレコードがあるのでUNNEST
してレコード数と比較することで確認している
rawdata-private
のレコードを追ってみると
"start": "2021-04-01T04:57:39+09:00",
のデータがDATE(start)
を通すことで2021-03-31
になっていた
なるほどUTC
DATE(start, 'Asia/Tokyo'),
でタイムゾーン指定の日付データに変換できるのでこれで対応
BigQueryがDATEでよしなにやってくれた結果UTCで解釈すると2021-03-31
となってしまうためフィルタ対象から外れてしまい、件数が合わない状態になっていた
正直assertion書いてなかったら気付かなかったのでassertion大事w