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 を伸ばしたい