将查询结果从 mysql 导入现有配置单元 table 时出现问题

Issue in importing query result from mysql to existing hive table

当我尝试将 MySQL table 导入现有配置单元 table 时,以下命令工作正常。 但是当我尝试使用查询将结果导入同一个配置单元 table 时,它要求 --target-dir--split-by 。 导入查询结果时是否必须提供它们?为什么直接从 table

导入时不需要这些

我收到以下错误 -

Warning: /usr/lib/sqoop/../accumulo does not exist! Accumulo imports will fail. Please set $ACCUMULO_HOME to the root of your Accumulo installation. 19/03/29 02:50:40 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6-cdh5.13.0 19/03/29 02:50:40 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead. Must specify destination with --target-dir. Try --help for usage instructions.

直接从 table -

导入
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.目标目录

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

2。拆分

在执行并行导入时,Sqoop 需要一个标准来拆分工作负载。 Sqoop 使用拆分列来拆分工作负载。默认情况下,Sqoop 将识别 table 中的主键列(如果存在)并将其用作拆分列,但是通过使用查询导入,您必须 select 具有 --split-by 的拆分列(参见 method)。