Sqoop数据导入至hive(原生API与HCatalog API)

一:Sqoop数据导入至Hive(原生API)

方式1-先复制mysql的表结构到Hive,然后再导入数据

1、先复制表结构到hive中再导入数据,将关系型数据的表结构复制到hive中
sqoop create-hive-table \
--connect jdbc:mysql://hadoop01:3306/userdb \
--table emp_add \
--username root \
--password 123456 \
--hive-table test.emp_add_sp

其中:
 --table emp_add为mysql中的数据库userdb中的表。   
 --hive-table emp_add_sp 为hive中新建的表名称。
 复制表结构默认分隔符是'\001'

2、从关系数据库导入文件到hive中
sqoop import \
--connect jdbc:mysql://hadoop01:3306/userdb \
--username root \
--password 123456 \
--table emp_add \
--hive-table test.emp_add_sp \
--hive-import \
--m 1

方式2:直接导入数据(建表 + 导入数据)

-- 1、使用hive默认分隔符 '\001'

sqoop import \
--connect jdbc:mysql://192.168.88.80:3306/userdb \
--table emp_conn \
--username root \
--password 123456 \
--hive-import \
--hive-database test \
--m 1


#从MySQL的userdb数据库的emp_conn表导入到hive的test数据库的emp_conn表
#如果多次导入,则会进行数据追加

#如果要覆盖操作,需要加参数:
 --hive-overwrite

-- 2、使用指定分隔符  '\0'
sqoop import \
--connect jdbc:mysql://192.168.88.80:3306/userdb \
--username root \
--password 123456 \
--table emp_conn \
--hive-import \
--hive-database test \
--fields-terminated-by '\t' \
--m 1

二:Sqoop数据导入至Hive--HCatalog API

sqoop原生API和 HCatalog区别

#数据格式支持(这是实际中使用HCatalog的主要原因,否则还是原生的灵活一些)
    Sqoop方式支持的数据格式较少;
    HCatalog支持的数据格式多,包括RCFile, ORCFile, CSV, JSON和SequenceFile等格式。

#数据覆盖
    Sqoop方式允许数据覆盖,HCatalog不允许数据覆盖,每次都只是追加。

#字段名匹配
    Sqoop方式比较随意,不要求源表和目标表字段相同(字段名称和个数都可以不相同),它抽取的方式是将字段按顺序插入,比如目标表有3个字段,源表有一个字段,它会将数据插入到Hive表的第一个字段,其余字段为NULL。
    但是HCatalog不同,源表和目标表字段名需要相同,字段个数可以不相等,如果字段名不同,抽取数据的时候会报NullPointerException错误。HCatalog抽取数据时,会将字段对应到相同字段名的字段上,哪怕字段个数不相等。

使用HCatalog支持ORC等数据格式

-- 手动在hive中建一张表
create table test.emp_hive
(
    id     int,
    name   string,
    deg    string,
    salary int,
    dept   string
)
row format delimited fields terminated by '\t'
stored as orc;

sqoop import \
--connect jdbc:mysql://192.168.88.80:3306/userdb \
--username root \
--password 123456 \
--table emp \
--fields-terminated-by '\t' \
--hcatalog-database test \
--hcatalog-table emp_hive \
-m 1

# 博学谷IT 技术支持

你可能感兴趣的:(hive,sqoop,hadoop)