范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

从0到1之spark(32)大数据项目电商数仓(二)系统业务数据仓库

  2.4 关系建模与维度建模
  关系模型
  关系模型主要应用与OLTP系统中,为了保证数据的一致性以及避免冗余,所以大部分业务系统的表都是遵循第三范式的。
  维度模型
  维度模型主要应用于OLAP系统中,因为关系模型虽然冗余少,但是在大规模数据,跨表分析统计查询过程中,会造成多表关联,这会大大降低执行效率。
  所以把相关各种表整理成两种:事实表和维度表两种。所有维度表围绕着事实表进行解释。
  OLAP与OLTP对比
  雪花模型、星型模型和星座模型
  在维度建模的基础上又分为三种模型:星型模型、雪花模型、星座模型
  第3章 数仓搭建
  3.0 配置Hadoop支持Snappy压缩
  1)将编译后支持Snappy压缩的Hadoop jar包解压缩,并将lib/native目录中所有文件上传到hadoop102的/opt/module/hadoop-2.7.2/lib/native目录,并分发到hadoop103 hadoop104。
  2)重新启动Hadoop。
  3)检查支持的压缩方式 [kgg@hadoop102 native]$ hadoop checknative hadoop:  true /opt/module/hadoop-2.7.2/lib/native/libhadoop.so zlib:    true /lib64/libz.so.1 snappy:  true /opt/module/hadoop-2.7.2/lib/native/libsnappy.so.1 lz4:     true revision:99 bzip2:   false
  3.1 业务数据生成
  3.1.1 建表语句
  1)通过SQLyog创建数据库gmall
  2)设置数据库编码
  3)导入建表语句(1建表脚本)
  4)重复步骤3的导入方式,依次导入:2商品分类数据插入脚本、3函数脚本、4存储过程脚本。
  3.1.2 生成业务数据
  1)生成业务数据函数说明     init_data ( do_date_string VARCHAR(20) , order_incr_num INT, user_incr_num INT , sku_num INT , if_truncate BOOLEAN  ):     参数一:do_date_string生成数据日期     参数二:order_incr_num订单id个数     参数三:user_incr_num用户id个数     参数四:sku_num商品sku个数     参数五:if_truncate是否删除数据
  2)案例测试:
  (1)需求:生成日期2019年2月10日数据、订单1000个、用户200个、商品sku300个、删除原始数据。
  CALL init_data("2019-02-10",1000,200,300,TRUE);
  (2)查询生成数据结果 SELECT * from base_category1; SELECT * from base_category2; SELECT * from base_category3;  SELECT * from order_info; SELECT * from order_detail;  SELECT * from sku_info; SELECT * from user_info;  SELECT * from payment_info;
  3.2 业务数据导入数仓
  3.2.1 Sqoop安装
  详见尚硅谷大数据技术之Sqoop
  3.2.2 Sqoop导入命令 /opt/module/sqoop/bin/sqoop import  --connect  --username  --password  --target-dir  --delete-target-dir  --num-mappers  --fields-terminated-by  --query "$2" " and $CONDITIONS;"
  3.2.3 分析表
  3.2.4 Sqoop定时导入脚本
  1)在/home/kgg/bin目录下创建脚本sqoop_import.sh
  [kgg@hadoop102 bin]$ vim sqoop_import.sh     在脚本中填写如下内容 #!/bin/bash  db_date=$2 echo $db_date db_name=gmall  import_data() { /opt/module/sqoop/bin/sqoop import  --connect jdbc:mysql://hadoop102:3306/$db_name  --username root  --password 000000  --target-dir /origin_data/$db_name/db/$1/$db_date  --delete-target-dir  --num-mappers 1  --fields-terminated-by "	"  --query "$2"" and $CONDITIONS;" }  import_sku_info(){   import_data "sku_info" "select  id, spu_id, price, sku_name, sku_desc, weight, tm_id, category3_id, create_time   from sku_info where 1=1" }  import_user_info(){   import_data "user_info" "select  id, name, birthday, gender, email, user_level,  create_time  from user_info where 1=1" }  import_base_category1(){   import_data "base_category1" "select  id, name from base_category1 where 1=1" }  import_base_category2(){   import_data "base_category2" "select  id, name, category1_id from base_category2 where 1=1" }  import_base_category3(){   import_data "base_category3" "select id, name, category2_id from base_category3 where 1=1" }  import_order_detail(){   import_data   "order_detail"   "select      od.id,      order_id,      user_id,      sku_id,      sku_name,      order_price,      sku_num,      o.create_time     from order_info o, order_detail od   where o.id=od.order_id   and DATE_FORMAT(create_time,"%Y-%m-%d")="$db_date"" }  import_payment_info(){   import_data "payment_info"   "select      id,       out_trade_no,      order_id,      user_id,      alipay_trade_no,      total_amount,       subject,      payment_type,      payment_time    from payment_info    where DATE_FORMAT(payment_time,"%Y-%m-%d")="$db_date"" }  import_order_info(){   import_data   "order_info"   "select      id,      total_amount,      order_status,      user_id,      payment_way,      out_trade_no,      create_time,      operate_time     from order_info    where (DATE_FORMAT(create_time,"%Y-%m-%d")="$db_date" or DATE_FORMAT(operate_time,"%Y-%m-%d")="$db_date")" }  case $1 in   "base_category1")      import_base_category1 ;;   "base_category2")      import_base_category2 ;;   "base_category3")      import_base_category3 ;;   "order_info")      import_order_info ;;   "order_detail")      import_order_detail ;;   "sku_info")      import_sku_info ;;   "user_info")      import_user_info ;;   "payment_info")      import_payment_info ;;    "all")    import_base_category1    import_base_category2    import_base_category3    import_order_info    import_order_detail    import_sku_info    import_user_info    import_payment_info ;; esac
  2)增加脚本执行权限 [kgg@hadoop102 bin]$ chmod 777 sqoop_import.sh
  3)执行脚本导入数据 [kgg@hadoop102 bin]$ sqoop_import.sh all 2019-02-10
  4)在SQLyog中生成2019年2月11日数据 CALL init_data("2019-02-11",1000,200,300,TRUE);
  5)执行脚本导入数据 [kgg@hadoop102 bin]$ sqoop_import.sh all 2019-02-11
  3.2.5 Sqoop导入数据异常处理
  1)问题描述:执行Sqoop导入数据脚本时,发生如下异常 java.sql.SQLException: Streaming result set com.mysql.jdbc.RowDataDynamic@65d6b83b is still active. No statements may be issued when any streaming result sets are open and in use on a given connection. Ensure that you have called .close() on any active streaming result sets before attempting more queries.     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:930)     at com.mysql.jdbc.MysqlIO.checkForOutstandingStreamingData(MysqlIO.java:2646)     at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1861)     at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2101)     at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2548)     at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2477)     at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1422)     at com.mysql.jdbc.ConnectionImpl.getMaxBytesPerChar(ConnectionImpl.java:2945)     at com.mysql.jdbc.Field.getMaxBytesPerCharacter(Field.java:582)
  2)问题解决方案:增加如下导入参数 java.sql.SQLException: Streaming result set com.mysql.jdbc.RowDataDynamic@65d6b83b is still active. No statements may be issued when any streaming result sets are open and in use on a given connection. Ensure that you have called .close() on any active streaming result sets before attempting more queries.     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:930)     at com.mysql.jdbc.MysqlIO.checkForOutstandingStreamingData(MysqlIO.java:2646)     at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1861)     at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2101)     at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2548)     at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2477)     at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1422)     at com.mysql.jdbc.ConnectionImpl.getMaxBytesPerChar(ConnectionImpl.java:2945)     at com.mysql.jdbc.Field.getMaxBytesPerCharacter(Field.java:582)

iPhone1314都无缘了?传苹果2023年才推出潜望镜头现如今变焦能力已经成为了多数旗舰手机,在拍照方面的主要卖点之一,然而由于没有潜望镜头,所以导致苹果手机的变焦能力,和安卓手机相比仍然有一定差距。不过,据说苹果的潜望镜头已经在研发之全世界最深的5G网络设在了山西煤矿对于别的行业,5G技术是锦上添花,而对于采煤行业来说,5G技术是雪中送炭,只有它可以满足智能煤矿的大带宽实时性和可靠性要求,把人解放出来,井下要减人直到无人,最难的问题留给了5G。尼康WX10x50IF评测尼康WX10x50IF前言2017年尼康百年,很多人会想尼康会如何来庆祝这个百年华诞。尤其是摄影圈还在期待尼康能够推出什么新品,但是实际尼康并没有这么做。相反,为了继承传统(实际上免费包邮,联通沃派青春卡,29元30G通用流量,40G定向流量1。套餐介绍月租29元月,首月按天计费流量30G全国通用流量(可转结次月使用)超出套餐5元G40G定向流量(腾讯视频爱奇艺优酷视频沃视频哔哩哔哩虎牙网易云音乐喜马拉雅,定向范围根据苹果汽车或于2024年发布正在接洽某东方车企笔者获悉,近日有外媒传出了关于苹果汽车的最新传闻。DigiTimes科技网表示,苹果公司目前正在亚洲会见丰田汽车的代表,并商讨潜在的合作伙伴关系。苹果公司的目标是在汽车行业找到一个响应国家共同富裕,各互联网大佬要学学马化腾共同富裕有多火,最近各路公司都开始往上面硬靠了。这个场面真是有点好笑了!美团的王兴说美团早就有共同富裕的基因了。你看美是好,团是一起,一起变得更好这不就是共同富裕吗?震惊震惊震惊震NFT的价值在哪里?NFT的价值在哪里非同质化代币,一个头像皮肤视频画作,竟然会被称之为币,我不明白这其中的原因,对于虚拟货币并无了解。只是从直觉来聊聊NFT这个东西,这个新生事物,至少对于绝大多数中发布时很受争议,现在OPPOReno6的口碑怎样了?去年opporeno5pro的横空出世,刷新了大家对reno系列的固有印象,原来reno也能有性价比真香机的存在,而在今年5月底,作为升级版的reno6pro带来了哪些提升呢?首先地球的质量是一直在增长的还是不变的?我们每个人就生活在地球上,从未感觉出地球是在变大还是在变小?但是地球只是太空中的一颗星球,那么它的质量会有变化吗?是在增长还是在减少呢?地球的质量高达59。6万亿亿吨,接近60万亿为什么国内的大厂不愿意适配Linux软件,技术实现上很难吗?当然是不愿意,故意的,因为大家看到有QQFORLINUX,但是功能很鸡肋,没法用。技术上不是什么问题,而是限制阻止,应该是不可告人目的。你说的apipost是什么东西,web接口a中本聪拥有的比特币,如果在最高值抛售,他能排世界富豪榜第几?传闻中,中本聪拥有超过100万枚比特币。但是根据目前比特币的持有地址来看,超过10万枚以上的地址几乎都是被公开监控的,如果有2010左右的钱包地址出现了大额公开转账的话会引起全球媒
小米无线开关一个能提升智能家居控制体验的产品!你好,我是卧龙X。一个喜欢分享数码好物体验的UP主!祝大家新年快乐,牛年大吉!现在智能家居已如春雨润物细无声般地渗透到我们日常生活的方方面面。说到智能家居,不得不提到小米,小米智能小米小爱随身音响49元居然有弹窗!前言随着生活节奏的加快,忙碌的工作给生活带来不少压力,听音乐固然是缓解压力的最佳办法之一,不过由于环境的限制,尤其经常外出办公的人士,能够坐下来听一听舒缓柔和的音乐成为了一种奢侈,艾创米指纹锁基本功能你都知道吗?使用指纹锁,最重要的并不是提高安全性,而是享受指纹锁的便利性。选择指纹锁,一方面是要满足自己的需要,另一方面也是在选指纹锁的质量。一个好的企业往往都会有十几款指纹锁供用户选择。用户新房装修换锁,艾创米告诉你怎么选指纹锁?近年来,随着电视剧不断植入指纹锁这个产品,相信很多人都不陌生。指纹锁的出现给人们生活带来最直接的改变就是不用带钥匙出门,相信很多人都有过丢钥匙的经历,每次因为钥匙不见了而进不了家门艾创米智能家居安装步骤及注意事项现代发展快速,智能家居的出现,让人们能体验高质量的生活,同时也提升了生活的安全性。智能家居正在慢慢替代传统家居设备,为人们提供舒适的生活。于智能家居的使用,很多人都只注重智能家居设不忘初心有孚网络双碳目标下的绿色践行之路2021年9月25日,鞭炮齐鸣,田圣数据中心AB栋主体喜封金顶。田圣数据中心AB栋主体于2020年12月奠基开工建设,总建筑面积约15万平方米。2021年7月,广东田圣数据科技有限超帅的键盘极客定制SKYLOONG小呆虫GK96硅胶机械键盘开箱体验前言大家好,俺又来了!今天来分享一款超帅的客制化键盘,希望大家能喜欢。购买理由1事情要从家里的桌面改造计划开始说起。我的桌面几乎每年都会改造一次,今年已经是第三次改造了,我叫它桌面智能锁的这些功能,你都知道吗?快来看这里社会发展迅速,曾经的辉煌在今天就不吃香了。曾经的诺基亚到现在的智能手机,曾经的手持地图到现在的智能导航。仿佛一切事物都朝着智能的方向不断发展,越来越好!今天的你连钱都不带了,谁还想艾创米智能锁远程小程序临时密码用不了是什么原因?在万物互联的时代,智能家居已经浸入日常生活,而智能门锁作为居家防卫的第一道关口,承载着作为堡垒的功能,也正在经受着越来越多的瞩目。现在的智能锁几乎都配置了一个功能,那就是小程序临时智能门锁有哪些功能?看过来,都在这里社会高速发展的今天,什么东西都讲智能,智能手机,智能电视,智慧公交,智能门锁,等等。如今智能门锁越来越受到人的睛睐,并给人们带来了安全舒适方便快捷的生活。那么和传统机械锁相比,智能打造智慧城管,云计算助力智慧城市加速落地在5GAI云计算大数据物联网等新兴技术迭代更新的驱动下,智慧城市建设持续加速,传统的城市管理数字化建设已不能满足智慧城市发展的需要,而引入了物联网云计算及新一代移动通信网络等新技术