首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kettle构建Hadoop ETL实践(九):事实表技术

图9-3 设置年月变量转换 获取系统信息步骤取得上月第一天,公式步骤用month和year函数获得上月对应月份与年份,设置环境变量步骤设置MONTH和YEAR两个全局变量用于后面SQL作业项中替换变量...该步骤要求它所合并数据集合具有完全相同字段结构,并且已经步骤中指定字段排序,否则可能导致错误结果。...“字段选择”步骤只选择dw.sales_order_fact表输出11个字段。“排序记录”步骤order_number字段排序,这既是“行转列”步骤要求,也是“排序合并”步骤要求。...“排序记录 2”order_number字段排序。 两个数据集合在合并后进行分组,实现将同一订单号多行转为一行。...本节开头曾经提到,需要为迟到事实行获取事务发生时间点有效维度代理。在SQL中使用销售订单过渡表状态日期字段限定当时维度代理

5.8K10

告别宽表,用 DQL 成就新一代 BI

,这是绝大多数BI实际场景),那给业务人员使用BI多维分析技术本质,其实就是通过页面拖拽出这个SQL 对于单表查询,并不是很难理解和实施,选出字段再配上过滤条件及排序,和用Excel差不太多,分组汇总会稍复杂些...我们来分别看一下这几种情况下SQL复杂度以及DQL是怎么解决 属性化 我们用前面提到那个查询中国经理美国员工例子来看一下SQL要怎么写,员工表里有个部门外字段指向部门表主键,部门表里又有经理字段指回员工表...,字段有了子属性,子属性又有子属性,但并不难理解,也就是部门经理国籍是中国 在DQL语法体系中,被看成了属性,键指向表字段可直接用子属性方式引用,也允许多层和递归引用 同维表等同化 这是两个一比一表...,SELECT后直接再加字段就可以了 维对齐 这里有三个表:合同表、回款表和库存表 我们希望日期统计合同额、回款额和库存金额SQL写出来是这样: SELECT T1.日期,T1.金额,T2....中,只要把这几个表分别日期对齐分别汇总就行了,而不必关心这些表之间关系,在增删表时也不容易发生遗漏 如果维对齐再与搅到一起,情况就会更复杂: 我们希望地区统计销售员人数和合同额 用SQL写出来是这样

1.2K10
您找到你想要的搜索结果了吗?
是的
没有找到

浅谈大数据建模主要技术:维度建模

非可加性事实则根本就不能相加事实,比如商品价格以及订单状态等。 除了存储事实,事实表都会包含多个相关 用于关联和连接相应维度表。...例如,订单事实表会包含连接到商品表商品、连接到会员表买家外、或者连接到门店表门店等。 正是通过这些,才能进行各个角度、各个维度分析。...维度表 维度表是维度建模灵魂,通常来说,维度表设计得好坏直接决定了维度建模好坏 维度表包含了 实表所记录业务过程度量上下文和环境,它们除了记录“5 个 W”等信息,通常还包含了很多描述字段和标签字段等...维度属性是查询约柬条件( SQL where 条件)、分组( SQL group 语句)与报表标签生成基本来源在查询与报表需求中, 属性用 by ()这个单词进行标识。...通过品牌 ID 这个,商品表可以间接获取到所有品牌描述信息。

1.1K10

深度长文探讨Join运算简化和提速

本文将对JOIN运算进行深入讨论,针对性地提出语法简化和性能优化方法。 一. SQLJOIN 我们先来看SQL如何理解JOIN运算。...而从JOIN模型上引入概念后,将这种JOIN专门处理时,就总能分清事实表和维表,更多JOIN表只会导致性能线性下降。...内存数据库是当前比较火热技术,但上述分析表明,采用SQL模型内存数据库在JOIN运算上是很难快起来! 七、进一步关联 我们继续讨论JOIN,并延用上一节例子。...因为同维表和主子表总是针对主键或主键一部分关联,我们可以事先把这些关联表数据其主键排序排序成本虽然较高,但是一次性。...有序归并前提是将数据主键排序,而这类数据常常会不断追加,原则上每次追加后就要再次排序,而我们知道大数据排序成本通常很高,这是否会导致追加数据难度很大呢?

43710

告别宽表,用 DQL 成就新一代 BI

,这是绝大多数BI实际场景),那给业务人员使用BI多维分析技术本质,其实就是通过页面拖拽出这个SQL 对于单表查询,并不是很难理解和实施,选出字段再配上过滤条件及排序,和用Excel差不太多,分组汇总会稍复杂些...SQL复杂度以及DQL是怎么解决 属性化 我们用前面提到那个查询中国经理美国员工例子来看一下SQL要怎么写,员工表里有个部门外字段指向部门表主键,部门表里又有经理字段指回员工表,...,字段有了子属性,子属性又有子属性,但并不难理解,也就是部门经理国籍是中国 在DQL语法体系中,被看成了属性,键指向表字段可直接用子属性方式引用,也允许多层和递归引用 同维表等同化 这是两个一比一表...,SELECT后直接再加字段就可以了 维对齐 这里有三个表:合同表、回款表和库存表 我们希望日期统计合同额、回款额和库存金额SQL写出来是这样: SELECT T1.日期,T1.金额,T2....中,只要把这几个表分别日期对齐分别汇总就行了,而不必关心这些表之间关系,在增删表时也不容易发生遗漏 如果维对齐再与搅到一起,情况就会更复杂: 我们希望地区统计销售员人数和合同额 用SQL写出来是这样

80820

MySQL练习题

​ 要求采用别名显示字段:卡号,交易类型,交易金额,交易时间 4) 交易类型查询交易总金额和交易次数 ​ 要求采用别名显示字段:交易类型,总金额,交易次数 ​ 提示:使用分组查询、聚合函数 5) 查询账户表和交易表...,显示交易类型为存入且交易金额降序排账户名、交易金额、交易类型。 ​...提示:使用表连接、排序、别名 6) 查询账户表和交易表,显示账户名为”朱逸群”全部交易信息且交易金额降序排后 显示前两条数据。 ​...要求采用别名显示字段:账户名,交易类型,交易金额,交易时间 ​ 提示:使用表连接、order by排序、limit 7) 使用别名统计交易表每个卡号对应存入次数和最大存入金额且要求最大存入金额大于1000...GoodId 商品编号 int ,参照商品表商品编号字段 (4) Quantity 购买数量 int 是 大于0 3、向表中添加测试数据(可视化编辑或使用SQL脚本皆可): 商品表数据

1.4K20

【iOS】基于Realm数据库记账软件--Realm数据库(一)

1、数据库表设计 账单表:Bill 字段 类型 说明 billID NSString 账单ID,主键 date NSString 账单产生日期 money Double 账单金额 isIncome Bool...true代表收入,false代表支出 remark NSString 备注 accountID NSString 账户ID categoryID NSString 类别ID bookID NSString...账本ID 账单类型表:Category 字段 类型 说明 cateID NSString 账单类型ID,主键 name NSString 类型名 imageName NSString.../br> 在Realm数据库中,你不需要写任何sql语句,只需将你模型继承RLMObject,之后事情就不需要再管了。...,可以分以下两布 /// 获取当前账本所有账单后,再排序 - (RLMResults *)getBillsInCurrentBook { MPBookModel *book = [[MPBookManager

1.4K20

Mysql 窗口函数学习

A1:由于是区分每名同学进行排序,所以需要依据 uid 字段进行 partition;进一步地,按照成绩进行排序,所以 order by 字段即为 score;最后,由于是要进行排名,所以配套函数选择...A2:首先,仍然是依据 uid 字段进行 partition;而后由于是要计算本月成绩与上月成绩差值,所以此次排序依据应该是 date;进一步地,由于要计算差值,所以需要对每次月考成绩计算其前一行成绩...(在按照 uid 进行切分并按照 date 排序后,上月成绩即为当前行前一条记录),所以配套函数即为 lag。...进一步地,由于此处限定计算近 3 次成绩平均分,所以除了 partition 和 order by 两个关键字,还需增加 rows between 限定。...值得指出是,对于每名学生,当切分窗口不足指定窗口大小(即目标行数)时会实际数据进行聚合,例如学生 A,1 月 31 日对应近 3 次平均分即为本月成绩自身;2 月 28 日对应近 3 次平均分即为本月成绩和上月成绩平均分

1.1K20

如何用外部程序优化SQL语句中IN和EXISTS

数据结构 IN 和 EXISTS 是 SQL 中常见复杂条件,在将 SQL(存储过程)转换成库计算获取高性能时也会面对这些问题。...本文将以 TPC-H 定义模型为基础,介绍如何用集算器语法实现 IN、EXISTS 并做优化。...集算器提供了 switch@i()、join@i() 两个函数用来做哈希连接过滤,switch 是式连接,用来把字段变成指引字段,这样就可以通过字段直接引用指向表字段,join 函数不会改变字段值...集算器提供了 switch@i()、join@i() 两个函数用来做哈希连接过滤,switch 是式连接,用来把字段变成指引字段,这样就可以通过字段直接引用指向表字段,join 函数不会改变字段值...如果两个表都很大不能载入内存则要考察两个表是否关联字段有序,如果无序可以用 cs.sortx() 排序,对于有序两个表就可以用 joinx() 来做连接了。

98010

一篇文章搞懂数据仓库:三种事实表(设计原则,设计方法、对比)

如,订单优惠率,应分解为订单原价金额与订单优惠金额两个事实存储在事实表中; 原则 4:在选择维度和事实之前必须先声明粒度 粒度用于确定事实表中一行所表示业务细节层次,决定了维度模型扩展性;...3 个事实,应该采用统一计量单位,统一为元或者分,以方便使用; 原则 7:对事实 null 值要处理 原因:在数据库中,null 值对常用数字型字段 SQL 过滤条件都不生效;如,大于、小于、...、控制聚合层次、排序数据、定义主从关系等; 易用性:对事实表,更较少关联操作、过滤查询、控制聚合层次、排序数据、定义主从关系等; 在 Kimball 维度建模中,通常按照星形模型方式设计,通过事实表关联专门维表...,这种方式来获取维度,谨慎使用退化维表;这与大数据领域事实表设计不一样; 思路:通过增加冗余存储,减少计算开销,提高使用效率; 4、事实表设计方法 Kimball 维度模型设计 4 步法:选择业务过程...如何确定事实表类型?

4.7K21

阿里巴巴大数据之路读书笔记——事实表设计八大原则

原则四 :在选择维度和事实之前必须先声明粒度 粒度声明是事实表设计中不可忽视重要一步,粒度用于确定实表中一行所表示业务细节层次,决定了维度模型扩展性,在选择维度和事实之前必须先声明粒度,且每个维度和事实必须与所定义粒度保持一致...在该事实表设计中,票支付金额和票折扣金额两个事实与表定义粒度一致,并且支持任意维度汇总,可以添加进该事实表中。...原则七 : 对事实 null 值要处理 对于事实表中事实度量为 null 值处理,因为在数据库中 null对常用数字型字段 SQL 过滤条件都不生效,比如大于、小于、等于、大于或等于、小于或等于,...原则八 :使用退化维度提高事实表易用性 Kimbal 维度建模中,通常按照星形模型方式来设计,对于维度获取采用是通过事实表关联专门维表方式,谨慎使用退化维度。...这样设计目的主要是为了减少下游用户使用时关联多个表操作,直接通过退化维度实现对事实表过滤查询、控制聚合层次、排序数据以及定义主从关系等。通过增加冗余存储方式减少计算开销,提高使用效率。

29420

SQL、Pandas、Spark:窗口函数3种实现

A1:由于是区分每名同学进行排序,所以需要依据uid字段进行partition;进一步地,按照成绩进行排序,所以order by字段即为score;最后,由于是要进行排名,所以配套函数选择row_number...A2:首先,仍然是依据uid字段进行partition;而后由于是要计算本月成绩与上月成绩差值,所以此次排序依据应该是date;进一步地,由于要计算差值,所以需要对每次月考成绩计算其前一行成绩(在按照...uid进行切分并按照date排序后,上月成绩即为当前行前一条记录),所以配套函数即为lag。...值得指出是,对于每名学生,当切分窗口不足指定窗口大小(即目标行数)时会实际数据进行聚合,例如学生A,1月31日对应近3次平均分即为本月成绩自身;2月28日对应近3次平均分即为本月成绩和上月成绩平均分...基本思路如下:首先仍然分别用uid和score字段进行分组和排序,而后通过对取值=1常数列num进行cumsum,即累加,即可获取分组排名结果。

1.4K30

大数据分析工具Power BI(七):DAX使用场景及常用函数

,我们新创建可视化展示页面,创建一个新表存储后续展示度量值,具体操作如下: 经过以上步骤操作可以在"字段"区域看到对应新建"度量值表",后续在各个场景中使用时需要选中该"度量值表"后再新建...度量值拖入到之前创建"多行卡"中,操作如下: 除了以上计数需求,在数据分析时我们还需要进行去重统计,这就需要用到DISTINCTCOUNT函数,DISTINCTCOUNT函数用法如下: DISTINCTCOUNT..."中,操作如下: 四、排序统计 在Power BI中要实现排序功能可以借助RANKX和ALL函数来实现。...RANKX函数功能是排序,其用法如下: RANKX(表,表达式) 复制 RANKX函数中"表"指的是需要排序表单,也可以是通过DAX表达式生成表单,一般我们可以搭配ALL来生成表单,"表达式"是指排序依据...统计月环比增长率 计算工资月环比增长率公式为:(本月工资-上月工资)/上月工资,如果想要根据本月工资获取上月工资我们就需要用到DATEADD函数,DATEADD函数用法如下: DATEADD(日期列,

8.1K32

深入浅出:MongoDB聚合管道技术详解

$lookup: 用于进行表连接操作,可以在一个集合中根据查询另一个集合数据。 4. 数据处理流程 当聚合管道开始执行时,首先会从指定集合中读取数据。然后,数据会按照定义顺序流经每个阶段。...第二个$group阶段再次客户ID分组,计算每个客户在每个产品上平均订单金额,并计算每个客户总销售额。...第三个和第四个sort及 limit阶段将结果平均订单金额降序排序,并限制输出为前5名客户。 第五个$lookup阶段将客户ID与客户集合中详细信息关联起来。...最后一个$group阶段客户ID分组,列出每个客户购买所有产品及其平均订单金额。 最后$sort阶段客户名称对结果进行排序。...数据筛选和过滤:使用筛选操作符对数据进行筛选,只保留满足条件数据。 数据排序:根据某个字段对数据进行排序,得到有序数据集。

25310

【Python全栈100天学习笔记】Day41 Django深入理解框架

default 字段默认值 editable 字段在后台模型管理或ModelForm中是否显示,默认为True error_messages 设定字段抛出异常时默认消息字典,其中包括null...related_name:用于获取关联对象关联管理器对象(反向查询),如果不允许反向,该属性应该被设置为'+',或者以'+'结尾。 to_field:指定关联字段,默认关联对象主键字段。...db_constraint:是否为创建约束,默认值为True。...on_delete:关联对象被删除时对应动作,可取值包括django.db.models中定义: CASCADE:级联删除。...db_tablespace 模型使用数据表空间 default_related_name 关联对象回指这个模型时默认使用名称,默认为_set get_latest_by 模型中可排序字段名称

2.2K30

MySQL快速入门(二)

''' SQL语句实现 # 使用sql语句实现,先建立不含表 create table dep( id int primary key auto_increment, dep_name...1、多对多关系创建表时候,不能像"一对多"关系那样创建,因为两边有对应关系,需要都写入,那么创建一个表另外一个表没有创建,写入就会报错 2、此时,需要第三张表来存储对应关系 SQL语句实现...''' 注意 字段建在任何一方都可以,但是推荐建在查询频率较高表中 SQL语句实现 create table peo( id int primary key auto_increment,...在创建表时候,需要注意先创建没有设置表 在插入数据时候,要确保被关联表中有数据 在插入新数据时候,字段只能填写被关联表中已经存在数据 在修改和删除被关联表中数据时候,无法直接操作..., 那么查询时候只能操作该字段相关数据,比如按post分组,那么name,id等字段不可直接获取 针对5.6需要自己设置sql_mode set global sql_mode = 'only_full_group_by

2.6K20

数据库MySQL——初识

,不详,83,1935,山东,beijing 单纯一条记录并没有任何意义,如果我们逗号作为分隔,依次定义各个字段意思,相当于定义表标题 id,name,sex,age,birth,born_addr...数据库中数据一定数据模型组织、描述和储存,具有较小冗余度、较高数据独立性和易扩展性,并可为各种 用户共享 3 什么是数据库管理系统 DataBase Management System 简称DBMS...在了解了Data与DB概念后,如何科学地组织和存储数据,如何高效获取和维护数据成了关键 这就用到了一个系统软件---数据库管理系统 如MySQL、Oracle、SQLite、Access、MS SQL...主键:主键是唯一。一个数据表中只能包含一个主键。你可以使用主键来查询数据。 用于关联两个表。 复合:复合(组合)将多个列作为一个索引,一般用于复合索引。...用户输入需要转账金额下确认; 5. 从后台数据库中减掉用户账户上对应金额; 6. 从后台数据库中给对方账户增加相应金额; 7.

29710

06.Django基础五之django模型层(二)多表操作

一 创建模型 表和表之间关系     一对一、多对一、多对多 ,用book表和publish表自己来想想关系,想想里面的操作,加约束和不加约束区别,一对一约束是在一对多约束上加上唯一约束...ordering 指定默认什么字段排序。...注意事项: 表名称myapp_modelName,是根据 模型元数据自动生成,也可以覆写为别的名称   id 字段是自动添加 对于字段,Django 会在字段名上添加"_id" 来创建数据库中列名...字段 ForeignKey 有一个 null=True 设置(它允许接受空值 NULL),你可以赋给它空值 None 。   ...但是我们就不能使用ORM相关方法了,所以我们单纯换成一个其他字段类型,只是单纯存着另外一个关联表主键值是不能使用ORM方法

2.7K20
领券