漫谈数据仓库之SCD(缓慢变化维度)

作者:JerryXia | 发表于 , 阅读 (20)
0x00 前言本文会分享数据仓库中和缓慢变化维度相关的内容。在看之前建议回顾一下和维度建模相关的知识点,可参考这篇博客:《漫谈数据仓库之维度建模》。
为什么会分享这个听起来很奇怪的东西?因为站在的笔者的视角中,只要是做数据仓库的小伙伴们,在工作中基本上都会接触和维度建模相关的内容,而谈到维度建模,就少不了会和维度表打交道。我们要谈的就是维度表相关的知识点。
在正式开始之前,先解释一下什么是缓慢变化维度。笔者个人理解,缓慢变化维度其实就是指在维度表中那些会随着时间变化的字段,比如用户基本资料。
注:缓慢是一个相对的概念。与缓慢变化的纬度相比,数据增长快速是事实表
0x01 什么是SCD?SCD(Slowly Changing Dimensions),中文一般翻译成“缓慢变化维”。
缓慢变化维的提出是因为在现实世界中,维度的属性并不是静态的,它会随着时间的流失发生缓慢的变化。这种随时间发生变化的维度我们一般称之为缓慢变化维,并且把处理维度表的历史变化信息的问题称为处理缓慢变化维的问题,有时也简称为处理SCD的问题。
0x02 如何处理SCD问题在《数据仓库工具箱》这本书中一共列...阅读全文

 【Kafka】LinkedIn开源分布式消息系统Kafka ---用途、系统架构与应用 | Yet Another Thoughts 

作者:JerryXia | 发表于 , 阅读 (15)
导论互联网公司通常每天都会生成海量的日志数据。文中举了几个例子:Facebook每天会聚集多达几乎6TB的日志数据,来自各式各样的用户活动记录;中国移动每天也会收集6~8TB的通话记录。通常,这些日志数据包括:  
用户的活动事件,包括登录,浏览,点击,”喜欢“,分享,评论与搜索查询;各项操作指标,包括服务的调用栈记录,调用延迟,错误, 还有系统运行指标,包括每台机器的CPU,内存,网络,或者硬盘利用率等。这些日志数据是数据分析的一个重要部分,用于用户参与度、系统利用率及其他指标的分析计算。传统的日志分析工作常常是离线运算的。许多相关工作已经对离线日志分析提供了非常完善的工具,包括Facebook的Scribe(已不再更新),Yahoo的Data Highway,Cloudera的Flume,等。这些工具首要设计成收集日志数据,并载入到数据仓库或者Hadoop集群中用来离线处理。然而,在LinkedIn及其他的许多应用场景中,除了离线的日子数据分析,在低延迟下提供支持实时的日志数据分析的需求日益强烈。互联网应用中,越来越多地将这些日志数据分析工作融入到生产数据流水线中做到实时与低响应...阅读全文

 Just be Pythonic ---Python PEP-8编码规范笔记 | Yet Another Thoughts 

作者:JerryXia | 发表于 , 阅读 (24)
PEP-8是由包括Guido van Rossum(Python语言创始人)在内的多名权威人士撰写的python编码规范。Python因为其简洁、接近自然语言的语法、强制缩进、高效的开发效率、一种方式做一种事情的特点成为了一门流行的动态语言,甚至专门有一个词汇——“pythonic”来形容一种优雅、典型的编码方式。那么,问题来了,如何be pythonic?来看看Guido怎么说。  
Guido的看法之一是,代码被阅读的次数大于它被写的次数。像PEP-8这样的规范指南目的是提高代码的可读性,并且与Python代码的整体代码环境一致。编码指南在于一致性。与风格指南一致很重要,与项目代码一致更重要,一个模块与一个方法中的一致性更更重要。最困难的其实是,自己可以做决定,什么时候应该不考虑一致性,什么时候规范不适用。尤其是,不应当只是为了遵从PEP而破坏了向后兼容性。还有一些规则可以遵循,以下情况可以忽略编码规范:  
当遵循了编码规范后代码可读性变差,甚至对习惯阅读符合编码规范的代码的时候。可能因为历史原因,需要与项目其他的不符合规范的代码保持一致。同时,这也是一个清理其他人造成的一团...阅读全文

 Python性能优化资源汇总(持续更新) | Yet Another Thoughts 

作者:JerryXia | 发表于 , 阅读 (17)
性能分析工具自带干粮——profile, cProfile, hotshot####profile/cProfileprofile是python的标准库,而cProfile是对应的C扩展。它们的reference点击这里。cProfile/profile在py2与py3中都可以使用。可以在代码中使用cProfile:
import cProfile#以下调用运行函数somefunc(),并将相关数据记录到log_file.pyprofcProfile.run('somefunc()', 'log_file.pyprof')小程序也可以直接通过命令行调用cProfile模块执行:  
python -m cProfile -o profile_data.pyprof script_to_profile.pyhotspothotshot是高性能的Profiling数据采集工具,其运行时对程序效率的影响很小,但会产生巨大的运行记录,分析也比较慢。Python 3中并没有它,若无特殊需求,请使用cProfile。示例代码:  
import hotspotprofiler = hotsp...阅读全文

 Python 3.0 与Python 2.x的新意之处 | Yet Another Thoughts 

作者:JerryXia | 发表于 , 阅读 (43)
Python 3.0于2008年公布,而2.x版本的最新版本2.7是在2010年中发布的,声明是2.x版本最后的扩展更新。在3.x版本进入一个稳定、活跃的开发阶段并且稳定版更新超过5年后包括2014年的3.4版本后,2.x分支将不会再更新。意味着所有最新的标准库更新默认将只会更新3.x分支的版本。3.x版本的主要改进包括对Unicode的更好的支持,语言核心几个方面的改变会给新学者更容易学习,整个语言更加的一致,一些旧的弊端被移除了。  
下面根据Python创始人Guido van Rossum的文章What’s New In Python 3.0,说明Python 2.6与Python 3.0的主要区别。
1. print不再是关键字,而是一个print()函数#Old:print "The answer is", 2*2#New:print("The answer is", 2*2)#Old:print x,           # Trailing comma suppresses newline#New:print(x, end=" ")  # Appends a spa...阅读全文