😇

BigQueryでPARSE_DATEを使った時に「クエリ結果を格納する一時テーブルの期限が切れました」と表示される時の対処

2022/03/23に公開

発生するケース

SELECT PARSE_DATE("%Y-%m-%d", "20220101")

もしくは

SELECT PARSE_DATE("%Y%m%d", "2022-01-01")

などで発生します。

原因

PARSE_DATEでは第二引数の日付の文字列を、第一引数のフォーマット文字列に従って、DATEオブジェクトにパースします。

画像にも表示されていますが、日付文字列とフォーマット文字列が一致しておらず、パースに失敗しているのが原因です。

なので、以下のようにフォーマットと日付文字列を一致させれば、問題なくパースできます。

SELECT PARSE_DATE("%Y-%m-%d", "2022-01-01")
SELECT PARSE_DATE("%Y/%m/%d", "2022/01/01")
SELECT PARSE_DATE("%Y%m%d", "20220101")
SELECT PARSE_DATE("%d/%m/%Y", "01/02/2022")

さいごに

普段よく使うRailsのパース系のメソッドは日付の文字列を渡すだけでいい感じにパースしてくれていたので、あまり仕様を意識せずにPARSE_DATEを使っていたら、意外とハマりました。

ただ今回の調査でBigQueryのPARSE_DATEについて理解を深められたので良かったです。

皆さんも良きBigQueryライフをお過ごしください。

Discussion