google_api_big_queryを使ってBigQueryにDatasetやテーブルを作りたかった。
しかし、テーブルは取得できるのに何故かPOSTの処理はできないのでハマってしまったので解決方法を残す。
(Insufficient Permission
と出ていた)
対象読者
- 未来の僕
- ElixirでBigQueryにデータを突っ込みたいと思っている人で
Insufficient Permission
って言われて困ってる人
結論
goth
でトークンを取得するときに以下のようにしていた。
# これだとPOST系の処理は失敗する
{:ok, token} = Goth.Token.for_scope("https://www.googleapis.com/auth/cloud-platform.read-only")
GoogleApi.BigQuery.V2.Connection.new(token.token)
# これが正解
{:ok, token} = Goth.Token.for_scope("https://www.googleapis.com/auth/cloud-platform")
GoogleApi.BigQuery.V2.Connection.new(token.token)
Goth.Token.for_scope("URL")
に指定したURLに read-only
が指定されていた...
過去に一度BQからレコードを取得する処理を書いたときのコードを何も考えずにコピペしたためGET系の操作はできたがPOST系の処理ができないことに気が付かなかった...
感想
気がついてしまえばなんてことは無いんだけどここに至るまでにいろいろなことを試しました。
(サービスアカウントを一時的にProjectOwnerに指定してみたりとかソースコードを追いかけたり。)
結果的にはBigQueryのAPI周りに詳しくなったので良かったのですが何も考えずにコピペするのはだめですねぇ。。。(´;ω;`)