短い答え
(Legacy SQL で書いているので) legacy_sql: true
を設定するか、標準のSQL 構文に沿ったクエリを投げましょう
調べたこと
BigQuery には2種類の構文が存在している
それぞれ構文が異なる部分があり、BigQuery 以外で使われている一般的なSQL 構文(SQL 2011 標準との互換性)で書けるため、Standard への移行を勧めている
たとえば DATE_ADD()
まず判り易いのが、受け付ける引数の数が3つ→2つに変わってる...!!
Legacy:
sql
1-- Timestamp 型で日付情報を受け、数値、単位で計算する
2SELECT DATE_ADD(TIMESTAMP("2012-10-01 02:03:04"), 5, "YEAR")
Standard:
sql
1-- Date 型で日付情報を受け、INTERVAL と数値, 単位を指定することで計算する
2SELECT DATE_ADD(DATE "2008-12-25", INTERVAL 5 DAY)
クエリ例(Legacy & Standard)
それぞれをRuby で書いた場合(クライアントのセットアップなどの記述は省略)
ruby
1# Legacy SQL
2query_string = %(SELECT
3 DATE_ADD( TIMESTAMP('2012-10-01 02:03:04'), 5, 'YEAR' ) AS MyDate
4)
5
6query_job = bigquery.query_job(query_string, legacy_sql: true)
7
8# (結果の出力をするコードを書くと得られる値)
9# => {:MyDate=>2017-10-01 11:03:04 +0900}
ruby
1# Standard SQL
2query_string = %(SELECT
3 DATE_ADD( DATE(TIMESTAMP('2012-10-01 02:03:04')), INTERVAL 5 YEAR ) AS MyDate
4)
5
6query_job = bigquery.query_job(query_string)
7
8# (結果の出力をするコードを書くと得られる値)
9# => {:MyDate=>2017-10-01 11:03:04 +0900}
legacy_sql
オプションについて
legacy_sql: true
指定ができるオプションに関しては、検索してると出てきたりする
以上調べてみましたが、何か参考になれば幸いです
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。