[BigQuery][Digdag][SQL][embulk-filter-column]年と月を保持するためのカラム追加はembulkでできる!
前回のブログにbirthdayカラムにcolumn_optionsでtimestamp_formatを指定していますが、なぜこんな書き方をしているのか説明していなかったので今回紹介します。今日もembulkの設定ファイルを作成しているときにハマってしまったのでいい加減覚えます。ちなみにエラーは以下
1 |
{:reason=>"invalidQuery", :message=>"Invalid date: '2018-12-05 15:00:00.000000 +00:00' Field: hoge_date; Value: 2018-12-05 15:00:00.000000 +00:00", :location=>"query"} |
■TIMESTAMP
1 2 3 4 |
SELECT id,metric_id,date,user_id FROM hoge_table |
例ですが、上記のようなSQLの出力をBigQueryに同期したい場合、dateはDATE型に指定するとBigQueryにぶち込めません。(embulkでエラー出るはず)従って以下のようにTIMESTAMP型にしてしまうと入りますが何時何分秒まで表記されてしまいます。
・hoge.json
1 2 3 4 5 |
{ "name": "date", "type": "TIMESTAMP" }, ~省略~ |
・BigQuery
これを回避するためにtimestamp_formatで日付型に変換するというわけです。
■timestamp_format
・hoge.yml.liquid
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
in: type: mysql {% if env.EMBULK_ENV == 'prd' %} {% include 'db/prd' %} {% else %} {% include 'db/pre' %} {% endif %} query: | SELECT id,metric_id,date,user_id FROM hoge_table column_options: date: {type: string, timestamp_format: "%Y-%m-%d", timezone: "Asia/Tokyo"} ~省略~ |
・hoge.json
1 2 3 4 5 |
{ "name": "date", "type": "DATE" }, ~省略~ |
・BigQuery
■まとめ
BigQueryの仕様だからしゃーない。もう覚えた。
0件のコメント