質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Embulk

Embulkは、CSVデータやアクセスログなどの構造化データを高い信頼性で転送することができる、プラグインベースのバルクデータローダーです。

BigQuery

BigQueryは、Google Cloud Platformが提供しているビッグデータ解析サービス。数TB(テラバイト)またはPB(ペタバイト)の膨大なデータに対し、SQL風のクエリを実行し、高速で集計・分析を行うサービスです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Google Analytics

Google AnalyticsはGoogleが開発した無料のウェブ分析のソリューションです。複数のクライアント側のAPIとデータをエクスポートし管理するREST APIも格納されています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

3回答

3215閲覧

embulkでGoogle AnalyticsのデータをBigqueryでlocationエラー

be_yaann

総合スコア12

Embulk

Embulkは、CSVデータやアクセスログなどの構造化データを高い信頼性で転送することができる、プラグインベースのバルクデータローダーです。

BigQuery

BigQueryは、Google Cloud Platformが提供しているビッグデータ解析サービス。数TB(テラバイト)またはPB(ペタバイト)の膨大なデータに対し、SQL風のクエリを実行し、高速で集計・分析を行うサービスです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Google Analytics

Google AnalyticsはGoogleが開発した無料のウェブ分析のソリューションです。複数のクライアント側のAPIとデータをエクスポートし管理するREST APIも格納されています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2020/06/04 07:46

前提・実現したいこと

embulk でGoogle Analytics データを Bigquieryに転送しようとしています。
下記URLを参考に実装してみました。
https://qiita.com/godgarden/items/6309f842aeb0eb29a168

データの転送自体は出来ているようなのですが、エラーメッセージが表示されます。
データ転送の確認はBigqueryで直接確認しています。

発生している問題・エラーメッセージ

org.embulk.exec.PartialExecutionException: org.jruby.exceptions.RaiseException: (ArgumentError) unknown keyword: location at org.embulk.exec.BulkLoader$LoaderState.buildPartialExecuteException(BulkLoader.java:340) at org.embulk.exec.BulkLoader.doRun(BulkLoader.java:566) at org.embulk.exec.BulkLoader.access$000(BulkLoader.java:35) at org.embulk.exec.BulkLoader$1.run(BulkLoader.java:353) at org.embulk.exec.BulkLoader$1.run(BulkLoader.java:350) at org.embulk.spi.Exec.doWith(Exec.java:22) at org.embulk.exec.BulkLoader.run(BulkLoader.java:350) at org.embulk.EmbulkEmbed.run(EmbulkEmbed.java:205) at org.embulk.EmbulkRunner.runInternal(EmbulkRunner.java:292) at org.embulk.EmbulkRunner.run(EmbulkRunner.java:156) at org.embulk.cli.EmbulkRun.runSubcommand(EmbulkRun.java:433) at org.embulk.cli.EmbulkRun.run(EmbulkRun.java:90) at org.embulk.cli.Main.main(Main.java:64) Caused by: org.jruby.exceptions.RaiseException: (ArgumentError) unknown keyword: location at RUBY.get_job(/root/.embulk/lib/gems/gems/google-api-client-0.10.1/generated/google/apis/bigquery_v2/service.rb:321) at RUBY.block in wait_load(/root/.embulk/lib/gems/gems/embulk-output-bigquery-0.6.4/lib/embulk/output/bigquery/bigquery_client.rb:321) at RUBY.with_network_retry(/root/.embulk/lib/gems/gems/embulk-output-bigquery-0.6.4/lib/embulk/output/bigquery/google_client.rb:51) at RUBY.wait_load(/root/.embulk/lib/gems/gems/embulk-output-bigquery-0.6.4/lib/embulk/output/bigquery/bigquery_client.rb:321) at RUBY.block in load(/root/.embulk/lib/gems/gems/embulk-output-bigquery-0.6.4/lib/embulk/output/bigquery/bigquery_client.rb:228) at RUBY.with_job_retry(/root/.embulk/lib/gems/gems/embulk-output-bigquery-0.6.4/lib/embulk/output/bigquery/bigquery_client.rb:58) at RUBY.load(/root/.embulk/lib/gems/gems/embulk-output-bigquery-0.6.4/lib/embulk/output/bigquery/bigquery_client.rb:168) at RUBY.block in load_in_parallel(/root/.embulk/lib/gems/gems/embulk-output-bigquery-0.6.4/lib/embulk/output/bigquery/bigquery_client.rb:156) Error: org.jruby.exceptions.RaiseException: (ArgumentError) unknown keyword: location

該当のソースコード

yamlファイル

1{% assign table_name='vt_test' %} 2in: 3 type: google_analytics 4 auth_method: service_account 5 json_key_content: | 6 { "type": "service_account", ...} 7 view_id: 1XXXXXXXXX 8 time_series: "ga:dateHour" # hourly basis 9 dimensions: 10 - "ga:eventCategory" 11 - "ga:eventAction" 12 - "ga:eventLabel" 13 metrics: 14 - "ga:totalEvents" 15 start_date: "2020-06-01" 16 end_date: "2020-06-02" 17out: 18 type: bigquery 19 auth_method: json_key 20 allow_quoted_newlines: 1 21 json_keyfile: service_accountのPATH 22 path_prefix: /tmp/ 23 file_ext: .csv.gz 24 source_format: CSV 25 project: 1XXX 26 dataset: test 27 mode: append_direct 28 auto_create_table: {{ auto_create_table }} 29 table: {{ table_name }} 30 formatter: {type: csv, charset: UTF-8, delimiter: ',', header_line: false} 31 default_timezone: UTC 32 encoders: 33 - {type: gzip}

試したこと

yamlの設定にlocationを追加したり、エラーメッセージを検索したりしましたが、
解決しませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

先日書いたコメントを詳述します。

不具合の原因

問題は、embulk-input-google_analyticsembulk-output-bigqueryを組み合わせた際に発生します。

  • embulk gem install実行時にプラグインに必要なライブラリの依存関係を確認します。
  • embulk-input-google_analyticsは、google-api-client 0.10.1が必要と設定されています。
  • embulk-output-bigquerygoogle-api-clientの0.33.0未満が必要だと設定されています。
  • 二つのプラグインの要求を満たすバージョンは、google-api-client 0.10.1になります。
  • 一方で、google-api-client 0.10.1locationのオプションが提供されていません。(taichi730さんのコメントから)
  • そのため、embulk-output-bigqueryを利用した際にlocationのエラーが発生します。

解決案

あんまりスマートなやり方ではないですが、embulk-output-bigqueryembulk-input-google_analytics
個別に利用する案が使えると思います。

以下のようにプラグインが利用するライブラリを別のディレクトリにインストールしてください。
別ディレクトリでembulk-input-google_analyticsの設定もしてください。

参考: embulk mkbundle または embulk bundle の使い方

embulk mkbundle sample cd sample/ vi Gemfile

以下のようにembulk-output-bigqueryを追加

ruby

1source 'https://rubygems.org/' 2 3# No versions are specified for 'embulk' to use the gem embedded in embulk.jar. 4# Note that prerelease versions (e.g. "0.9.0.beta") do not match the statement. 5# Specify the exact prerelease version (like '= 0.9.0.beta') for prereleases. 6gem 'embulk' 7gem 'embulk-output-bigquery'
embulk bundle
embulk run -b /path/to/bundle config.yml

2020-06-15 追記

検証はしていませんが、以下のファイルを修正することで暫定で一緒に使えるかもしれません。

~/.embulk/lib/gems/gems/embulk-input-google_analytics-0.1.23/embulk-input-google_analytics.gemspec

変更前

spec.add_dependency "google-api-client", "0.10.1"

変更後

spec.add_dependency "google-api-client", [">= 0.10.1", "< 0.33.0"]

もし変な状態になったらembulk gem uninstall でgemを削除してもう一度インストールしてください。

とりえあえず問題は報告しておいたので、近い将来改善されると思います。

投稿2020/06/11 00:30

編集2020/06/15 13:29
hiroysato

総合スコア415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

be_yaann

2020/06/12 01:39

ありがとうございます。 別に管理する方法がありましたね。思いつきませんでした。 ひとまずエラーは出なくなりました。
hiroysato

2020/06/15 13:30

回避方法を追記したので、一緒に使いたければ試してみてください。
guest

0

locationは、Googleアナリティクスではなく、BigQueryのプラグインの方のオプションのはずですね。試しに、out側をbigqueryではなく、stdoutにして標準出力に出力するようにすれば、うまくいくかと思います。

少なくとも最新のembulk-output-bigquery( https://github.com/embulk/embulk-output-bigquery )では、locationパラメーターはoptional扱いですが、

  • embulk-output-bigqueryのプラグインをアップデートする
  • locationパラメーターを設定してみる

のどちらかを試してみてはいかがでしょうか。

投稿2020/06/09 00:13

1987yama3

総合スコア253

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

be_yaann

2020/06/10 12:40

ありがとうございます。 out側を stdoutもしくは、 `embulk preview` で実行するとエラーは出ないので、 `embulk-output-bigquery` 側でおこっている問題のようです。 プラグインのバージョン、locationパラメータの設定は試してみましたが、結果は同じでした。 ``` embulk-output-bigquery: 0.6.4 locationパラメーター: nil or US ``` embulk-input-google_analytics を削除し、 `embulk-input-google_spreadsheets` , `embulk-input-mysql` を試してみると、locationがなくてもエラーが出ないので、 embulk-input-google_analytics が何か影響しているのではないかと思っています。
guest

0

embulk を使ったことがないので、間違っているかもですが。

エラーログからすると、google-api-client gem のバージョンが古すぎるように見えます。
以下のとおり、0.10.1 では引数 location はありません。
https://github.com/googleapis/google-api-ruby-client/blob/cf8ca47083009e23197a2f2719acd6dece229822/generated/google/apis/bigquery_v2/service.rb#L380
google-api-client gem のバージョンを更新して、再試行してみては。

投稿2020/06/04 11:36

taichi730

総合スコア318

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

be_yaann

2020/06/05 01:43

ありがとうございます。 google-api-clientのバージョンは `0.10.1` になっています。
taichi730

2020/06/05 01:48

それは分かっていることです。 google-api-client のバージョンを上げて、再試行してみましたか?
be_yaann

2020/06/06 09:03

はい。最新版にアップデートして試してみましたが、エラーは解決しませんでした。
taichi730

2020/06/06 09:28

一番新しいバージョンだけ残して、残りを削除して、試してみては?
taichi730

2020/06/06 09:42

https://github.com/embulk/embulk-output-bigquery/blob/a4b25bd4b814d9f7f5efb3df0af8fc19a48f0a8f/embulk-output-bigquery.gemspec#L22 を見ると、対応している google-api-client のバージョンは 0.33.0 未満です。 google-api-client の最新バージョンは 0.40.0 のようなので、単に最新版に更新するだけでは解決しないですね。 $ gem install google-api-client -v '<~ 0.32.0' とかして、embulk が対応しているバージョンをインストールする必要がありそうです。
hiroysato

2020/06/07 14:55

最新版にアップデートというのはどのようなコマンドを入力されたのでしょうか? embulk gem uninstall google-output-bigquery embulk gem uninstall google-api-client したあと embulk gem install google-output-bigquery すれば最新のembulk-output-bigqueryと一緒に google-api-clientの0.33未満がはいると思います。 gem installしてもembulkのプラグインはgemはインストールされないので、 embulk gem installを使ってください。
hiroysato

2020/06/07 15:01

あー、embulk-input-google_analyticsがgoogle-api-client 0.10.1を要求しているため google-output-bigaueryが新しいgoogle-api-clientを使えないっぽいですね。 このままの場合、入力と出力を別にしないとダメかもしれませんね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問