etl工作中的设计问题

http://blog.csdn.net/lili72

背景1 : 随着接入数据和处理数据的增加,生产脚本也越来越多,脚本由于前期的开发人员没有做到规范管理,导致脚本很乱。

解决方案:

1) 在lunix上规范目录,按平台,业务模块分目录存放。

2) 做好版本管理,提交到生产的脚本必须要commit到svn服务器。

3) lunix上的目录是反应到svn的目录映射。

背景2 :脚本中很多地方有范围,指标,参数值,怎么把这些做的更灵活,而不是写死?

解决方案:

1)尽量把中文或英文映射为数字,不仅节省存储资源,还使程序更灵活。

比如:平台有 pc电脑,手机等,那就可以分别用1代表pc电脑 2 代表手机 3 代表其它。同时做一个码表来解释对应的关系。

主页  0  a

电台  1  b

语种  2  c

华语  3  d

多级目录的解析

/主页/电台/语种/华语

/0/1/2/3

/1/2/3

/xxx/xxx/xxx/xxx

如果多级目录有变化,怎么自动适应目录变化或者 回归二进制本质,用二进制表示。

2)  灵活应用参数列表,做一个的参数码表,动态生成hql语句。

比如:现在要分时段统计,用户出现次数,时段如下:

早上    6:00 -8:00

上午    8:00-12:00

中午    12:00-14:00

下午    14:00-18:00

晚上    18:00-23:00

深夜     23:00-00:00

凌晨     00:00-6:00

做一个码表   id  comment   time_region   val   par1  par2

1   早上      6:00 -8:00     1    6     8

2   上午      8:00-12:00     2    8     12

3   中午      12:00-14:00    3    12    14

4   下午      14:00-18:00    4    14    18

5   晚上      18:00-23:00    5    18    23

6   深夜      23:00-24:00    6    23    24

7   凌晨      00:00-6:00     7     0     6

读取该表,动态拼hql ,用后面的val分别代表这些时段。不管以后时段怎么修改,只要修改码表就行了。

比如要写如下的hive_sql

insert overwrite table common.order
select
   userid
  ,case
        when hour_time>=0  and hour_time<=2  then '00_03'
        when hour_time>=3  and hour_time<=5  then '03_06'
        when hour_time>=6  and hour_time<=7  then '06_08'
        when hour_time>=8  and hour_time<=11  then '08_12'
        when hour_time>=12 and hour_time<=13  then '12_14'
        when hour_time>=14 and hour_time<=17  then '14_18'
        when hour_time>=18 and hour_time<=23  then '18_24'
        else '0'
      end
        as hour_time
   ,count(distinct dt) hour_dt_num
 where dt >='2014-10-01'
 and dt<='2014-10-30'
 group by userid,
 case when hour_time>=0  and hour_time<=2  then '00_03'
        when hour_time>=3  and hour_time<=5  then '03_06'
        when hour_time>=6  and hour_time<=7  then '06_08'
        when hour_time>=8  and hour_time<=11 then '08_12'
        when hour_time>=12 and hour_time<=13 then '12_14'
        when hour_time>=14 and hour_time<=17 then '14_18'
        when hour_time>=18 and hour_time<=23 then '18_24'
        else '0'
      end 

可以写成这样子:

#!/bin/bash
#
# add by lishc  2014-11-25

mysql=`which mysql`
user="root"
password="123"
database="test"
table="parm"

command="select par1,par2,id from test.$table "
$mysql -u${user} -p${password}  -e "${command}" >m.txt

###初始化
echo "       insert overwrite table common.order">mysql.sql
echo "               select     ">>mysql.sql
echo "                      userId  " >>mysql.sql
echo "                     case  ">>mysql.sql

sed -i -e '1d' m.txt
cat m.txt |while read line
do
  par1=$(echo "${line}"|awk -F ' ' '{print $1}')
  par2=$(echo "${line}"|awk -F ' ' '{print $2}')
  id=$(echo "${line}"|awk -F ' ' '{print $3}')
   echo "par1: ${par1}"
   echo "par2: ${par2}"
   echo "                      when hour_time >=${par1}  and hour_time<=${par2}  then '${id}' ">>mysql.sql
Done

3) 所有的脚本存放在数据库中,用程序解析参数,并调用执行。

可参考kettle设计:

每个步骤组件化:输入,输出,执行脚本,执行sql,管理执行顺序。

由于ETL过程或数据分析模型,都是一些有序的sql或脚本操作。

时间: 2024-11-02 13:47:59

etl工作中的设计问题的相关文章

011-黑盒测试的测试用例常见设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用

黑盒测试的测试用例常见设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用. 1)等价类划分 等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的.并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试.因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据.取得较好的测试结果.等价类划分可有两种不同的情况:有效等价类和无效等价类. 2)边界值分析法 边界值分析方法是

程序员工作中会遭遇的天花板 工作中不由你控制的一些地方(转)

在我看来,程序员做的是开创性的工作.互联网的发展不但推动了技术的发展,而且带来了技术的普及.因此程序员不比以前,现在要找某方面的资料是很easy的事情了.看过大量的资料,各种新颖的技术方案和解决思路,不心动那是不可能的.OK,想用某某某框架,想用某某某技术,但是,因为各种原因,没办法应用到自己开发的项目中.这就是一个天花板. 在工作中往往有各种各样的天花板,比如绩效考核,项目进度,被打断的思路,技术架构.因为你不是做决定的那个人,所以你就有天花板. 绩效考核 很多公司都有绩效考核,在我看来绩效考

多维度工作的数据设计到使用案例教程,采用OnenNote、MindManager 等

摘要:很多时候我们的事情并非1-3个维度而是N个维度,但是通常人对多维度的事情容易遗漏,本文讲述在多维度的工作或事件处理时,如何快速制作多维自查.检查.任务项等.读者请举一反三!本文的方法实际上适合很多场景,比如UI设计图需要在多个分辨率下.开发对应多个系统多个浏览器时.白盒测试人员对应不同端时,是不是软件开发也都可以,几乎可以用在任何多维度的事件上-.. 一.整理收集维度 - 维度分析与设计 表1:维度设计表 最好是小组人员坐在一起,头脑风暴一下,把我们工作中可能遇到的维度都整理出来,就如上表

产品经理工作中常见的这3个问题,你遇到过吗?

周末参加了一个产品实践活动,在产品马拉松之后讲师提出了关于产品经理工作中经常会遇到的3个问题,这三道题可以作为求知面试准备也可以作为招聘新人时的问题库. 以下是笔者对三个问题给出的两种答案,一种是理想化的,一种是接地气的.当然,两种答案都并非标准答案,最为一种开放性问题考察的更多的是关于产品实践工作过程中方式方法,并没有唯一标准答案,本文中所有答案仅供参考. 1.你的团队中来了一个新人,针对目前的产品有不同的意见,针对这种情况你如何应对? 理想中PM 对于产品新人,先让新人了解产品前期的发展背景

射频工程师如何在实际工作中学习射频

当射频工程师知道自己的工作职责之后,我们应该如何在工作和实践中进一步学习它呢?现实工作中有很多案例,不是我们通过多少多少的积分微积分方程就可以轻松解决的.这不是说微波方程在实际工作毫无意义,而是说的很多人重复的那一点,"理论要靠实践来检验". 踏入社会工作的第一天,不是你大功告成的第一天,而是你真正学习课本的第一天,是你检验课堂知识的第一天.很多朋友都希望毕业后马上进入一个好的公司,好的部门工作,想搞技术的第一选研究所,选到好公司的,想进公司中央研究部门,进到差一点的公司的也想起码得进

用户研究工作中的14个经典方法

历时2个多月的编撰和设计,#用研方法传遍中国#在今天将告一段落;经过仔细的梳理与总结,@百度商业UED 的用户研究工程师们将用户研究工作中的经典方法一一总结出来,与大家分享讨论,感谢和我们微博互动的同学们,也欢迎更多对用户体验感兴趣的同学加入讨论,大家共同努力.共同进步! 1 .[眼动&脑电研究] 将眼动仪和脑电设备联机同步,可以知道用户是如何看的,以及当时的心理活动. 2 .[可用性测试] 想知道可用测试是什么?可用性测试的目的&作用?适用的场景?测试所需的人数? 3.[信噪比原则] 如

新手产品经理工作中常遇到的25个困惑问题

本文和大家分享的主要是新手产品经理工作中常见的一些问题,一起来看看吧,希望对大家有所帮助. 1.竞品分析的目的有哪些? 论证自己的判断是对的,补充自己的欠缺,知道不知道的. 2.在进行从0-1产品规划的时候和进行产品迭代的时候竞品分析的目的有何不同? 0-1的时候主要是看战略,来论证自己做的这个东西是有市场价值.有用户价值的. 迭代时候竞品分析主要是看体验和功能,或者称之为具体的好与坏.对与错. 3.竞品分析是如何验证假设的? 说下的理解哦,首先假设的东东是要量化出来的,数量上的具体和每一个的数

用zrender实现工作流图形化设计(附范例代码)

公司研发的管理系统有工作流图形化设计和查看功能,这个功能的开发历史比较久远.在那个暗无天日的年月里,IE几乎一统江湖,所以顺理成章地采用了当时红极一时的VML技术. 后来的事情大家都知道了,IE开始走下坡路,VML这个技术现在早已灭绝,导致原来的工作流图形化功能完全不能使用,所以需要采用新技术来重写工作流图形化功能. 多方对比之后,决定采用zrender库来实现(关于zrender库的介绍,请看http://ecomfe.github.io/zrender/),花了一天的时间,终于做出了一个大致

《代码大全》学习摘要(五)软件构建中的设计(下)

这次的学习内容主要是设计过程中的启发式方法和设计实践中的一些经验. 对于具体的编程工作来说,期待确定性的行为是很正常的,由于软件设计是非确定性的,灵活熟练地运用一组有效的启发方法(试探法),便成了合理的软件设计的核心工作. 1.在确定设计方案时,首选且最流行的方法是面向对象的方法,此方法的要点是辨别现实世界中的对象以及人造的对象.这个过程分为以下几步:辨识对象及其属性.确定可以对各个对象进行的操作.确定各个对象能对其他对象进行的操.确定对象的哪些部分对其他对象可见.定义每个对象的公开接口. 2.