当我尝试将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 \
答案 0 :(得分:0)
1。 target-dir
默认情况下,Sqoop将在HDFS上的主目录中创建一个与导入表同名的目录,并将所有数据导入该目录。因此,当您使用--query
进行导入时,目录名称是未知的,您需要显式指定它。
2。分割
执行并行导入时,Sqoop需要一个可用来划分工作负载的条件。 Sqoop使用拆分列拆分工作负载。默认情况下,Sqoop将识别表中的主键列(如果存在)并将其用作拆分列,但是通过使用查询导入,必须使用--split-by
选择一个拆分列(请参阅method) 。