【发布时间】:2015-10-09 12:24:08
【问题描述】:
谁能说出create-hive-table 和hive-import 方法之间的区别?两者都会创建一个 hive 表,但是每个的意义是什么?
【问题讨论】:
谁能说出create-hive-table 和hive-import 方法之间的区别?两者都会创建一个 hive 表,但是每个的意义是什么?
【问题讨论】:
hive-import 命令:hive-import 命令自动填充 hive 元存储中填充表的元数据。如果 Hive 中的表还不存在,Sqoop
将简单地根据为您的表或查询获取的元数据创建它。如果表已经存在,Sqoop 会将数据导入到现有表中。如果您要创建新的 Hive 表,Sqoop 会将源表中每一列的数据类型转换为与 Hive 兼容的类型。
create-hive-table 命令:
Sqoop 可以基于来自现有关系数据源的表生成一个配置单元表(使用create-hive-tablecommand)。如果设置,则如果目标 hive 表存在,则作业将失败。默认情况下,此属性为 false。
使用create-hive-table 命令涉及三个步骤:将数据导入HDFS,创建hive 表,然后将HDFS 数据加载到Hive。这可以通过使用hive-import 缩短为一步。
在hive-import 期间,Sqoop 将首先将正常的 HDFS 导入到临时位置。成功导入后,Sqoop 会生成两个查询:一个用于创建表,另一个用于从临时位置加载数据。您可以使用--target-dir 或--warehouse-dir 参数指定任何临时位置。
为上述说明添加了一个示例
使用 create-hive-table 命令:
涉及三个步骤:
将数据从 RDBMS 导入 HDFS
sqoop import --connect jdbc:mysql://localhost:3306/hadoopexample --table employees --split-by empid -m 1;
使用create-hive-table 命令创建配置单元表
sqoop create-hive-table --connect jdbc:mysql://localhost:3306/hadoopexample --table employees --fields-terminated-by ',';
将数据加载到 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)
使用 hive-import 命令:
sqoop import --connect jdbc:mysql://localhost:3306/hadoopexample --table departments --split-by deptid -m 1 --hive-import;
【讨论】:
不同之处在于 create-hive-table 将根据数据库中的源表在 Hive 中创建表,但不会传输任何数据。命令“import --hive-import”将在 Hive 中创建表并从源表中导入数据。
【讨论】: