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

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

ただいまの
回答率

89.99%

use_raw_query_with_incrementalオプションについて

解決済

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 745

raccoondog

score 17

oracleDBのデータをBigQueryへ増分バルクインサートしたいのですが
embulkで増分対象とするデータを検索する際にある2つのテーブルを結合させて
条件にマッチングしたレコードのみを対象としたいです。

use_raw_query_with_incrementalオプションを使って、検証しているのですが
incremental_columnsオプションが有効にならずエラーを出力しております。

原因調査中となります。

環境:Win7、embulk 0.9.8 、oracle12c

SQL> desc INPUT_TEST_001
 名前                     NULL?    型
 ------------------------ -------- -------------
 BANGOU                   NOT NULL NUMBER(8)
 NUM                               NUMBER(12,2)
 STR                               CHAR(8)
 VARSTR                            VARCHAR2(8)
 DT                                DATE
 TIME0                             TIMESTAMP(0)
 TIME6                             TIMESTAMP(6)
 TIME9                             TIMESTAMP(9)


SQL> desc INPUT_TEST_002
 名前                     NULL?    型
 ------------------------ -------- -------------
 ID                       NOT NULL NUMBER(8)
 NUM                               NUMBER(12,2)
 STR                               CHAR(8)
 VARSTR                            VARCHAR2(8)
 DT                                DATE
 TIME0                             TIMESTAMP(0)
 TIME6                             TIMESTAMP(6)
 TIME9                             TIMESTAMP(9)



※C:\Users\xxxxx\Desktop\embulk\config_bq_incremental.yml.liquid

in:
  type: oracle
  path_prefix: null
  driver_path: C:\Users\xxxxx\Desktop\embulkDB\product\12.2.0\dbhome_1\sqldeveloper\jdbc\lib\ojdbc7.jar
  host: xxxx-xxxx
  user: system
  password: xxxxx
  database: ORCL
  query: select A1.BANGOU,A1.NUM,A1.STR from INPUT_TEST_001 A1,INPUT_TEST_002 B1 where A1.NUM = B1.NUM
  incremental: true
  incremental_columns: [dt]
  use_raw_query_with_incremental: true
  last_record: [1]
out: {type: bigquery, auth_method: json_key, json_keyfile: 'C:\Users\xxxxx\Desktop\embulk\My
    First Project-6041ffecfba7.json', project: xxxxxxxx, dataset: embulk_test,
  auto_create_table: true, table: INPUT_TEST_001, read_timeout_sec: 360000, open_timeout_sec: 360000,
  send_timeout_sec: 360000, mode: append}




C:\Users\xxxxx>C:\Users\xxxxx\Desktop\embulk\embulk-0.9.8.bat run C:\Users\xxxxx\Desktop\embulk\config_bq_incremental.yml.liquid -c C:\Users\xxxxx\Desktop\embulk\diff_001.yml
2018-12-10 14:47:35.047 +0900: Embulk v0.9.8
2018-12-10 14:47:36.014 +0900 [WARN] (main): DEPRECATION: JRuby org.jruby.embed.ScriptingContainer is directly injected.
2018-12-10 14:47:39.714 +0900 [INFO] (main): Gem's home and path are set by default: "C:\Users\xxxxx\.embulk\lib\gems"
2018-12-10 14:47:43.275 +0900 [INFO] (main): Started Embulk v0.9.8
2018-12-10 14:47:43.384 +0900 [INFO] (0001:transaction): Loaded plugin embulk-input-oracle (0.9.3)
2018-12-10 14:47:48.941 +0900 [INFO] (0001:transaction): Loaded plugin embulk-output-bigquery (0.4.9)
2018-12-10 14:47:48.973 +0900 [INFO] (0001:transaction): Connecting to jdbc:oracle:thin:@xxxx-xxxx:1521:ORCL options {oracle.jdbc.ReadTimeout=1800000, user=system, password=***, oracle.net.CONNECT_TIMEOUT=300000}
2018-12-10 14:47:49.503 +0900 [INFO] (0001:transaction): Using JDBC Driver 12.1.0.2.0
org.embulk.exec.PartialExecutionException: org.embulk.config.ConfigException: Column ":dt" doesn't exist in query string
        at org.embulk.exec.BulkLoader$LoaderState.buildPartialExecuteException(BulkLoader.java:339)
        at org.embulk.exec.BulkLoader.doRun(BulkLoader.java:565)
        at org.embulk.exec.BulkLoader.access$000(BulkLoader.java:34)
        at org.embulk.exec.BulkLoader$1.run(BulkLoader.java:352)
        at org.embulk.exec.BulkLoader$1.run(BulkLoader.java:349)
        at org.embulk.spi.Exec.doWith(Exec.java:22)
        at org.embulk.exec.BulkLoader.run(BulkLoader.java:349)
        at org.embulk.EmbulkEmbed.run(EmbulkEmbed.java:161)
        at org.embulk.EmbulkRunner.runInternal(EmbulkRunner.java:292)
        at org.embulk.EmbulkRunner.run(EmbulkRunner.java:156)
        at org.embulk.cli.EmbulkRun.runSubcommand(EmbulkRun.java:436)
        at org.embulk.cli.EmbulkRun.run(EmbulkRun.java:91)
        at org.embulk.cli.Main.main(Main.java:26)
        Suppressed: java.lang.NullPointerException
                at org.embulk.exec.BulkLoader.doCleanup(BulkLoader.java:462)
                at org.embulk.exec.BulkLoader$3.run(BulkLoader.java:396)
                at org.embulk.exec.BulkLoader$3.run(BulkLoader.java:393)
                at org.embulk.spi.Exec.doWith(Exec.java:22)
                at org.embulk.exec.BulkLoader.cleanup(BulkLoader.java:393)
                at org.embulk.EmbulkEmbed.run(EmbulkEmbed.java:164)
                ... 5 more
Caused by: org.embulk.config.ConfigException: Column ":dt" doesn't exist in query string
        at org.embulk.input.jdbc.AbstractJdbcInputPlugin.getRawQuery(AbstractJdbcInputPlugin.java:365)
        at org.embulk.input.jdbc.AbstractJdbcInputPlugin.setupTask(AbstractJdbcInputPlugin.java:217)
        at org.embulk.input.jdbc.AbstractJdbcInputPlugin.transaction(AbstractJdbcInputPlugin.java:201)
        at org.embulk.exec.BulkLoader.doRun(BulkLoader.java:506)
        ... 11 more

Error: org.embulk.config.ConfigException: Column ":dt" doesn't exist in query string

C:\Users\xxxxx>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+1

手元でPostgreSQLで試したのでこちらを参考にしてみてください。

  query: |-
    select
      a1.dt as a1_dt,
      a1.bangou,
      a1.num,
      a1.varstr
    from input_test_001 a1,input_test_002 b1
    where a1.num = b1.num
    and a1.dt >= :a1_dt
  incremental_columns: [a1_dt]
  incremental: true
  use_raw_query_with_incremental: true
  last_record: ['2018-12-13T00:00:30.000000']
  • select部にa1.dt as a1_dtが必要です。joinで二つのテーブルに同じカラムがある場合は、asでカラム名を変えないとだめです。
  • a1.dtは先頭にないとダメなようです。(これは別の不具合によるもの)

余談ですがuse_raw_query_with_incrementalは、last_recordは自分で更新する必要があります。embulkはこの値を書き換えません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/14 13:32

    ご回答有難うございます。

    use_raw_query_with_incrementalオプションでは、last_recordを手動更新が必要であること了解いたしました。

    キャンセル

+1

embulk-input-oracleのUse incremental loading with raw queryをご参照ください。

こちらの例では、foo.id > :foo_idと記述している:foo_idのところをincremental_columnの値で置き換えてクエリをするようになっています。

記述されたログをみるとqueryの中に:dtという記述がないようです。

in:
  type: oracle
  query:
    SELECT
      foo.id as foo_id, bar.name
    FROM
      foo LEFT JOIN bar ON foo.id = bar.id
    WHERE
      foo.hoge IS NOT NULL
      AND foo.id > :foo_id
    ORDER BY
      foo.id ASC
  use_raw_query_with_incremental: true
  incremental_columns:
    - foo_id
  incremental: true
  last_record: [1]

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/10 18:08 編集

    定義変更したのですが、別のエラーが出力されてしまいました。

    ※定義

    in:
    type: oracle
    path_prefix: null
    driver_path: C:\Users\yazaki\Desktop\embulkDB\product\12.2.0\dbhome_1\sqldeveloper\jdbc\lib\ojdbc7.jar
    host: A0430-02396
    user: system
    password: yazaki
    database: ORCL
    query:
    select
    A1.BANGOU,A1.NUM,A1.STR
    from
    INPUT_TEST_001 A1,INPUT_TEST_002 B1
    where
    A1.NUM = B1.NUM
    AND dt > :dt
    incremental: true
    incremental_columns: [dt]
    use_raw_query_with_incremental: true
    last_record: [1]
    out: {type: bigquery, auth_method: json_key, json_keyfile: 'C:\Users\yazaki\Desktop\embulk\My
    First Project-6041ffecfba7.json', project: fluid-emissary-216806, dataset: embulk_test,
    auto_create_table: true, table: INPUT_TEST_001, read_timeout_sec: 360000, open_timeout_sec: 360000,
    send_timeout_sec: 360000, mode: append}


    ※実行ログ

    2018-12-10 18:04:30.500 +0900: Embulk v0.9.8
    2018-12-10 18:04:31.483 +0900 [WARN] (main): DEPRECATION: JRuby org.jruby.embed.ScriptingContainer is directly injected.
    2018-12-10 18:04:35.373 +0900 [INFO] (main): Gem's home and path are set by default: "C:\Users\yazaki\.embulk\lib\gems"
    2018-12-10 18:04:39.093 +0900 [INFO] (main): Started Embulk v0.9.8
    2018-12-10 18:04:39.202 +0900 [INFO] (0001:transaction): Loaded plugin embulk-input-oracle (0.9.3)
    2018-12-10 18:04:44.369 +0900 [INFO] (0001:transaction): Loaded plugin embulk-output-bigquery (0.4.9)
    2018-12-10 18:04:44.431 +0900 [INFO] (0001:transaction): Connecting to jdbc:oracle:thin:@A0430-02396:1521:ORCL options {oracle.jdbc.ReadTimeout=1800000, user=system, password=***, oracle.net.CONNECT_TIMEOUT=300000}
    2018-12-10 18:04:45.049 +0900 [INFO] (0001:transaction): Using JDBC Driver 12.1.0.2.0
    org.embulk.exec.PartialExecutionException: java.lang.RuntimeException: java.sql.SQLSyntaxErrorException: ORA-00918: 列の定義が未確定です。

    at org.embulk.exec.BulkLoader$LoaderState.buildPartialExecuteException(BulkLoader.java:339)
    at org.embulk.exec.BulkLoader.doRun(BulkLoader.java:565)
    at org.embulk.exec.BulkLoader.access$000(BulkLoader.java:34)
    at org.embulk.exec.BulkLoader$1.run(BulkLoader.java:352)
    at org.embulk.exec.BulkLoader$1.run(BulkLoader.java:349)
    at org.embulk.spi.Exec.doWith(Exec.java:22)
    at org.embulk.exec.BulkLoader.run(BulkLoader.java:349)
    at org.embulk.EmbulkEmbed.run(EmbulkEmbed.java:161)
    at org.embulk.EmbulkRunner.runInternal(EmbulkRunner.java:292)
    at org.embulk.EmbulkRunner.run(EmbulkRunner.java:156)
    at org.embulk.cli.EmbulkRun.runSubcommand(EmbulkRun.java:436)
    at org.embulk.cli.EmbulkRun.run(EmbulkRun.java:91)
    at org.embulk.cli.Main.main(Main.java:26)
    Suppressed: java.lang.NullPointerException
    at org.embulk.exec.BulkLoader.doCleanup(BulkLoader.java:462)
    at org.embulk.exec.BulkLoader$3.run(BulkLoader.java:396)
    at org.embulk.exec.BulkLoader$3.run(BulkLoader.java:393)
    at org.embulk.spi.Exec.doWith(Exec.java:22)
    at org.embulk.exec.BulkLoader.cleanup(BulkLoader.java:393)
    at org.embulk.EmbulkEmbed.run(EmbulkEmbed.java:164)
    ... 5 more
    Caused by: java.lang.RuntimeException: java.sql.SQLSyntaxErrorException: ORA-00918: 列の定義が未確定です。

    at com.google.common.base.Throwables.propagate(Throwables.java:160)
    at org.embulk.input.jdbc.AbstractJdbcInputPlugin.transaction(AbstractJdbcInputPlugin.java:203)
    at org.embulk.exec.BulkLoader.doRun(BulkLoader.java:506)
    ... 11 more
    Caused by: java.sql.SQLSyntaxErrorException: ORA-00918: 列の定義が未確定です。

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:392)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:385)
    at oracle.jdbc.driver.T4CTTIfun.processError(T4CTTIfun.java:1018)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:522)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257)
    at oracle.jdbc.driver.T4C8Odscrarr.doODNY(T4C8Odscrarr.java:96)
    at oracle.jdbc.driver.T4CPreparedStatement.doDescribe(T4CPreparedStatement.java:717)
    at oracle.jdbc.driver.OracleStatement.describe(OracleStatement.java:4404)
    at oracle.jdbc.driver.OracleResultSetMetaData.<init>(OracleResultSetMetaData.java:52)
    at oracle.jdbc.driver.OracleStatement.getResultSetMetaData(OracleStatement.java:4387)
    at oracle.jdbc.driver.OraclePreparedStatement.getMetaData(OraclePreparedStatement.java:5581)
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.getMetaData(OraclePreparedStatementWrapper.java:1509)
    at org.embulk.input.jdbc.JdbcInputConnection.getSchemaOfQuery(JdbcInputConnection.java:67)
    at org.embulk.input.jdbc.AbstractJdbcInputPlugin.setupTask(AbstractJdbcInputPlugin.java:238)
    at org.embulk.input.jdbc.AbstractJdbcInputPlugin.transaction(AbstractJdbcInputPlugin.java:201)
    ... 12 more

    Error: java.lang.RuntimeException: java.sql.SQLSyntaxErrorException: ORA-00918: 列の定義が未確定です。

    キャンセル

  • 2018/12/10 18:13

    Oracleは詳しくありませんが、INPUT_TEST_001,INPUT_TEST_002ともにDTがあるから、
    A1.DTとか書かないといけないのではないでしょうか?

    PL/SQL等でSQLが正常に動作するか確認してはいかがでしょうか?

    キャンセル

  • 2018/12/11 09:56

    ご指摘有難うございます。
    検証させて頂きます。

    キャンセル

  • 2018/12/12 15:46

    A1.dtとしても、結果

    error: org.embulk.config.ConfigException: Column "A1_dt" doesnt exist in query string

    で失敗してしまいます

    キャンセル

+1

なにをどう変えたかわからないとコメントできません。

1番目と2番目はエラーの内容が違うと思います。

  • 最初のエラー、Column ":dt" doesn't exist in query string
  • 2番目のエラー、java.sql.SQLSyntaxErrorException: ORA-00918: 列の定義が未確定です。

Column "xxx" doesnt exist in query stringというのは、queryの中にincremental_columns
で記載している':' + カラム名の文字列が見つからない場合に出るエラーです。

以下のように記述したりしてないでしょうか?

  incremental_columns: [A1_dt]

簡単な例で動作確認をお勧めします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/13 13:42

    ご回答有難うございます。

    定義ファイルを以下の通り、変更し再実行したのですがincremental_columnsオプションではA1.dtのカラム名ではエラーとなってしまいます。

    queryオプションで定義している独自のSQLをOracle上で実行すると、正常に結果が返ってきます

    use_raw_query_with_incremental: trueとしているので、embulkでも実行される認識なのですが原因不明の状況となります。


    ※※※定義ファイル※※※

    in:
    type: oracle
    path_prefix: null
    driver_path: C:\Users\xxxxx\Desktop\embulkDB\product\12.2.0\dbhome_1\sqldeveloper\jdbc\lib\ojdbc7.jar
    host: A0430-02396
    user: system
    password: xxxxx
    database: ORCL
    query:
    select
    A1.BANGOU,A1.NUM,A1.STR
    from
    INPUT_TEST_001 A1,INPUT_TEST_002 B1
    where
    A1.NUM = B1.NUM
    AND A1.dt > :A1.dt
    use_raw_query_with_incremental: true
    last_record: [1]
    incremental_columns: [A1.dt]
    incremental: true
    out: {type: bigquery, auth_method: json_key, json_keyfile: 'C:\Users\xxxxx\Desktop\embulk\My
    First Project-6041xxxxx.json', project: xx-xx-xxx, dataset: embulk_test,
    auto_create_table: true, table: INPUT_TEST_001, read_timeout_sec: 360000, open_timeout_sec: 360000,
    send_timeout_sec: 360000, mode: append}


    ※※※エラー※※※

    C:\Users\aaaaaaaaaaa\Desktop\embulk>embulk-0.9.8.bat run config_bq_incremental.yml.liquid -c diff_001.yml
    2018-12-13 13:37:45.161 +0900: Embulk v0.9.8
    2018-12-13 13:37:46.176 +0900 [WARN] (main): DEPRECATION: JRuby org.jruby.embed.ScriptingContainer is directly injected.
    2018-12-13 13:37:50.001 +0900 [INFO] (main): Gem's home and path are set by default: "C:\Users\aaaaaaaaaaa\.embulk\lib\gems"
    2018-12-13 13:37:53.547 +0900 [INFO] (main): Started Embulk v0.9.8
    2018-12-13 13:37:53.641 +0900 [INFO] (0001:transaction): Loaded plugin embulk-input-oracle (0.9.3)
    2018-12-13 13:37:59.295 +0900 [INFO] (0001:transaction): Loaded plugin embulk-output-bigquery (0.4.9)
    2018-12-13 13:37:59.350 +0900 [INFO] (0001:transaction): Connecting to jdbc:oracle:thin:@A0430-02396:1521:ORCL options {oracle.jdbc.ReadTimeout=1800000, user=system, password=***, oracle.net.CONNECT_TIMEOUT=300000}
    2018-12-13 13:37:59.849 +0900 [INFO] (0001:transaction): Using JDBC Driver 12.1.0.2.0
    org.embulk.exec.PartialExecutionException: org.embulk.config.ConfigException: Column name 'A1.dt' is in incremental_columns option does not exist
    at org.embulk.exec.BulkLoader$LoaderState.buildPartialExecuteException(BulkLoader.java:339)
    at org.embulk.exec.BulkLoader.doRun(BulkLoader.java:565)
    at org.embulk.exec.BulkLoader.access$000(BulkLoader.java:34)
    at org.embulk.exec.BulkLoader$1.run(BulkLoader.java:352)
    at org.embulk.exec.BulkLoader$1.run(BulkLoader.java:349)
    at org.embulk.spi.Exec.doWith(Exec.java:22)
    at org.embulk.exec.BulkLoader.run(BulkLoader.java:349)
    at org.embulk.EmbulkEmbed.run(EmbulkEmbed.java:161)
    at org.embulk.EmbulkRunner.runInternal(EmbulkRunner.java:292)
    at org.embulk.EmbulkRunner.run(EmbulkRunner.java:156)
    at org.embulk.cli.EmbulkRun.runSubcommand(EmbulkRun.java:436)
    at org.embulk.cli.EmbulkRun.run(EmbulkRun.java:91)
    at org.embulk.cli.Main.main(Main.java:26)
    Suppressed: java.lang.NullPointerException
    at org.embulk.exec.BulkLoader.doCleanup(BulkLoader.java:462)
    at org.embulk.exec.BulkLoader$3.run(BulkLoader.java:396)
    at org.embulk.exec.BulkLoader$3.run(BulkLoader.java:393)
    at org.embulk.spi.Exec.doWith(Exec.java:22)
    at org.embulk.exec.BulkLoader.cleanup(BulkLoader.java:393)
    at org.embulk.EmbulkEmbed.run(EmbulkEmbed.java:164)
    ... 5 more
    Caused by: org.embulk.config.ConfigException: Column name 'A1.dt' is in incremental_columns option does not exist
    at org.embulk.input.jdbc.AbstractJdbcInputPlugin.findIncrementalColumnIndexes(AbstractJdbcInputPlugin.java:347)
    at org.embulk.input.jdbc.AbstractJdbcInputPlugin.setupTask(AbstractJdbcInputPlugin.java:267)
    at org.embulk.input.jdbc.AbstractJdbcInputPlugin.transaction(AbstractJdbcInputPlugin.java:201)
    at org.embulk.exec.BulkLoader.doRun(BulkLoader.java:506)
    ... 11 more

    Error: org.embulk.config.ConfigException: Column name 'A1.dt' is in incremental_columns option does not exist

    C:\Users\aaaaaaaaaaa\Desktop\embulk>

    キャンセル

+1

ワーウアランドっぽいですが、これでどうでしょうか?
(その他部分は一緒です。)

query: |-
  select
    A1.BANGOU,A1.NUM,A1.STR,A1.DT as a1_dt
  from
    INPUT_TEST_001 A1,INPUT_TEST_002 B1
  where
    A1.NUM = B1.NUM
    AND a1_dt > :a1_dt
incremental_columns: [a1_dt]

余談ですが
last_record1となっています。
DTはDATE型なのに大丈夫なんでしょうか?
以下のようになりますよ?

  where
    A1.NUM = B1.NUM
    AND a1_dt > 1

余談2

ちなみにA1.DT as a1_dtをせずにselect A1.DT,B1.DTするとembulk previewではどうなるのでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/13 17:44

    ご回答有難うございます。
    定義修正後の結果、エラーとなってしまいました。
    取り急ぎ、連絡させて頂きます。

    in:
    type: oracle
    path_prefix: null
    driver_path: C:\Users\xxxxxxxxx\Desktop\embulkDB\product\12.2.0\dbhome_1\sqldeveloper\jdbc\lib\ojdbc7.jar
    host: A0430-02396
    user: system
    password: xxxxxxxxx
    database: ORCL
    query: |-
    select
    A1.BANGOU,A1.NUM,A1.STR,A1.DT as A1_DT
    from
    INPUT_TEST_001 A1,INPUT_TEST_002 B1
    where
    A1.NUM = B1.NUM
    AND A1_DT > :A1_DT
    use_raw_query_with_incremental: true
    last_record: [18-12-10]
    incremental_columns: [A1_dt]
    incremental: true
    out: {type: bigquery, auth_method: json_key, json_keyfile: 'C:\Users\xxxxxxxxx\Desktop\embulk\My
    First Project-6041xxxxxx.json', project: fluid-xxxxx-xxxxx, dataset: embulk_test,
    auto_create_table: true, table: INPUT_TEST_001, read_timeout_sec: 360000, open_timeout_sec: 360000,
    send_timeout_sec: 360000, mode: append}




    C:\Users\xxxxxxxxx\Desktop\embulk>embulk-0.9.8.bat run config_test.yml.liquid -c diff_001.yml
    2018-12-13 17:27:34.465 +0900: Embulk v0.9.8
    2018-12-13 17:27:35.448 +0900 [WARN] (main): DEPRECATION: JRuby org.jruby.embed.ScriptingContainer is directly injected.
    2018-12-13 17:27:39.118 +0900 [INFO] (main): Gem's home and path are set by default: "C:\Users\xxxxxxxxx\.embulk\lib\gems"
    2018-12-13 17:27:42.799 +0900 [INFO] (main): Started Embulk v0.9.8
    2018-12-13 17:27:42.908 +0900 [INFO] (0001:transaction): Loaded plugin embulk-input-oracle (0.9.3)
    2018-12-13 17:27:48.240 +0900 [INFO] (0001:transaction): Loaded plugin embulk-output-bigquery (0.4.9)
    2018-12-13 17:27:48.302 +0900 [INFO] (0001:transaction): Connecting to jdbc:oracle:thin:@A0430-02396:1521:ORCL options {oracle.jdbc.ReadTimeout=1800000, user=system, password=***, oracle.net.CONNECT_TIMEOUT=300000}
    2018-12-13 17:27:48.818 +0900 [INFO] (0001:transaction): Using JDBC Driver 12.1.0.2.0
    org.embulk.exec.PartialExecutionException: org.embulk.config.ConfigException: Column ":A1.dt" doesn't exist in query string
    at org.embulk.exec.BulkLoader$LoaderState.buildPartialExecuteException(BulkLoader.java:339)
    at org.embulk.exec.BulkLoader.doRun(BulkLoader.java:565)
    at org.embulk.exec.BulkLoader.access$000(BulkLoader.java:34)
    at org.embulk.exec.BulkLoader$1.run(BulkLoader.java:352)
    at org.embulk.exec.BulkLoader$1.run(BulkLoader.java:349)
    at org.embulk.spi.Exec.doWith(Exec.java:22)
    at org.embulk.exec.BulkLoader.run(BulkLoader.java:349)
    at org.embulk.EmbulkEmbed.run(EmbulkEmbed.java:161)
    at org.embulk.EmbulkRunner.runInternal(EmbulkRunner.java:292)
    at org.embulk.EmbulkRunner.run(EmbulkRunner.java:156)
    at org.embulk.cli.EmbulkRun.runSubcommand(EmbulkRun.java:436)
    at org.embulk.cli.EmbulkRun.run(EmbulkRun.java:91)
    at org.embulk.cli.Main.main(Main.java:26)
    Suppressed: java.lang.NullPointerException
    at org.embulk.exec.BulkLoader.doCleanup(BulkLoader.java:462)
    at org.embulk.exec.BulkLoader$3.run(BulkLoader.java:396)
    at org.embulk.exec.BulkLoader$3.run(BulkLoader.java:393)
    at org.embulk.spi.Exec.doWith(Exec.java:22)
    at org.embulk.exec.BulkLoader.cleanup(BulkLoader.java:393)
    at org.embulk.EmbulkEmbed.run(EmbulkEmbed.java:164)
    ... 5 more
    Caused by: org.embulk.config.ConfigException: Column ":A1.dt" doesn't exist in query string
    at org.embulk.input.jdbc.AbstractJdbcInputPlugin.getRawQuery(AbstractJdbcInputPlugin.java:365)
    at org.embulk.input.jdbc.AbstractJdbcInputPlugin.setupTask(AbstractJdbcInputPlugin.java:217)
    at org.embulk.input.jdbc.AbstractJdbcInputPlugin.transaction(AbstractJdbcInputPlugin.java:201)
    at org.embulk.exec.BulkLoader.doRun(BulkLoader.java:506)
    ... 11 more

    Error: org.embulk.config.ConfigException: Column ":A1.dt" doesn't exist in query string

    C:\Users\xxxxxxxxx\Desktop\embulk>

    キャンセル

  • 2018/12/13 18:09

    a1.dtなんて定義してないのに変ですね、、diff_001.yml には何か入っていますか?、use_raw_query_with_incrementalは-cは使えないと思うので、-c diff_001.yml抜いてやってみていただけますか?

    キャンセル

  • 2018/12/13 18:28

    実行コマンドに-c diff_001.ymlを省いてみたのですが、結果は全く同じでした。
    diff_001.ymlファイルは0バイトでした。

    キャンセル

  • 2018/12/14 09:32

    query箇所をoracleDB上で実行してみると、以下のエラーがでます

    select
    A1.BANGOU,A1.NUM,A1.STR,A1.DT as a1_dt
    from
    INPUT_TEST_001 A1,INPUT_TEST_002 B1
    where
    A1.NUM = B1.NUM
    AND a1_dt > :a1_dt;

    SP2-0552: バインド変数 A1_DTが宣言されていません。

    キャンセル

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

  • ただいまの回答率 89.99%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる