任何人都可以区分create-hive-table
& hive-import
方法?两者都会创建一个蜂巢表,但每个表的意义仍然是什么?
答案 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命令:
涉及三个步骤:
将数据从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;
答案 1 :(得分:2)
不同之处在于create-hive-table将根据数据库中的源表在Hive中创建表,但 NOT 将传输任何数据。命令“import --hive-import”将在Hive中创建表并从源表导入数据。