将查询结果从mysql导入现有的hive表时出现问题

问题描述 投票:0回答:1

当我尝试将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
1个回答
0
投票

目标迪尔

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

分裂

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

© www.soinside.com 2019 - 2024. All rights reserved.