将查询结果从 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)。
当我尝试将 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)。