基于Hadoop生态圈的数据仓库实践 —— 进阶技术(六)

六、维度层次
        大多数维度都具有一个或多个层次。例如,日期维度就有一个四级层次:年、季度、月和日。这些级别用date_dim表里的列来表示。日期维度是一个单路径层次,因为除了年-季度-月-日这条路径外,它没有任何其它层次。本节讨论在维度的层次上进行分组和钻取查询。多路径层次在下一节“多路径和参差不齐的层次”中讨论。
        为了识别数据仓库里一个维度的层次,首先要理解维度中列的含义,然后识别两个或多个列是否具有相同的主题。例如,日、月、季度和年具有相同的主题因为它们都是关于日期的。具有相同主题的列形成一个组,组中的一列必须包含至少一个组内的其它成员,例如,在前面提到的组中,月包含日。这些列的链条形成了一个层次。例如,日-月-季度-年这个链条是一个日期维度的层次。除了日期维度,产品和客户维度也有层次。
        下表显示了三个维度的层次。注意客户维度具有两个路径的层次。

customer_dim

ptoduct_dim

date_dim

customer_street_address

shipping_address

product_name

date

customer_zip_code

shipping_zip_code

product_category

month_name

customer_city

shipping_city

 

quarter

customer_state

shipping_state

 

year


分组和钻取查询
        可以在层次上进行分组和钻取查询。分组查询是把度量按照一个维度的一个或多个级别进行分组。下面的脚本是一个分组查询的例子。这个查询按产品(product_category列)和日期维度的三个层次级别(year、quarter和month列)分组返回销售金额。
USE dw;  
  
SELECT product_category,  
       year,  
       quarter,  
       month,  
       SUM(order_amount) sum_order_amount
  FROM sales_order_fact a,  
       product_dim b,  
       date_dim c  
 WHERE a.product_sk = b.product_sk  
   AND a.order_date_sk = c.date_sk  
GROUP BY product_category , year , quarter , month  
CLUSTER BY product_category , year , quarter , month;
        查询结果如下图所示。分组查询的输出显示了每一行的度量(销售订单金额)都沿着年-季度-月的层次分组。

        与分组查询类似,钻取查询也把度量按照一个维度的一个或多个级别进行分组。但与分组查询不同的是,分组查询只显示分组后最低级别(本例中是月级别)上的度量(订单金额的汇总),而钻取查询显示分组后维度每一个级别的度量。下面使用两种方法进行钻取查询,结果显示了每个日期维度级别(年、季度和月级别)的订单汇总金额。
USE dw;  

-- 使用union all 
SELECT product_category, time, order_amount
  FROM
(
SELECT product_category, 
       case when sequence = 1 then concat('year: ', time)
            when sequence = 2 then concat('quarter: ', time)
            else concat('month: ', time)
       end time,
       order_amount, 
       sequence, 
       date
  FROM 
(
SELECT product_category, min(date) date, year time, 1 sequence, SUM(order_amount) order_amount
  FROM sales_order_fact a, product_dim b, date_dim c  
 WHERE a.product_sk = b.product_sk  
   AND a.order_date_sk = c.date_sk  
 GROUP BY product_category , year
 UNION ALL 
SELECT product_category, min(date) date, quarter time, 2 sequence, SUM(order_amount) order_amount
  FROM sales_order_fact a, product_dim b, date_dim c  
 WHERE a.product_sk = b.product_sk  
   AND a.order_date_sk = c.date_sk  
 GROUP BY product_category , year , quarter 
 UNION ALL 
SELECT product_category, min(date) date, month time, 3 sequence, SUM(order_amount) order_amount
  FROM sales_order_fact a, product_dim b, date_dim c  
 WHERE a.product_sk = b.product_sk  
   AND a.order_date_sk = c.date_sk  
 GROUP BY product_category , year , quarter , month) x
 CLUSTER BY product_category , date , sequence , time) y; 
 
-- 使用grouping__id函数
SELECT product_category, time, order_amount
  FROM
(
SELECT product_category, 
       case when gid = 3 then concat('year: ', year)
            when gid = 7 then concat('quarter: ', quarter)
            else concat('month: ', month)
       end time,
       order_amount,
       gid,
       date
  FROM
(
SELECT product_category, year, quarter, month, min(date) date, SUM(order_amount) order_amount, CAST(grouping__id AS INT) gid
  FROM sales_order_fact a, product_dim b, date_dim c  
 WHERE a.product_sk = b.product_sk  
   AND a.order_date_sk = c.date_sk 
 GROUP BY product_category , year , quarter , month with rollup
) x WHERE gid > 1
 CLUSTER BY product_category , date , gid , time) y;

        查询结果如下图所示。


展开阅读全文

全新大数据企业电商数据仓库项目实战教程

06-27
本教程为授权出品 一、课程简介 数据仓库(Data Warehouse,可简写为DW或DWH),是面向分析的集成化数据环境,为企业决策制定过程,提供系统数据支持的战略集合,是国内外各大公司正在重点投入的战略级技术领域。 二、课程内容 《大数据电商数仓项目实战》视频教程,从项目架构的搭建,到数据采集模块的设计、数仓架构的设计、实战需求实现、即席查询的实现,我们针对国内目前广泛使用的Apache原生框架和CDH版本框架进行了分别介绍,Apache原生框架介绍中涉及到的技术框架包括Flume、Kafka、Sqoop、MySql、HDFS、Hive、Tez、Spark、Presto、Druid等,CDH版本框架讲解包括CM的安装部署、Hadoop、Zookeeper、Hive、Flume、Kafka、Oozie、Impala、HUE、Kudu、Spark的安装配置,透彻了解不同版本框架的区别联系,将大数据全生态系统前沿技术一网打尽。在过程中对大数据生态体系进行了系统的讲解,对实际企业数仓项目中可能涉及到的技术点都进行了深入的讲解和探讨。同时穿插了大量数仓基础理论知识,让你在掌握实战经验的同时能够打下坚实的理论基础。 三、课程目标 本课程以国内电商巨头实际业务应用场景为依托,对电商数仓的常见实战指标以及难点实战指标进行了详尽讲解,具体指标包括:每日、周、月活跃设备明细,留存用户比例,沉默用户、回流用户、流失用户统计,最近连续3周活跃用户统计,最近7天内连续3天活跃用户统计,GMV成交总额分析,转化率及漏斗分析,品牌复购率分析、订单表拉链表的设计等,让学生拥有更直观全面的实战经验。通过对本课程的学习,对数仓项目可以建立起清晰明确的概念,系统全面的掌握各项数仓项目技术,轻松应对各种数仓难题。 四、课程亮点 本课程结合国内多家企业实际项目经验,特别加入了项目架构模块,从集群规模的确定到框架版本选型以及服务器选型,手把手教你从零开始搭建大数据集群。并且总结大量项目实战中会遇到的问题,针对各个技术框架,均有调优实战经验,具体包括:常用Linux运维命令、Hadoop集群调优、Flume组件选型及性能优化、Kafka集群规模确认及关键参数调优。通过这部分学习,助学生迅速成长,获取前沿技术经验,从容解决实战问题。
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值