分享

面试题:Hive分区字段不在文件中,Sqoop如何导出到新的目标库

阿飞 发表于 2021-3-24 18:22:20 [显示全部楼层] 回帖奖励 倒序浏览 阅读模式 关闭右栏 0 1052
问题导读

1.Hive分区不在文件中,sqoop如何导出到新的目标库?
2.解决这个问题的关键是什么?
3.实现包含哪些步骤?

问题分析:

hive中分区表其底层就是HDFS中的多个目录下的单个文件,hive导出数据本质是将HDFS中的文件导出
hive中的分区表,因为分区字段(静态分区)不在文件中,所以在sqoop导出的时候,无法将分区字段进行直接导出

思路:在hive中创建一个临时表,将分区表复制过去后分区字段转换为普通字段,然后再用sqoop将tmp表导出即实现需求

步骤如下:

1.创建目标表(分区表)

  1. hive> CREATE TABLE `dept_partition`(                     
  2. `deptno` int,                                    
  3. `dname` string,                                 
  4. `loc` string)                                    
  5. PARTITIONED BY (`month` string) row format delimited fields terminated by '\t';
复制代码
1.1查看表结构


  1. hive> show create table dept_partition;
复制代码
  1. +----------------------------------------------------+--+
  2. |                   createtab_stmt                   |
  3. +----------------------------------------------------+--+
  4. | CREATE TABLE `dept_partition`(                     |
  5. |   `deptno` int,                                    |
  6. |   `dname` string,                                  |
  7. |   `loc` string)                                    |
  8. | PARTITIONED BY (                                   |
  9. |   `month` string)
复制代码
2.导入数据

  1. hive> load data inpath '/user/hive/hive_db/data/dept.txt' into table dept_partition;
复制代码
  1. 10        ACCOUNTING        1700
  2. 20        RESEARCH        1800
  3. 30        SALES        1900
  4. 40        OPERATIONS        1700
复制代码
3.查询表dept_partition

  1. hive> select * from dept_partition;
复制代码
  1. +------------------------+-----------------------+---------------------+-----------------------+--+
  2. | dept_partition.deptno  | dept_partition.dname  | dept_partition.loc  | dept_partition.month  |
  3. +------------------------+-----------------------+---------------------+-----------------------+--+
  4. | 10                     | ACCOUNTING            | 1700                | 2019-10-19            |
  5. | 20                     | RESEARCH              | 1800                | 2019-10-19            |
  6. | 30                     | SALES                 | 1900                | 2019-10-19            |
  7. | 40                     | OPERATIONS            | 1700                | 2019-10-19            |
  8. | 10                     | ACCOUNTING            | 1700                | 2019-10-20            |
  9. | 20                     | RESEARCH              | 1800                | 2019-10-20            |
  10. | 30                     | SALES                 | 1900                | 2019-10-20            |
  11. | 40                     | OPERATIONS            | 1700                | 2019-10-20            |
  12. +------------------------+-----------------------+---------------------+-----------------------+--+
复制代码


4.创建临时表 tmp_dept_partition

  1. hive> create table tmp_dept_partition as select * from dept_partition;
复制代码
5.查询临时表

  1. hive> select * from tmp_dept_partition;
复制代码
  1. +----------------------------+---------------------------+-------------------------+---------------------------+--+
  2. | tmp_dept_partition.deptno  | tmp_dept_partition.dname  | tmp_dept_partition.loc  | tmp_dept_partition.month  |
  3. +----------------------------+---------------------------+-------------------------+---------------------------+--+
  4. | 10                         | ACCOUNTING                | 1700                    | 2019-10-19                |
  5. | 20                         | RESEARCH                  | 1800                    | 2019-10-19                |
  6. | 30                         | SALES                     | 1900                    | 2019-10-19                |
  7. | 40                         | OPERATIONS                | 1700                    | 2019-10-19                |
  8. | 10                         | ACCOUNTING                | 1700                    | 2019-10-20                |
  9. | 20                         | RESEARCH                  | 1800                    | 2019-10-20                |
  10. | 30                         | SALES                     | 1900                    | 2019-10-20                |
  11. | 40                         | OPERATIONS                | 1700                    | 2019-10-20                |
  12. +----------------------------+---------------------------+-------------------------+---------------------------+--+
复制代码
6.查看表结构(这个时候分区表已经转换为非分区表了)

  1. hive> show create table tmp_dept_partition;
复制代码
  1. +----------------------------------------------------+--+
  2. |                   createtab_stmt                   |
  3. +----------------------------------------------------+--+
  4. | CREATE TABLE `tmp_dept_partition`(                 |
  5. |   `deptno` int,                                    |
  6. |   `dname` string,                                  |
  7. |   `loc` string,                                    |
  8. |   `month` string)
复制代码


7.MySQL中建表 dept_partition

  1. mysql> drop table if exists dept_partition;
  2. create table dept_partition(
  3. `deptno` int,        
  4. `dname` varchar(20),      
  5. `loc` varchar(20),               
  6. `month` varchar(50))
复制代码
8.使用sqoop导入到MySQL

  1. bin/sqoop export \
  2. --connect jdbc:mysql://hadoop01:3306/partitionTb \
  3. --username root \
  4. --password 123456 \
  5. --table dept_partition \
  6. --num-mappers 1 \
  7. --export-dir /user/hive/warehouse/hive_db.db/tmp_dept_partition \
  8. --input-fields-terminated-by "\001"
复制代码
9.Mysql查询验证是否成功导出

  1. mysql> select * from dept_partition;
复制代码
  1. +--------+------------+------+------------+
  2. | deptno | dname      | loc  | month      |
  3. +--------+------------+------+------------+
  4. |     10 | ACCOUNTING | 1700 | 2019-10-19 |
  5. |     20 | RESEARCH   | 1800 | 2019-10-19 |
  6. |     30 | SALES      | 1900 | 2019-10-19 |
  7. |     40 | OPERATIONS | 1700 | 2019-10-19 |
  8. |     10 | ACCOUNTING | 1700 | 2019-10-20 |
  9. |     20 | RESEARCH   | 1800 | 2019-10-20 |
  10. |     30 | SALES      | 1900 | 2019-10-20 |
  11. |     40 | OPERATIONS | 1700 | 2019-10-20 |
  12. +--------+------------+------+------------+
复制代码

最新经典文章,欢迎关注公众号

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /5 下一条