Teradata数据库行转列函数简介 (teradata数据库行转列函数)

随着数据量的不断增加,越来越多的企业开始依赖数据分析进行业务决策,数据分析变得愈加重要。Teradata作为目前全球更大的面向企业级联机分析处理平台,可以为企业提供可靠、可扩展、高效的数据解决方案。在Teradata数据库中,有一种行转列函数,能够将数据表的行数据转化为列数据进行分析,这种函数的灵活性和高效性,可以为企业数据分析提供更便捷的解决方案。

行转列的意义

在数据分析领域中,行数据和列数据代表着不同的数据类型,具有不同的分析方法和应用场景。在Teradata数据库中,一般情况下,数据表中的数据存储都是以行数据的形式存储。但是,在实际业务中,需要对特定的数据展开某一列进行分析或计算。而此时,行转列函数就派上了用场。

行转列函数的应用场景

1.多条件的查询

在实际业务中,很多时候需要对数据表中的多个条件进行查询,而这些条件一般都是存储在数据表的行数据中。如果采用传统查询方法,需要查找多次,就会造成系统性能的瓶颈。而行转列函数则可以将多个条件按照某个列进行转化,形成一个新的表或属性,这样只需要完成一次查询操作即可,大大提高了效率。

2.数据透视表中的宽表转化

在处理数据透视表中的宽表时,有时需要将某一列变为行的形式,这时候就可以使用行转列函数,将表格宽度缩小,加强观察和分析。

3.处理半规范化数据

在实际业务中,很多数据是半规范化的,如果直接对其进行分析,会导致数据冗余、重复等问题,影响分析效果。行转列函数则可以将这些数据进行规范化处理,便于分析。

行转列函数的用法示例

Teradata数据库中提供了以下两个行转列的函数:

1. COLLECT(列转行)

COLLECT函数能够将一列中的数值数据汇总起来,生成一行数据。具体的语法如下:

COLLECT(expr [ORDER BY ordering_cols] [NULLS FIRST | LAST])

其中,expr表示需要汇总的列名;order by 标识表示排序方式,可以不写;Nulls First | Last标识表示空值排在前面还是排在后面。

2. EXPAND(行转列)

EXPAND函数能够将行数据变化为列数据。具体的语法如下:

EXPAND ON expression USING tablefunction (expr)

其中,expression表示分组的标识,可以用于分组计算之类的操作;tablefunction表示需要使用的处理函数,可以是任何可以接受参数并返回结果表的函数;expr表示需要处理的列名或表达式。

行转列函数是Teradata数据库中的一个重要工具,它能够快速、高效地将行数据进行转化,变成列数据进行分析。行转列函数能够在处理多条件查询、数据透视表、半规范化数据等实际问题时发挥重要的作用。熟练掌握行转列函数的使用方法,能够让数据分析工作更加高效和便捷。

相关问题拓展阅读:

大数据分析工具有哪些,有什么特点?

常用的数据分析工具有如下几个

  SAS

  一般用法。SAS由于其功能强大而且可以编程,很受高级用户的欢迎。也正是基于此,它是最难掌握的软件之一。使用SAS时,你需要编写SAS程序来处理数据,进行分析。如果在一个程序中出现一个错误,找到并改正这个错误将是困难的。

  数据管理。在数据管理方面,SAS是非常强大的,能让你用任何可能的方式来处理你的数据。它包含SQL(结构化查询语言)过程,可以在SAS数据集中使用SQL查询。但是要学习并掌握SAS软件的数据管理需要很长的时间,在Stata或SPSS中,完成许多复杂数据管理工作所使用的命令要简单的多。然而,SAS可以同时处理多个数据文件,使这项工作变得容易。它可以处理的变量能够达到32,768个,以及你的硬盘空间所允许的更大数量的记录条数。

  统计分析。SAS能够进行大多数统计分析(回归分析,logistic回归,生存分析,方差分析,因子分析,多变量分析)。SAS的更优之处可能在于它的方差分析,混合模型分析和多变量分析,而它的劣势主要是有序和多元logistic回归(因为这些命令很难),以及稳健方法(它难以完成稳健回归和其他稳健方法)。尽管支持调查数据的分析,但与Stata比较仍然是相当有限的。

  绘图功能。在所有的统计软件中,SAS有最强大的绘图工具,由SAS/Graph模块提供。然而,SAS/Graph模块的学习也是非常专业而复杂,图形的制作主要使用程序语言。SAS 8虽然可以通过点击鼠标来交互式的绘图,但不象SPSS那样简单。

  总结。SAS适合高级用户使用。它的学习过程是艰苦的,最初的阶段会使人灰心丧气。然而它还是以强大的数据管理和同时处理大批数据文件的功能,得到高级用户的青睐。

  Stata

  一般用法。Stata以其简单易懂和功能强大受到初学者和高级用户的普遍欢迎。使用时可以每次只输入一个命令(适合初学者),也可以通过一个Stata程序一次输入多个命令(适合高级用户)。这样的话,即使发生错误,也较容易找出并加以修改。

  数据管理。尽管Stata的数据管理能力没有SAS那么强大,它仍然有很多功能较强且简单的数据管理命令,能够让复杂的操作变得容易。Stata主要用于每次对一个数据文件进行操作,难以同时处理多个文件。随着Stata/SE的推出,现在一个Stata数据文件中的变量可以达到32,768,但是当一个数据文件超越计算机内存所允许的范围时,你可能无法分析它。

  统计分析。Stata也能够进行大多数统计分析(回归分析,logistic回归,生存分析,方差分析,因子分析,以及一些多变量分析)。Stata更大的优势可能在于回归分析(它包含易于使用的回归分析特征工具),logistic回归(附加有解释logistic回归结果的程序,易用于有序和多元logistic回归)。Stata也有一系列很好的稳健方法,包括稳健回归,稳健标准误郑缓配的回归,以及其他包含稳健标准误估计的命令。此外,在调查数据分析领域,Stata有着明显优势,能提供回归分析,logistic回归,泊松回归,概率回归等的调查数据分析。它的不足之处在于方差分析和传统的多变量方法(多变量方差分析,判别分析等)。

  绘图功能。正如SPSS,Stata能提供一些命令或鼠标点击的交互界面来绘图。与SPSS不同的是它没有图形编辑器。在三种软件中,它的绘图命令的句法是最简单的,功能却最强大。图形质量也很好,可以达到出版的要求。另外,这些图形很好的发挥了补充统计分析的功能,例如,许多命令可以简化回归判别过程中散点图的制作。

  总结。Stata较好地实现了使用简便和功能强大两者的结合。尽管其简单易学,它在数据管理和许多前沿统计方法中的喊指功能还是非常强大的。用户可以很容易的下载到别人已有的哪模程序,也可以自己去编写,并使之与Stata紧密结合。

  SPSS

  一般用法。SPSS非常容易使用,故最为初学者所接受。它有一个可以点击的交互界面,能够使用下拉菜单来选择所需要执行的命令。它也有一个通过拷贝和粘贴的方法来学习其“句法”语言,但是这些句法通常非常复杂而且不是很直观。

  数据管理。SPSS有一个类似于Excel的界面友好的数据编辑器,可以用来输入和定义数据(缺失值,数值标签等等)。它不是功能很强的数据管理工具(尽管SPS 11版增加了一些增大数据文件的命令,其效果有限)。SPSS也主要用于对一个文件进行操作,难以胜任同时处理多个文件。它的数据文件有4096个变量,记录的数量则是由你的磁盘空间来限定。

  统计分析。SPSS也能够进行大多数统计分析(回归分析,logistic回归,生存分析,方差分析,因子分析,多变量分析)。它的优势在于方差分析(SPSS能完成多种特殊效应的检验)和多变量分析(多元方差分析,因子分析,判别分析等),SPSS11.5版还新增了混合模型分析的功能。其缺点是没有稳健方法(无法完成稳健回归或得到稳健标准误),缺乏调查数据分析(SPSS12版增加了完成部分过程的模块)。

  绘图功能。SPSS绘图的交互界面非常简单,一旦你绘出图形,你可以根据需要通过点击来修改。这种图形质量极佳,还能粘贴到其他文件中(Word 文档或Powerpoint等)。SPSS也有用于绘图的编程语句,但是无法产生交互界面作图的一些效果。这种语句比Stata语句难,但比SAS语句简单(功能稍逊)。

  总结。SPSS致力于简便易行(其口号是“真正统计,确实简单”),并且取得了成功。但是如果你是高级用户,随着时间推移你会对它丧失兴趣。SPSS是制图方面的强手,由于缺少稳健和调查的方法,处理前沿的统计过程是其弱项。

  总体评价

  每个软件都有其独到之处,也难免有其软肋所在。总的来说,SAS,Stata和SPSS是能够用于多种统计分析的一组工具。通过Stat/Transfer可以在数秒或数分钟内实现不同数据文件的转换。因此,可以根据你所处理问题的性质来选择不同的软件。举例来说,如果你想通过混合模型来进行分析,你可以选择SAS;进行logistic回归则选择Stata;若是要进行方差分析,更佳的选择当然是SPSS。假如你经常从事统计分析,强烈建议您把上述软件收集到你的工具包以便于数据处理。

我推荐一些常用的大数模丛山据分析工具

1.专业的大数据分析工具

2.各种Python数据可视化第三方库

3.其它语言的数据旦中可视化框架

一、专业的大数据分析工具

1、FineReport

FineReport是一款纯Java编写的、集数据展示(报表)和数据录入(表单)功能于一身的企业级web报表工具,只需要简单的拖拽操作便可以设计复杂的中国式报表,搭建数据决策分析系统。

2、FineBI

FineBI是新一代自助大数据分析的商业智能产品,提供了从数据准备、自助数据处理、数据分析与挖掘、数据可视化于一体的完整解决方案,也是我比较推崇的可视化工具之一。

FineBI的使用感同Tableau类似,都主张可视化的探索性分析,有点像加强版的数据透视表。上手简单,可视化库丰富。可以充当数据报表的门户,也可以充当各业务分析的平台。

二、Python的数据可视化第三方库

Python正慢慢地成为数据分析、数据挖掘领域的主流语言之一。在Python的生态里,很多开发者们提供了非常丰富的、用于各种场景的数据可视化第三方库。这些第三方库可以让我们结合Python语言绘制出漂亮的图表。

1、pyecharts

Echarts(下面会提到)是一个开源免费的javascript数据可视化库,它让我们可以轻松地郑带绘制专业的商业数据图表。当Python遇上了Echarts,pyecharts便诞生了,它是由chenjiandongx等一群开发者维护的Echarts Python接口,让我们可以通过Python语言绘制出各种Echarts图表。

2、Bokeh

Bokeh是一款基于Python的交互式数据可视化工具,它提供了优雅简洁的方法来绘制各种各样的图形,可以高性能的可视化大型数据集以及流数据,帮助我们制作交互式图表、可视化仪表板等。

三、其他数据可视化工具

1、Echarts

前面说过了,Echarts是一个开源免费的javascript数据可视化库,它让我们可以轻松地绘制专业的商业数据图表。

大家都知道去年春节以及近期央视大规划报道的百度大数据产品,如百度迁徙、百度司南、百度大数据预测等等,这些产品的数据可视化均是通过ECharts来实现的。

2、D3

D3(Data Driven Documents)是支持SVG渲染的另一种JavaScript库。但是D3能够提供大量线性图和条形图之外的复杂图表样式,例如Voronoi图、树形图、圆形集群和单词云等。

数据分析再怎么说也是一个专业的领域,没有数学、统计学、数据库这些知识的支撑,对于我们这些市场、业务的人员来说,难度真的不是一点点。从国外一线大牌到国内宣传造势强大的品牌,我们基本试用了一个遍,总结一句话“人人都是数据分析师”这个坑实在太大,所有的数据分析工具知早无论宣传怎样,都有一定的学习成本,尤其是要深入业务实际。今天就我们用过的几款工具简单总结一下,与大家分享。

1、Tableau

这个号称敏捷BI的扛把子,魔力象限常年位于领导者象限,界面清爽、功能确实很强大,实至名归。将数据拖入相关区域,自动出图,图形展示丰富,交互性较好。图形自定义功能强大,各种图形参数配置、自定义设置可以灵活设置,具备较强的数据处理和计算能力,可视化分析、交互式分析体验良好。确实是一款功能强大、全面的数据可视化分析工具。新版本也集成了很多高级分析功能,分析更强大。但是基于图表、仪表板、故事报告的逻辑,完成一个复杂的业务汇报,大量的图表、仪表板组合很费事。给领导汇报的PPT需要先一个个截图,然后再放到PPT里面。作为一个数据分析工具是合格的,但是在企业级这种应用汇报中有点局限。

2、PowerBI

PowerBI是盖茨大佬推出的工具,我们也兴奋的开始试用,确实完全不同于Tableau的操作逻辑,更符合我们普通数据分析小白的需求,操作和Excel、PPT类似,功能模块划分清晰,上手唯猛缓真的超级快,图形丰富度和灵活性也是很不错。但是说实话,毕竟刚推出,系统BUG很多,可视化分析的功能也比较简单。虽然有很多复杂的数据处理功能,但是那是需要有对Excel函数深入理解应用的基础的,所以要支持复杂的业务分析还需要一定基础。不过版本更新倒是很快,可以等等新版本。

3、Qlik

和Tableau齐名的数据可视化分析工具,QlikView在业界也享有很高的声誉。不过Qlik Seanse产品系列才在大陆市场有比较大的推广和应用。真的是一股清流,界面简洁、流程清晰、操作简单,交互性较好,真的是一款简单易用的BI工具。但是不支持深度的数据分析,图形计算和深度计算功能缺失,不能满足复杂的业务分析需求。

最后将视线聚焦国内,目前搜索排名和市场宣传比较好的也很多,永洪BI、帆软BI、BDP等。不过经过个人感觉整体宣传大于实际。

4、永洪BI

永洪BI功能方面应该是相对比较完善的,也是拖拽出图,有点类似Tableau的逻辑,不过功能与Tableau相比还是差的不是一点半点,但是操作难度居然比Tableau还难。预定义的分析功能比较丰富,图表功能和灵活性较大,但是操作的友好性不足。宣传拥有高级分析的数据挖掘功能,后来发现就集成了开源的几个算法,功能非常简单。而操作过程中大量的弹出框、难以理解含义的配置项,真的让人很晕。一个简单的堆积柱图,就研究了好久,看帮助、看视频才搞定。哎,只感叹功能藏得太深,不想给人用啊。

5、帆软BI

再说号称FBI的帆软BI,帆软报表很多国人都很熟悉,功能确实很不错,但是BI工具就真的一般指模般了。只能简单出图,配合报表工具使用,能让页面更好看,但是比起其他的可视化分析、BI工具,功能还是比较简单,分析的能力不足,功能还是比较简单。帆软名气确实很大,号称行业之一,但是主要在报表层面,而数据可视化分析方面就比较欠缺了。

6、Tempo

另一款工具,全名叫“Tempo大数据分析平台”,宣传比较少,2023年Gartner报告发布后无意中看到的。是一款BS的工具,申请试用也是费尽了波折啊,永洪是不想让人用,他直接不想卖的节奏。

之一次试用也是一脸懵逼,不知道该点那!不过抱着破罐子破摔的心态稍微点了几下之后,操作居然越来越流畅。也是拖拽式操作,数据可视化效果比较丰富,支持很多便捷计算,能满足常用的业务分析。最最惊喜的是它还支持可视化报告导出PPT,彻底解决了分析结果输出的问题。深入了解后,才发现他们的核心居然是“数据挖掘”,算法十分丰富,也是拖拽式操作,我一个文科的分析小白,居然跟着指导和说明做出了一个数据预测的挖掘流,简直不要太惊喜。掌握了Tempo的基本操作逻辑后,居然发现他的易用性真的很不错,功能完整性和丰富性也很好。不过没有宣传也是有原因的,系统整体配套的介绍、操作说明的完善性上还有待提升。

强烈推荐楼主下载FineBI!从技术上看,大数据与云计算的关系就像一枚硬币的正反面一样密不可分。大数据必然无法用单台的计算机进行处理,慧咐必须采用分布式架构。它的特色在于对海量数据进行分布式数据挖掘,但它必须依托云计算的分布式处理、分布式数据库和云存储、虚拟化技术。随着云时代的来临,大数据(Big data)也吸引了越来越多的关注。《前判纯著云台》的分析师团队认为,大数据(Big data)通常用来形容一个公司创造的大量非结构化数据和半结构化数据,这些数据在下载到关系型数据库用于冲野分析时会花费过多时间和金钱。大数据分析常和云计算联系到一起,因为实时的大型数据集分析需要像MapReduce一样的框架来向数十、数百或甚至数千的电脑分配工作。

万字详解ETL和数仓建模

ETL是数据抽取(Extract)、转换(Transform)、加载(Load )的简写,它是将OLTP系统中的数据经过抽取,并将不同数据源的数据进行转换、整合,得出一致性的数据,然后加载到数据仓库中。简而言之ETL是完成从 OLTP系统到OLAP系统的过程

数据仓库(Data Warehouse DW)是基于OLTP系统的数据源,为了便于多维分析和 多角度展现将其数据按特定的模式进行存储而建立的关系型数据库,它不同于多维数据库,数据仓库中的数据是细节的,集成的,数据仓库是面向主题的,是以 OLAP系统为分析目的。它包括星型架构与雪花型架构,其中星型架构中间为事实表,四周为维度表, 类似星星;雪花型架构中间为事实表,两边的维度表可以再有其关联子表,而在星型中只允许一张表作为维度表与事实表关联,雪花型一维度可以有多张表,而星型 不可以。考虑到效率时,星型聚合快,效率高,不过雪花型结构明确,便于与OLTP系统交互。在实际项目中,我们将综合运用星型架构与雪花型架构。

即 确定数据分析或前端展现的某一方面的分析主题,例如我们分析某年某月某一地区的啤酒销售情况,就是一个主题。主题要体现某一方面的各分析角度(维度)和统 计数值型数据(量度),确定主题时要综合考虑,一个主题在数据仓库中即为一个数据集市,数据集市体现了某一方面的信息,多个数据集市构成了数据仓库。

在 确定了主题以后,我们将考虑要分析的技术指标,诸如年销售额此类,一般为数值型数据,或者将该数据汇总,或者将该数据取次数,独立次数或取更大最小值 等,这样的数据称之为量度。量度是要统计的指标,必须事先选择恰当,基于不同的量度可以进行复杂关键性能指标(KPI)等的计算。

在 确定了量度之后我们要考虑到该量度的汇总情况腊差歼和不同维度下量度的聚合情况,考虑到量度的聚合程度不同,我们将采用“最小粒度原则”,即将量度的粒度设置 到最小,例如我们将按照时间对销售额进行汇总,目前的数据最小记录到天,即数据库中记录了每天的交易额,那么我们不能在ETL时将数据进行按月或年汇总, 需要保持到天,以便于后续对天进行分析。而且我们不必担心数据量轮冲和数据没有提前汇总带来的问题,因为在后续的建立CUBE时已经将数据提前汇总了。

维 度是要分析的各个角度,例如我们希望按照时间,或者按照地区,或者按照产品进行分析,那么这里的时间、地区、产品就是相应的维度,基于不同的维度我们可 以看到各量度的汇总情况,我们可以基于所有的维度进行交叉分析。这里我们首先要确定维度的层次(Hierarchy)和级别(Level)(图 四:pic4.jpg),维度的层次是指该维度的所有级别,包括各级别的属性;维度的级别是指该维度下的成员,例如当建立地区维度时我们将地区维度作为一 个级别,层次为省、市、县三层,考虑到维度表要包含尽量多的信息,所以建立维度时要符合“矮胖原则”,即维度表要尽量宽,尽量包含所有的描述性信息,而不 是统计性的数据信息。

还有一种常见的情况,就是父子型维度,该维度一般用于非叶子节点含有成员等情况,例如公司员工 的维度,在统计员工的工资时,部 门主管的工资不能等于下属成员工资的简单相加,必须对该主管的工资单独统计,然后该主管部门的工资等于下属员工工资加部门主管的工资,那么在建立员工维度 时,我们需要将员工维度建立成父子型维度,这样在统计时,主管的工资会自动加上,避免了都是叶子节点才有数据的情况。

另外,在建立维度表时要充 分使用代理键,代理键是数值型的ID号码庆羡,好处是代理键唯一标识了每一维度成员信息,便于区分,更重要的是在聚合时由于数值型匹 配,JOIN效率高,便于聚合,而且代理键对缓慢变化维度有更重要的意义,它起到了标识 历史 数据与新数据的作用,在原数据主键相同的情况下,代理键起到了 对新数据与 历史 数据非常重要的标识作用。

有时我们也会遇到维度缓慢变化的情况,比如增加了新的产品,或者产品的ID号码修改了,或者产品增加了一个新的属性,此时某一维度的成员会随着新的数据的加入而增加新的维度成员,这样我们要考虑到缓慢变化维度的处理,对于缓慢变化维度,有三种情况:

在确定好事实数据和维度后,我们将考虑加载事实表。

在公司的大量数据堆积如山时,我们想看看里面究竟是什么,结果发现里面是一笔笔生产记录,一笔笔交易记录… 那么这些记录是我们将要建立的事实表的原始数据,即关于某一主题的事实记录表。

我 们的做法是将原始表与维度表进行关联,生成事实表(图六:pic6.jpg)。注意在关联时有为空的数据时(数据源脏),需要使用外连接,连接后我们将 各维度的代理键取出放于事实表中,事实表除了各维度代理键外,还有各量度数据,这将来自原始表,事实表中将存在维度代理键和各量度,而不应该存在描述性信 息,即符合“瘦高原则”,即要求事实表数据条数尽量多(粒度最小),而描述性信息尽量少。

如果考虑到扩展,可以将事实表加一唯一标识列,以为了以后扩展将该事实作为雪花型维度,不过不需要时一般建议不用这样做。

事 实数据表是数据仓库的核心,需要精心维护,在JOIN后将得到事实数据表,一般记录条数都比较大,我们需要为其设置复合主键和索引,以为了数据的完整性和 基于数据仓库的查询性能优化,事实数据表与维度表一起放于数据仓库中,如果前端需要连接数据仓库进行查询,我们还需要建立一些相关的中间汇总表或物化视图,以方便查询。

在构建数据仓库时,如果数据源位于一服务器上,数据仓库在另一 服务器端,考虑到数据源Server端访问频繁,并且数据量大,需要不断更新,所以可以建立准备区数据库(图七:pic7.jpg)。先将数据抽取到准备 区中,然后基于准备区中的数据进行处理,这样处理的好处是防止了在原OLTP系统中中频繁访问,进行数据运算或排序等操作。例如我们可以按照天将数据抽取 到准备区中,基于数据准备区,我们将进行数据的转换,整合,将不同数据源的数据进行一致性处理。数据准备区中将存在原始抽取表,一些转换中间表和临时表以 及ETL日志表等。

时间维度对于某一事实主题来说十分重要,因为不同的时间有不同的统计数据信息,那么按照时间记录 的信息将发挥很重要的作用。在ETL中,时间戳有其特殊的 作用,在上面提到的缓慢变化维度中,我们可以使用时间戳标识维度成员;在记录数据库和数据仓库的操作时,我们也将使用时间戳标识信息,例如在进行数据抽取 时,我们将按照时间戳对OLTP系统中的数据进行抽取,比如在午夜0:00取前一天的数据,我们将按照OLTP系统中的时间戳取GETDATE到 GETDATE减一天,这样得到前一天数据。

在对数据进行处理时,难免会发生数据处理错误,产生出错信息,那么我们 如何获得出错信息并及时修正呢? 方法是我们使用一张或多张Log日志表,将出错信息记录下来,在日志表中我们将记录每次抽取的条数,处理成功的条数,处理失败的条数,处理失败的数据,处 理时间等等,这样当数据发生错误时,我们很容易发现问题所在,然后对出错的数据进行修正或重新处理。

在对数据仓库进行 增量更新时必须使用调度(图八:pic8.jpg),即对事实数据表进行增量更新处理,在使用调度前要考虑到事实数据量,需要多长时间更 新一次,比如希望按天进行查看,那么我们更好按天进行抽取,如果数据量不大,可以按照月或半年对数据进行更新,如果有缓慢变化维度情况,调度时需要考虑到 维度表更新情况,在更新事实数据表之前要先更新维度表。

调度是数据仓库的关键环节,要考虑缜密,在ETL的流程搭建好后,要定期对其运行,所以 调度是执行ETL流程的关键步骤,每一次调度除了写入Log日志表 的数据处理信息外,还要使用发送Email或报警信息等,这样也方便的技术人员对ETL流程的把握,增强了安全性和数据处理的准确性。

ETL构建数据仓库需要简单的五步,掌握了这五步的方法我们将构建一个强大的数据仓库,不过每一步都有很深的需要研究与挖掘,尤其在实际项目中,我们要综合考虑,例如如果数据源的脏数据很多,在搭建数据仓库之前我们首先要进行数据清洗,以剔除掉不需要的信息和脏数据。

总之,ETL是数据仓库的核心,掌握了ETL构建数据仓库的五步法,就掌握了搭建数据仓库的根本方法。不过,我们不能教条,基于不同的项目,我们还将要进行 具体分析,如父子型维度和缓慢变化维度的运用等。在数据仓库构建中,ETL关系到整个项目的数据质量,所以马虎不得,必须将其摆到重要位置,将ETL这一 大厦根基筑牢。

如果ETL和SQL来说,肯定是SQL效率高的多。但是双方各有优势,先说ETL,ETL主要面向的是建立数据仓库来使用的。ETL更偏向数据清洗,多数据源数据整合,获取增量,转换加载到数据仓库所使用的工具。比如我有两个数据源,一个是数据库的表,另外一个是excel数据,而我需要合并这两个数据,通常这种东西在SQL语句中比较难实现。但是ETL却有很多现成的组件和驱动,几个组件就搞定了。还有比如跨服务器,并且服务器之间不能建立连接的数据源,比如我们公司系统分为一期和二期,存放的数据库是不同的,数据结构也不相同,数据库之间也不能建立连接,这种情况下,ETL就显得尤为重要和突出。通过固定的抽取,转换,加载到数据仓库中,即可很容易实现。

那么SQL呢?SQL事实上只是固定的脚本语言,但是执行效率高,速度快。不过灵活性不高,很难跨服务器整合数据。所以SQL更适合在固定数据库中执行大范围的查询和数据更改,由于脚本语言可以随便编写,所以在固定数据库中能够实现的功能就相当强大,不像ETL中功能只能受组件限制,组件有什么功能,才能实现什么功能。

所以具体我们在什么时候使用ETL和SQL就很明显了,当我们需要多数据源整合建立数据仓库,并进行数据分析的时候,我们使用ETL。如果是固定单一数据库的数据层次处理,我们就使用SQL。当然,ETL也是离不开SQL的。

主要有三大主流工具,分别是Ascential公司的Datastage、Informatica公司的Powercenter、NCR Teradata公司的ETL Automation.还有其他开源工具,如PDI(Kettle)等。

DW系统以事实发生数据为基础,自产数据较少。

一个企业往往包含多个业务系统,均可能成为DW数据源。

业务系统数据质量良莠不齐,必须学会去伪存真。

业务系统数据纷繁复杂,要整合进数据模型。

源数据之间关系也纷繁复杂,源数据在加工进DW系统时,有些必须遵照一定的先后次序关系;

流水事件表:此类源表用于记录交易等动作的发生,在源系统中会新增、大部分不会修改和删除,少量表存在删除情况。如定期存款登记簿;

常规状态表:此类源表用于记录数据信息的状态。在源系统中会新增、修改,也存在删除的情况。如客户信息表;

代码参数表:此类源表用于记录源系统中使用到的数据代码和参数;

数据文件大多数以1天为固定的周期从源系统加载到数据仓库。数据文件包含增量,全量以及待删除的增量。

增量数据文件:数据文件的内容为数据表的增量信息,包含表内新增及修改的记录。

全量数据文件:数据文件的内容为数据表的全量信息,包含表内的所有数据。

带删除的增量:数据文件的内容为数据表的增量信息,包含表内新增、修改及删除的记录,通常删除的记录以字段DEL_IND=’D’标识该记录。

可划分为: 历史 拉链算法、追加算法(事件表)、Upsert算法(主表)及全删全加算法(参数表);

历史 拉链:根据业务分析要求,对数据变化都要记录,需要基于日期的连续 历史 轨迹;

追加(事件表):根据业务分析要求,对数据变化都要记录,不需要基于日期的连续 历史 轨迹;

Upsert(主表):根据业务分析要求,对数据变化不需要都要记录,当前数据对 历史 数据有影响;

全删全加算法(参数表):根据业务分析要求,对数据变化不需要都要记录,当前数据对 历史 数据无影响;

所谓拉链,就是记录 历史 ,记录一个事务从开始,一直到当前状态的所有变化信息(参数新增开始结束日期);

一般用于事件表,事件之间相对独立,不存在对 历史 信息进行更新;

是update和insert组合体,一般用于对 历史 信息变化不需要进行跟踪保留、只需其最新状态且数据量有一定规模的表,如客户资料表;

一般用于数据量不大的参数表,把 历史 数据全部删除,然后重新全量加载;

历史 拉链,Upsert,Append,全删全加;加载性能:全删全加,Append,Upsert, 历史 拉链;

APPEND算法,常规拉链算法,全量带删除拉链算法;

APPEND算法,MERGE算法,常规拉链算法,基于增量数据的删除拉链算法,基于全量数据的删除拉链算法,经济型常规拉链算法,经济型基于增量数据的删除拉链算法,经济型基于全量数据的删除拉链算法,PK_NOT_IN_APPEND算法,源日期字段自拉链算法;

此算法通常用于流水事件表,适合这类算法的源表在源系统中不会更新和删除,而只会发生一笔添加一笔,所以只需每天将交易日期为当日最新数据取过来直接附加到目标表即可,此类表在近源模型层的字段与技术缓冲层、源系统表基本上完全一致,不会额外增加物理化处理字段,使用时也与源系统表的查询方式相同;

此算法通常用于无删除操作的常规状态表,适合这类算法的源表在源系统中会新增、修改,但不删除,所以需每天获取当日末最新数据(增量或全增量均可),先找出真正的增量数据(新增和修改),用它们将目标表中属性发生修改的开链数据(有效数据)进行关链操作(即END_DT关闭到当前业务日期),然后再将最新的增量数据作为开链数据插入到目标表即可。

此类表再近源模型层比技术缓冲层、源系统的相应表额外增加两个物理化处理字段START_DT(开始日期)和END_DT(结束日期),使用时需要先选定视觉日期,通过START_DT和END_DT去卡视觉日期,即START_DT’视觉日期’;

此算法通常用于有删除操作的常规状态类表,并且要求全量的数据文件,用以对比出删除增量;适合这类算法的源表在源系统中会新增,修改,删除,每天将当日末最新全量数据取过来外,分别找出真正的增量数据(新增,修改)和删除增量数据,用它们将目标表中属性发生修改的开链数据(有效数据)进行关链操作(即END_DT关闭到当前业务日期),然后再将最新增量数据中真正的增量及删除数据作为开链数据插入到目标表即可,注意删除记录的删除标志DEL_IND会设置为‘D’;

此类表在近源模型层比技术缓冲层,源系统的相应表额外增加三个物理化处理字段START_DT(开始日期),ENT_DT(结束日期),DEL_IND(删除标准)。使用方式分两类:一时一般查询使用,此时需要先选定视角日期,通过START_DT和END_DT去卡视角日期,即START_DT‘视角日期’,同时加上条件DEL_IND ‘D’;另一种是下载或获取当日增量数据,此时就是需要START_DT’视角日期’ 一个条件即可,不需要加DEL_IND ‘D’的条件。

此算法通常用于流水事件表,适合这类算法的源表在源系统中不会更新和删除,而只会发生一笔添加一笔,所以只需每天将交易日期为当日的最新数据取过来直接附加到目标表即可;

通常建一张名为VT_NEW_编号的临时表,用于将各组当日最新数据转换加到VT_NEW_编号后,再一次附加到最终目标表;

此算法通常用于无删除操作的常规状态表,一般是无需保留 历史 而只保留当前最新状态的表,适合这类算法的源表在源系统中会新增,修改,但不删除,所以需获取当日末最新数据(增量或全量均可),用于MERGE IN或UPSERT目标表;为了效率及识别真正增量的要求,通常先识别出真正的增量数据(新增及修改数据),然后再用这些真正的增量数据向目标表进行MERGE INTO操作;

通常建两张临时表,一个名为VT_NEW_编号,用于将各组当日最新数据转换加到VT_NEW_编号;另一张名为VT_INC_编号,将VT_NEW_编号与目标表中昨日的数据进行对比后找出真正的增量数据(新增和修改)放入VT_INC_编号,然后再用VT_INC_编号对最终目标表进行MERGE INTO或UPSERT。

此算法通常用于无删除操作的常规状态表,适合这类算法的源表在源系统中会新增、修改,但不删除,所以需每天获取当日末最新数据(增量或全增量均可),先找出真正的增量数据(新增和修改),用它们将目标表中属性发生修改的开链数据(有效数据)进行关链操作(即END_DT关闭到当前业务日期),然后再将最新增量数据作为开链数据插入到目标表即可;

通常建两张临时表,一个名为VT_NEW_编号,用于将各组当日最新数据转换加到VT_NEW_编号;另一张名为VT_INC_编号,将VT_NEW_编号与目标表中昨日的数据进行对比后找出真正的增量数据(新增和修改)放入VT_INC_编号,然后再将最终目标表的开链数据中的PK出现在VT_INT_编号中进行关链处理,然后将VT_INC_编号中的所有数据作为开链数据插入最终目标表即可。

此算法通常用于有删除操作的常规状态表,并且要求删除数据是以DEL_IND=’D’删除增量的形式提供;适合这类算法的源表再源系统中会新增、修改、删除,除每天获取当日末最新数据(增量或全量均可)外,还要获取当日删除的数据,根据找出的真正增量数据(新增和修改)以及删除增量数据,用它们将目标表中属性发生修改的开链数据(有效数据)进行关链操作(即END_DT关闭到当前业务时间),然后再将增量(不含删除数据)作为开链数据插入到目标表中即可;

通常建三张临时表,一个名为VT_NEW_编号,用于将各组当日最新数据 (不含删除数据)转换加载到VT_NEW_编号;第二张表名为VT_INC_编号,用VT_NEW_编号与目标表中的昨日的数据进行对比后找出真正的增量数据放入VT_INC_编号;第三张表名为VT_DEL_编号,将删除增量数据转换加载到VT_DEL_编号;最后再将最终目标表的开链数据中PK出现在VT_INC_编号或VT_DEL_编号中的进行关链处理,最后将VT_INC_编号中的所有数据作为开链数据插入最终目标表即可;

此算法通常用于有删除操作的常规状态表,并且要求提供全量数据,用以对比出删除增量;适合这类算法的源表在源系统中会新增、修改、每天将当日末的最新全量数据取过来外,分别找出真正的增量数据(新增、修改)和删除增量数据,用它们将目标表中属性发生修改的开链数据(有效记录)进行关链操作(即END_DT关闭到当前业务时间),然后再将最新数据中真正的增量数据(不含删除数据)作为开链数据插入到目标表即可;

通常建两张临时表,一个名为VT_NEW_编号,用于将各组当日最新全量数据转换到VT_NEW_编号;另一张表名为VT_INC_编号,将VT_NEW_编号与目标表中昨日的数据进行对比后找出真正的增量数据(新增、修改)和删除增量数据放入VT_INC_编号,注意将其中的删除增量数据的END_DT置以最小日期(借用);最后再将最终目标表的开链数据中PK出现再VT_INC_编号或VT_DEL_编号中的进行关链处理,然后将VT_INC_编号中所有的END_DT不等于最小日期数据(非删除数据)作为开链数据插入最终目标表即可;

此算法基本等同与常规拉算法,只是在最后一步只将属性非空即非0的记录才作为开链数据插入目标表;

此算法基本等同于基于增量数据删除拉链算法,只是在最后一步只将属性非空及非0的记录才作为开链数据插入目标表;

此算法基本等同于基于全量数据删除拉链算法,只是在最后一步只将属性非空及非0的记录才作为开链数据插入目标表;

此算法是对每一组只将PK在当前VT_NEW_编号表中未出现的数据再插入VT_NEW_编号表,最后再将PK未出现在目标表中的数据插入目标表,以保证只进那些PK未进过的数据;

此算法是源表中有日期字段标识当前记录的生效日期,本算法通过对同主键记录按这个生效日期排序后,一次首尾相连行形成一条自然拉链的算法

关于teradata数据库行转列函数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Teradata数据库行转列函数简介 (teradata数据库行转列函数)