文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL中的业务数据该如何正确导入到Hive中 - Sqoop

2023-09-04 19:56

关注

水善利万物而不争,处众人之所恶,故几于道💦


1. 使用Sqoop脚本将MySQL中的数据迁移到HDFS

2. 在Hive中建立与之对应的表

3. 将HDFS中的数据load到 Hive 数仓的ODS层的表中


1 . 使用Sqoop 将 MySQL中的数据导入到HDFS上

#! /bin/bashsqoop=/opt/module/sqoop/bin/sqoop#do_date默认为前一天的时间do_date=`date -d '-1 day' +%F`#如果第二个参数没有指定导入哪天的数据,默认为前一天的数据if [[ -n "$2" ]]; thendo_date=$2fiimport_data(){$sqoop import \--connect jdbc:mysql://hadoop101:3306/gmall \--username root \ --password 000000 \#指定导出数据的目录路径--target-dir /origin_data/gmall/db/$1/$do_date \#如果该目录已经存在,则删除该目录。设定此参数可以保证每次导入数据不会覆盖之前的数据。--delete-target-dir \#使用 SQL 查询语句导入数据,有的sql会加一个where 1=1是为了满足语法--query "$2 and  \$CONDITIONS" \#Sqoop 并行的任务数,默认值为 4。因为它底层运行的实际上是MR中的Map,没有Reduce,默认是4个MapTask。数据导入时,建议并行度设为1--num-mappers 1 \--fields-terminated-by '\t' \#启用压缩--compress \#设置压缩算法-lzop压缩--compression-codec lzop \#Hive中的Null在底层是以\N来存储的,而MySQL中的NULL就是NULL,为了导入数据的一致性--null-string '\\N' \--null-non-string '\\N'#导入后立即建立lzo索引hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer /origin_data/gmall/db/$1/$do_date}import_activity_order(){  import_data activity_order "selectid,activity_id,order_id,create_time  from activity_order  where date_format(create_time,'%Y-%m-%d')='$do_date'"}import_base_region(){  import_data base_region "select  id,  region_namefrom base_regionwhere 1=1"}case $1 in  "order_info")     import_order_info;;  "base_category1")     import_base_category1;;# 导入指定的表,省略了,所有的表都应该列出来"first")   import_base_category1   import_base_category2   import_base_category3   import_order_info   #......   #所有的表,因为第一次导入为全量导入;;"all")   import_comment_info   import_coupon_use   #以后每次是增量导入,有些表就不用导入了;;esac

在这里插入图片描述




2. 在Hive中建立与之对应的表

常用的数据类型有下面这几个:

 string - - - 字符型
 bigint - - - 数值类型
 decimal(10,2) - - - 商品的金额
 decimal(16,2) - - - 支付、退款金额

  数仓中一般创建的都是外部表,防止数据被误删(因为这个表的数据实际上是存储在HDFS上,并不属于Hive的数据集,所以当我们删除这个外部表的时候,只会删除它在Hive元数据中的记录,而不会删除HDFS上的数据文件,因此比较安全)

drop table if exists You_HiveTable_Name;CREATE EXTERNAL TABLE You_HiveTable_Name (`field_name1` string,`field_name2` bigint,`field_name3` decimal(10,2))PARTITIONED BY (`dt` string) --分区字段row format delimited fields terminated by '\t' --指定列分割符STORED AS  INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'  OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'LOCATION '/warehouse/gmall/ods/ods_start_log';  --外部表的存储路径,一建表这个路径就会被创建

  以上SQL是创建一个外部表,支持lzo压缩,也就是声明这个表要读取的是lzo文件,比如我进行一个查询,(如果是MapReduce)实际上底层是通过MR去读数据,然后将结果输出,MR读数据会用到FileInputFormat,那么用LzoTextInputFormat就可以读到数据了。
  Hive - Lzo压缩的详细介绍及配置 - Hive官网




3. 将HDFS中的数据 load 到 Hive 数仓的ODS层的表中

#!/bin/bashAPP=gmallhive=/opt/module/hive/bin/hive# 如果是输入的日期按照取输入日期;如果没输入日期取当前时间的前一天if [ -n "$2" ] ;then    do_date=$2else     do_date=`date -d "-1 day" +%F`fisql1="load data inpath '/origin_data/$APP/db/order_info/$do_date' OVERWRITE into table ${APP}.ods_order_info partition(dt='$do_date');load data inpath '/origin_data/$APP/db/order_detail/$do_date' OVERWRITE into table ${APP}.ods_order_detail partition(dt='$do_date');"#每张表都要load,这里省略了sql2=" load data inpath '/origin_data/$APP/db/base_province/$do_date' OVERWRITE into table ${APP}.ods_base_province;load data inpath '/origin_data/$APP/db/base_region/$do_date' OVERWRITE into table ${APP}.ods_base_region;"case $1 in"first"){    $hive -e "$sql1$sql2"};;"all"){    $hive -e "$sql1"};;esac

  这里的两个sql字符串的意思是:有的表只需要在第一次导的时候导入,导入后基本不改变,所以以后就不用导入,所以分开了。

在这里插入图片描述

到Hive中查看表数据:
在这里插入图片描述


至此,业务数据库中的数据已经从MySQL导入到了Hive中

来源地址:https://blog.csdn.net/qq_45796486/article/details/131013447

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯