HYUDORO

勉強したことや日記など

GASで標準SQLが使えなくて困った

GASを使って、BigQueryのクエリを叩いて継続率を計測しようとしてた時に、こんな感じのエラーがでた。

GoogleJsonResponseException: 次のエラーが発生し、bigquery.jobs.query の呼び出しに失敗しました: Encountered " <INTEGER_LITERAL> "1 "" at line 1, column 58. Was expecting: ")" ... [Try using standard SQL (https://cloud.google.com/bigquery/docs/reference/standard-sql/enabling-standard-sql)](行 68、ファイル「リテンション」)

標準SQLを使っているのに、標準SQLを試せと書いてある。謎。TIME_DIFFとかTIME_SUBなど一部のクエリが使えないようだった。

いろいろ調べてみたところ、GASからBigQueryのAPIを叩く際、デフォルトではレガシーSQLになってしまうらしい。試しに、BigQueryでレガシーSQLに書き換えたクエリを実行したら、同じエラーメッセージが出た。

これに対しての解決策は、(1)レガシーSQLに書き換える(2)標準SQLで実行できるようにする、のふたつ。前者をやるのは手間がかかって嫌なので、後者をやる方が良い。

var request = {
    useLegacySql: false,
    query: query
};

クエリを実行するスクリプトに、requestを引数として渡すのだけど、そこにuseLegacySqlオプションを設定できるようだ。デフォルトはtrueになっているので、falseに変えてあげればよい。