将查询结果从mysql导入到现有配置单元表中的问题

时间:2019-03-29 09:52:18

标签: sqoop

当我尝试将MySQL表导入到现有的配置单元表中时,以下命令运行正常。 但是,当我尝试使用查询将结果导入到相同的配置单元表时,它要求的是--target-dir--split-by。 在导入查询结果时是否必须提供它们?为什么直接从表导入时不需要这些

我收到以下错误-

  

警告:/usr/lib/sqoop/../accumulo不存在! Accumulo导入将失败。   请将$ ACCUMULO_HOME设置为Accumulo安装的根目录。   19/03/29 02:50:40 INFO sqoop.Sqoop:正在运行的Sqoop版本:1.4.6-cdh5.13.0   19/03/29 02:50:40 WARN工具。BaseSqoopTool:在命令行上设置密码不安全。考虑改用-P。   必须使用--target-dir指定目的地。   尝试--help以获得使用说明。

直接导入表格表-

sqoop import \
--connect "jdbc:mysql://quickstart.cloudera:3306/retail_db" \
--username retail_dba \
--password cloudera \
--m 2 \
--table departments \
--hive-import \
--hive-home "/user/hive/warehouse/" \
--hive-table sqoop_import.dep \
--hive-overwrite \
--outdir java_files \

使用查询导入-

sqoop import \
--connect "jdbc:mysql://quickstart.cloudera:3306/retail_db" \
--username retail_dba \
--password cloudera \
--m 2 \
--query "select department_id,department_name from departments where \$CONDITIONS and department_id>2" \
--hive-import \
--hive-home "/user/hive/warehouse/" \
--hive-table sqoop_import.dep \
--hive-overwrite \
--outdir java_files \

1 个答案:

答案 0 :(得分:0)

1。 target-dir

默认情况下,Sqoop将在HDFS上的主目录中创建一个与导入表同名的目录,并将所有数据导入该目录。因此,当您使用--query进行导入时,目录名称是未知的,您需要显式指定它。

2。分割

执行并行导入时,Sqoop需要一个可用来划分工作负载的条件。 Sqoop使用拆分列拆分工作负载。默认情况下,Sqoop将识别表中的主键列(如果存在)并将其用作拆分列,但是通过使用查询导入,必须使用--split-by选择一个拆分列(请参阅method) 。