Sqoop с печатью последней ценности новой строки - PullRequest
0 голосов
/ 18 июня 2019

Ниже моя команда sqoop в oozie.

<action name="sqoop_test" retry-max="${maxretry}" retry-interval="${retryinterval}">
    <sqoop xmlns="uri:oozie:sqoop-action:0.2">
        <job-tracker>${jobTracker}</job-tracker>
        <name-node>${nameNode}</name-node>
        <command>import --connect jdbc:mysql:loadbalance://sql01.sboxdc.com/mydb --username usr1 --password ******** --table source_table --incremental lastmodified -check-column last_modified --merge-key Id --last-value "${wf:actionData('get_last_modified_time')['last_modified_date']}" --target-dir /warehouse/external_data/sms/target_location --as-textfile </command>
    </sqoop>
    <ok to="end"/>
    <error to="fail"/>
</action>

Вышеуказанное действие завершается неудачно, поскольку оно переводит последнее значение в новую строку.

из журналов:

Sqoop command arguments :
         import
         --connect
         jdbc:mysql:loadbalance://sql01.sboxdc.com/mydb
         --username
         usr1
         --password
         ********
         --table
         source_table
         --incremental
         lastmodified
         -check-column
         last_modified
         --merge-key
         Id
         --last-value
         "2019-01-01
         00:00:00"
         --target-dir
         /warehouse/external_data/sms/target_location
         --as-textfile


2019-06-18 11:19:25,768 ERROR [main] org.apache.sqoop.tool.BaseSqoopTool: Error parsing arguments for import:
2019-06-18 11:19:25,768 ERROR [main] org.apache.sqoop.tool.BaseSqoopTool: Unrecognized argument: 00:00:00"
2019-06-18 11:19:25,768 ERROR [main] org.apache.sqoop.tool.BaseSqoopTool: Unrecognized argument: --target-dir
2019-06-18 11:19:25,768 ERROR [main] org.apache.sqoop.tool.BaseSqoopTool: Unrecognized argument: /warehouse/external_data/sms/sb_subscribermacs
2019-06-18 11:19:25,768 ERROR [main] org.apache.sqoop.tool.BaseSqoopTool: Unrecognized argument: --as-textfile

Как заставить sqoop соответствовать значению last_value в одной строке?

1 Ответ

1 голос
/ 30 июня 2019

Как вы обнаружили, когда вы используете элемент command, Oozie будет разбивать команду на каждый пробел на несколько аргументов.Если в аргументе есть пробелы, такие как дата для вашего последнего значения, вы должны вместо этого использовать несколько опций arg.Так что это будет что-то вроде:

<action name="sqoop_test" retry-max="${maxretry}" retry-interval="${retryinterval}">
    <sqoop xmlns="uri:oozie:sqoop-action:0.2">
        <job-tracker>${jobTracker}</job-tracker>
        <name-node>${nameNode}</name-node>
        <arg>import</arg>
        <arg>--conect</arg>
        <arg>jdbc:mysql:loadbalance://sql01.sboxdc.com/mydb</arg>
        <!--All the other arguments...-->
        <arg>--last-value</arg>
        <arg>"${wf:actionData('get_last_modified_time')['last_modified_date']}</arg>
        <!--Other arguments...-->        
    </sqoop>
    <ok to="end"/>
    <error to="fail"/>
</action>
...