当我尝试将MySQL表导入现有的hive表时,下面的命令工作正常。但是,当我尝试使用查询将结果导入到同一个hive表中时,它要求--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 tool.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 \
目标迪尔
默认情况下,Sqoop将在HDFS上创建一个与主目录中导入的表同名的目录,并在那里导入所有数据。因此,当您使用--query
导入时,目录名称是未知的,您需要明确指定它。
分裂
执行并行导入时,Sqoop需要一个可以分割工作负载的标准。 Sqoop使用拆分列来分割工作负载。默认情况下,Sqoop将识别表中的主键列(如果存在)并将其用作拆分列,但是通过使用查询导入,您必须选择带有--split-by
的拆分列(请参阅method)。