Skip to content

Instantly share code, notes, and snippets.

@toyama0919
Last active November 11, 2015 10:59
Show Gist options
  • Save toyama0919/415b32202916d905909d to your computer and use it in GitHub Desktop.
Save toyama0919/415b32202916d905909d to your computer and use it in GitHub Desktop.
embulk-input-postgresqlからprestogresにつなげるとエラーになる

embulk-input-postgresqlからprestogresにつなげるとエラーになる。

やりたいこと

  • embulkからprestoにqueryしたい。

思いつく実現方法

  • embulk-input-postgreqlからprestogresにSQLを実行する
  • embulk-input-prestoを作る

Embulkの設定

in:
  type: postgresql
  host: {{ env.DATABASE_HOST | default: "localhost" }}
  user: app
  password: {{ env.DATABASE_PASS }}
  database: store
  port: 5439
  options:
    protocolVersion: 2
  query: |
    select
      count(*)
    from pageviews
out:
  type: stdout
  • Prestogresで接続するために「protocolVersion: 2」を設定しています。
    • 上記の設定がない場合はPrestogres側で「ERROR: Parse: Prestogres doesn't support extended query」が発生します
    • ここを参考にしました

Embulkでエラーが発生する箇所

https://github.com/embulk/embulk-input-jdbc/blob/master/embulk-input-jdbc/src/main/java/org/embulk/input/jdbc/JdbcInputConnection.java#L57

Embulkのエラー内容

2015-11-11 14:32:16.138 +0900: Embulk v0.7.7
2015-11-11 14:32:19.289 +0900 [INFO] (transaction): Loaded plugin embulk-input-postgresql (0.6.0)
2015-11-11 14:32:24.985 +0900 [INFO] (transaction): SQL: SET search_path TO "public"
java.lang.NullPointerException
  at org.embulk.input.jdbc.JdbcInputConnection.getSchemaOfResultMetadata(org/embulk/input/jdbc/JdbcInputConnection.java:57)
  at org.embulk.input.jdbc.JdbcInputConnection.getSchemaOfQuery(org/embulk/input/jdbc/JdbcInputConnection.java:48)
  at org.embulk.input.jdbc.AbstractJdbcInputPlugin.setupTask(org/embulk/input/jdbc/AbstractJdbcInputPlugin.java:153)
  at org.embulk.input.jdbc.AbstractJdbcInputPlugin.transaction(org/embulk/input/jdbc/AbstractJdbcInputPlugin.java:142)
  at org.embulk.plugin.compat.InputPluginWrapper.transaction(org/embulk/plugin/compat/InputPluginWrapper.java:57)
  at org.embulk.exec.BulkLoader.doRun(org/embulk/exec/BulkLoader.java:517)
  at org.embulk.exec.BulkLoader.access$100(org/embulk/exec/BulkLoader.java:33)
  at org.embulk.exec.BulkLoader$1.run(org/embulk/exec/BulkLoader.java:379)
  at org.embulk.exec.BulkLoader$1.run(org/embulk/exec/BulkLoader.java:375)
  at org.embulk.spi.Exec.doWith(org/embulk/spi/Exec.java:25)
  at org.embulk.exec.BulkLoader.run(org/embulk/exec/BulkLoader.java:375)
  at org.embulk.EmbulkEmbed.run(org/embulk/EmbulkEmbed.java:179)
  at java.lang.reflect.Method.invoke(java/lang/reflect/Method.java:606)
  at RUBY.run(/project/ipros/iap-app/embulk/vendor/bundle/jruby/2.2/gems/embulk-0.7.7-java/lib/embulk/runner.rb:77)
  at RUBY.run(/project/ipros/iap-app/embulk/vendor/bundle/jruby/2.2/gems/embulk-0.7.7-java/lib/embulk/command/embulk_run.rb:280)
  at RUBY.(root)(/project/ipros/iap-app/embulk/vendor/bundle/jruby/2.2/gems/embulk-0.7.7-java/lib/embulk/command/embulk_main.rb:2)
  at org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:954)
  at RUBY.(root)(/project/ipros/iap-app/embulk/vendor/bundle/jruby/2.2/gems/embulk-0.7.7-java/bin/embulk:1)
  at org.jruby.RubyKernel.load(org/jruby/RubyKernel.java:969)
  at project.ipros.iap_minus_app.embulk.vendor.bundle.jruby.$2_dot_2.bin.embulk.__script__(/project/ipros/iap-app/embulk/vendor/bundle/jruby/2.2/bin/embulk:23)
  at project.ipros.iap_minus_app.embulk.vendor.bundle.jruby.$2_dot_2.bin.embulk.__script__(project/ipros/iap_minus_app/embulk/vendor/bundle/jruby/$2_dot_2/bin//project/ipros/iap-app/embulk/vendor/bundle/jruby/2.2/bin/embulk:23)
  at java.lang.invoke.MethodHandle.invokeWithArguments(java/lang/invoke/MethodHandle.java:599)

Error:

知りたいこと

  • スキーマの取得にjava.sql.PreparedStatementを使っているがprestogres側で無効化されている?
  • SQLからスキーマだけをfetchする方法がPresto or Prestogresに存在する?
    • EmbulkではTransactionがあるため、先にSchemaを知る必要がある。
    • presto-client(java)とpresto-client-rubyのコードを見たがなさそうだった
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment