Webサービス

GAS+BigQueryでOAuth承認エラーが出たときの対処法

ポイント

一瞬でわかるこの記事の概要

  • GASでBigQueryを利用する際に、「Access Denied: BigQuery BigQuery: No OAuth token with Google Drive scope was found.」とエラーが出た場合の対処方法を紹介

エンジニアは程遠いけど、少しはプログラミングができます。どうも、なっち(@bboy_nacchi)です。

そんな非エンジニアの僕ですが、仕事の関連で、Bigqueryに蓄積した大量のデータを、Googleスプレッドシートに出力して表示するということを行いました。

やりたかったことは、スプレッドシートにSQLを書き、そのSQLを元にGoogle App Scriptを走らせ、BigQueryのデータをスプレッドシートに表示するというもの。

BigQueryを簡単にグラフにするGoogle Apps Script

上記の記事を参考に、GASのサンプルをコピペして実行したところ、「Access Denied: BigQuery BigQuery: No OAuth token with Google Drive scope was found.」と言われて実行できない状態に・・・

な、なぜだ・・・

と悩みに悩みに抜き、8時間くらい使ってどうにか対処方法(応急処置)を発見したので、備忘録と同じ問題で困っている人のためにまとめておきます。

GAS+BigQueryで「Access Denied: BigQuery BigQuery: No OAuth token with Google Drive scope was found.」とエラーが出た場合の対処方法

エラーの原因は、GoogleDrive APIに実行許可を与えていないから

リンク先のサンプルコードでは、BigQuery APIとDrive APIの2つを必要としていますが、Drive APIに対しての実行許可を与えていなかったために出ているエラーでした。

;

まぁエラーメッセージがそのままそう言ってるんですけどねw

Drive APIのOAuth認証(2.0)を求められるダミーのスクリプトを書けば実行可能に

エラーの原因はわかりましたが、OAuth認証(2.0)を与えようにも、設定がいまいちわからない。BigQuery APIは、初めて実行したときに聞かれたのに、Drive APIの方は聞かれなかったんですよね。

そこで、実行したときにOAuth認証(2.0)のダイアログが表示されるダミーのスクリプトを書いて、承認するようにしました。

そのスクリプトがこちら↓

function driveTest() {
var myFolder = DriveApp.getFolderById('XXXXXXXXXXXX'); //フォルダを取得
Logger.log(myFolder.getName());
}

これを実行すると承認が求められるので、「許可を確認」をクリックします。

Googleアカウントをクリックします。

左下の「詳細」をクリックします。

「プロジェクト名(安全ではないページに移動)」をクリックします。

「許可」をクリックすると、承認完了です。

以上の手順を済ませると、「Drive App」のOAuth認証(2.0)トークが作成されるので、紹介したスクリプトを実行できるようになります。

ポイント

割愛していますが、「BigQuery API」も上記の手順と同様に許可する必要があります。ただし、サンプルスクリプトを初めて実行する際にダイアログが表示されるので、他に余計なことはしなくても問題ありません。

スクリプトエディタの「ファイル」→「プロジェクトのプロパティ」に「bigquery」「drive」「spreaddsheets」が表示されていると思います。

おまけ

ちなみにサンプルスクリプトを実行するには、「Data」「Queries」「Single row queries」という3つのシートを作成する必要があり、複数行のデータを取得したい場合は、「Queries」にSQLを書く必要があります。

こんな感じ

まとめ

ポイント

  • 「Access Denied: BigQuery BigQuery: No OAuth token with Google Drive scope was found.」は、ダミーのスクリプトを追加して、許可を与えてあげればOK。

本来は、Google Cloud Platformの承認情報から、OAuth2.0の承認情報を作成すれば良いと思いますが、一体どれが正しい選択かわからず、参考になる文献が見つからなかったので、この方法に至りました。

必要のないスクリプトが残るのはあまり賢いやり方とは言えませんが、目的としていたことは解決できたのでとりあえず良しとします。

同じところで躓いていた人は、ぜひこの方法を試してみてください。

おすすめの記事

-Webサービス