这种性质的博客就类似于姐姐的启示录,算是只是一种记录性质的东西了。

周一

下午前去报到,大约只是熟悉了一下环境。由潘哥首先带我。潘哥给介绍了组内的基本情况。然后首先是让我尝试安装Oracle Linux,基本上是等待虚拟机接近一个小时的读条,也是借机再翻了一下关于Oracle的概念,在此前是被潘哥问的PLSQL的关键字和函数一脸懵逼。所以赶紧临时查了查。

周二

上午潘哥交给我一个SQL脚本,大致是一个求坐席数量估计。通过这个脚本了解到大致的数据分析问题的模型。首先是将所有所需的数据都抽取出来,然后再在一个表内进行查询。

其实这里关于数据的临时存储我觉得有些疑惑,潘哥所使用的方式是不断新建表格然后delete,这样的花销应该会比直接使用PLSQL变量会更大。问过之后也说是习惯的问题。(大概分析的话,性能不是非常重要?)

一个关于UPDATE的问题

之后还被出了一个关于UPDATE的问题作为思考。大致整理一下问题是这样的:

如何令如果表A和表B的 condA和 condB 列相等时,令表A的数据列 colA 更新为表B的数据列 colB?

最初写的update语句是这样的:

1
update A set A.colA = (select colB from B where A.condA == B.condB);

但是这样是错误的,因为这个语句的作用范围是对A中的所有记录都实现了的。所以对于没有匹配上A.condA == B.condB的语句。此时select colB from B where A.condA == B.condB的结果是NULL,而我们就直接地赋给了A.colA。这会使得原本有数据但是未匹配上的colA的数据的丢失。所以正确的SQL语句应该是

1
2
3
update A 
set A.colA = (select colB from B where A.condA == B.condB)
where exists (select colB from B where A.condA == B.condB);

周三

周二下午被安排了一个任务是修改kettle的作业配置文件。原本做法是要在kettle的GUI界面里进行鼠标点击的配置,然后总共需要配2k多张表结构的文件。我感到非常绝望,于是决定写个脚本进行自动化。之后大概是花了一天的时间,堪堪达成目的。其中遇到了一些问题。

首先是解析xml文件。kettle的配置文件都是xml格式的。最初是直接使用python的xml库,但是对于其中的三种解析方式我都不是非常熟悉,之后就换用了BeautifulSoup。在这里又遇到了不知道如何将文本转换为Tag对象的尴尬,幸而效率不是非常重要,因而直接使用BeautifulSoup再解析一遍字串然后append进去就好。

之后是SQL文件的解析问题,因为只给了一个表名,而我必须从SQL文件中找出这个表的定义。我最初想到的就是sqlparse直接解析整个sql文件。但是我发现这样的时间花销也太长了,所以我决定还是通过正则式对文件进行格式化之后,直接按特定格式读文件。

然后是一个坑:也就是XML当中的空白字符其实是有意义的。我最初使用了BeautifulSoup.pretiffy方法,使生成的xml进行了格式化,最后所有textnode的名称都没有对应上。但是就因为下面遇到的问题,让我一直没有发现。

另外实际上kettle的XML当中的特殊字符编码也是一个很大的问题。因为要避免SQL语句中出现<符号干扰xml的语法,所以在kettle中直接就将所有的非英文字符变成了 HTML Entity 的NCR编码。中文字符的出现不会对kettle解析xml造成影响;而使用BeautifulSoup解析之后XML中的NCR编码直接又变成了中文字符。最后是重新写了一个脚本用正则剔掉了所有中文换成NCR,当然这个脚本最后没有用上就是了。

(现在回头想想这种程序也能用掉一天也是很惭愧。

周四 & 周五

这两天的效率十分低下,因为在配置环境;而且居然要两个人同用一台电脑就很痛苦。

首先是安装hue,讲道理是异常简单的一个工作,但是因为是两个人使用同一个而且我根本不熟悉各个主机上的配置,花了大概一天。

只有一个坑,需要额外改Hadoop的配置使得hue能访问到hdfs中的文件。然而由于hue与Hadoop之间的整合做的不是很好,hue没法及时获取Hadoop的改动,所以改了配置之后Hdfs的NameNode还需要重启一下。

之后再装Impala。最初的方式是通过Ambari的web界面进行安装,然后就发现了巨坑。这个Ambari之前的yum源没有配好原来,而且缺了一大堆包;无奈企业内网不能直接从网上进行同步,只好从外网下好包文件再用U盘拷到内网并配置源。这个过程需要更新原有的repo数据,也即在源中的repodata/repomd.xml文件,使用createrepo命令就能做到这一点。

不过总之这两天倒是查了不少资料,对于一些基本的概念也算有所了解了,收获也不小。

总结

讲道理是有点失望。这一周里没有碰到什么核心的工作,数据分析建模的部分基本没有遇到。而且后两天工作中感觉有些敷衍,同事只要能跑起来就行的态度让我感觉会有一些隐患。

对于kettle的调度问题我不知道所使用的方式是什么,但是原生的调度恐怕花销就有点太大了。这是一个风险,但是好像没有怎么重视这个问题,也不知道是不是我没有接触到的原因。

大数据这个部分怎么说,感觉相当混乱…没有过程也没有组织。存在一些问题:

  • 有些情况不需要直接操作数据的,也在数据上进行直接的操作:会有效率和安全性的一系列问题。
  • 没有非常明确的分工,导致职责的混乱。