何时使用Sqoop --create-hive-table

时间:2015-07-20 11:36:54

标签: hive sqoop

任何人都可以区分create-hive-table& hive-import方法?两者都会创建一个蜂巢表,但每个表的意义仍然是什么?

2 个答案:

答案 0 :(得分:4)

hive-import命令:
hive-import命令会自动填充hive Metastore中填充表的元数据。如果Hive中的表尚不存在,则Sqoop 将根据为您的表或查询提取的元数据创建它。如果该表已存在,Sqoop将数据导入现有表。如果您正在创建一个新的Hive表,Sqoop会将源表中每列的数据类型转换为与Hive兼容的类型。
create-hive-table命令:
Sqoop可以根据现有关系数据源中的表生成一个hive表(使用create-hive-table命令)。如果设置,则如果目标配置单元表存在,则作业将失败。默认情况下,此属性为false。

使用create-hive-table命令涉及三个步骤:将数据导入HDFS,创建hive表,然后将HDFS数据加载到Hive中。使用hive-import可将此缩短为一步。

hive-import期间,Sqoop将首先将普通HDFS导入到临时位置。导入成功后,Sqoop会生成两个查询:一个用于创建表,另一个用于从临时位置加载数据。您可以使用--target-dir--warehouse-dir参数指定任何临时位置。

为以上说明添加了以下示例

使用create-hive-table命令:
涉及三个步骤:

  1. 将数据从RDBMS导入HDFS

    sqoop import --connect jdbc:mysql://localhost:3306/hadoopexample --table employees --split-by empid -m 1;

  2. 使用create-hive-table命令

    创建配置单元表

    sqoop create-hive-table --connect jdbc:mysql://localhost:3306/hadoopexample --table employees --fields-terminated-by ',';

  3. 将数据加载到Hive

    hive> load data inpath "employees" into table employees; Loading data to table default.employees Table default.employees stats: [numFiles=1, totalSize=70] OK Time taken: 2.269 seconds hive> select * from employees; OK 1001 emp1 101 1002 emp2 102 1003 emp3 101 1004 emp4 101 1005 emp5 103 Time taken: 0.334 seconds, Fetched: 5 row(s)

  4. 使用hive-import命令:

    sqoop import --connect jdbc:mysql://localhost:3306/hadoopexample --table departments --split-by deptid -m 1 --hive-import;

答案 1 :(得分:2)

不同之处在于create-hive-table将根据数据库中的源表在Hive中创建表,但 NOT 将传输任何数据。命令“import --hive-import”将在Hive中创建表并从源表导入数据。