RubyでBigqueryを使うのを試す - a-know/ruby-bigquery-test GitHub Wiki
やったこと
- Gemfile作成
- bundle install --path=vendor/bundle
- bigquery用のプロジェクトを作成
- bigquery のAPIを許可
- billing設定
- Client ID for native application の作成
- client_id と client_secret を元に txtファイルをカンマ区切りで作っておく
- なぜか bundle exec google-api ができないので
- できるんなら「google-api oauth-2-login --client-id="" --client-secret="" --scope="https://www.googleapis.com/auth/bigquery"」したかった
- アクセストークンの取得
- 取得したアクセストークンを元に .google-api.yaml を作成
- .google-api.yaml を YAML.load して情報を取得、その情報を元に client を initialize する
- Bigqueryを使う宣言をする
- bq_client = client.discovered_api('bigquery', 'v2')
- APIコールを試す
- ここ https://github.com/google/google-api-ruby-client を参考に
- :api_method に渡すものは https://developers.google.com/bigquery/docs/reference/v2/ と照らし合わせながら作る
- たとえば :api_method => bq_client.datasets.list みたいな
- API経由でcsvのロードを試す
- ここ https://developers.google.com/bigquery/loading-data-into-bigquery#loaddatagcs を参考に
- こんな "Job configuration must contain exactly one job-specific configuration object (e.g., query, load, extract, spreadsheetExtract), but there were 0: " エラーがでてロードがうまくできない
- 試行錯誤の結果、ここ http://stackoverflow.com/questions/11804840/uploading-local-csv-via-api-failing に書いてある通りのリクエストをしたらうまくいった
- つまづきポイント1:headersに指定するboundaryにはハイフンいらない(おまけに'Content-Type' => "multipart/relatedが必要)
- つまづきポイント2:body には configuration のjsonだけじゃだめ
- つまづきポイント3:Content-Typeの指定の次に空行が必要
- つまづきポイント4:エラーメッセージがわかりにくい
- つまづきポイント5:末尾のboundaryにはハイフンが余計に必要
- つまづきポイント1:'uploadType' => 'multipart' が必要
- expires を伸ばしたい