- 浏览: 53607 次
- 性别:
- 来自: 北京
-
近期遇到些使用hash file的问题,遂整理些自己搜集的东西,有些是翻译的,有些是自己写的,有些english资料不忍篡改,遂保留其原汁原味。
首先,What Exactly Are Hash Fils?
•Group -physical division
•Record -contains data
•Key -identifies record
DataStage 中的hash file 无论是静态("static" Types 2 - 18)还是动态("dynamic" Type 30)都被分为许多group存储数据。group是存贮文件数据的物理单元,每个Group大小相同,存贮零条或者多条数据。对于静态Hash file,group的大小由指定分区决定,是512bytes的倍数。举例说明:指定4个分区,则group以2,048bytes来创建;对于动态hash file,group的大小由GROUP.SIZE参数来决定,以2,048 bytes为单元,GROUP.SIZE允许的值只有1和2,所以动态hashfile中的group大小只能是2 ,048或者4,096bytes。
Record是数据存贮的的逻辑单元,它可以被逻辑地描述为一组fields或者被物理地描述为record header、key value和数据分区。每个record都有一个通过hash 算法产生的Key Value以确定此record所在的group
文件的group的数目在静态hash file中称为modulo/modulus,在动态Hash File中称为current modulus。在没有外界干涉的情况下,静态hash file中的group的数目保持常量,而动态hash file中的group数目受动态地存贮数据量的大小而改变,这是静态hash和动态hash的首要的区别。我们统计file中的group从1数起,而DataStage Hash File是按照group的起始地址来引用group的。每个hash file都有一个header,groups从文件开始偏移header的大小的位置开始。我们可以通过LIST.READU这样的命令得到group的地址(十六进制给出)。DataStage Hash File工具uvfixfile 和filepeek可以以十进制或十六进制计算地址。
当group创建后(CREATE.FILE),group存在的文件section称为 primary group buffer。Primary group buffers 紧挨着file header连续排列,这样文件的对比只需要文件header和primary group buffer,这样大大提高记录读取的速度。但世界并不完美,有时候分配给group的记录不能被放入primary group buffer,这样group处于"溢出"(overflow)的状态,第二个group buffer进行分配,并且daisy-chained to primary group buffer,分配原则如下:
• 静态文件中紧接最后一个primary group
• 动态文件中,在 OVER.30 中(primary group buffers在DATA.30 部分中)
静态和动态hash file之间唯一真正的区别在于primary buffers 存在于DATA.30 文件中,而溢出group和oversized record buffer存在于OVER.30文件中,由于DATA.30的大小随时间改变而改变,这是必须的。
有溢出(Overflow)说明文件没有调整到最优,可能是由于group太少,或者没有选择最适合的hash算法,或者只是因为key values/structuress不能用hash算法充分操作。ANALYZE.FILE是一个调试Hashfile的工具,可以报告"badly overflowed"的情况,意味着即使在一个Secondary group buffer中仍然没有足够的空间来存贮所有分配给这个group的数据。"badly overflowed" group是多于一个secondary group buffer。
经验显示约90%的broken file在group buffer的连接上断开。DataStage hash file在group buffer的连接很脆弱,这是因为:
•由于group 被锁住直到整个group处理进或出memory,这样性能很受影响。
•如果secondary group buffer距离它连接的之前的buffer很远的距离,磁盘查询的延时将增加。在这些延时中,文件系统容易受到外部事件的伤害,例如停电。在动态文件中memory中的header信息会同物理文件一起丢失。所以如果溢出(overflow)越少,处理文件的风险就越小。办法就是减少溢出。
在group中,增加记录,从group的开始处占据空间。记录是用向前和向后指针"daisy chained"的,没有group自己的存贮界定,如group header或者trailer。Free Space作为一个有"free space"的header的""record"存在,可以有对于一个的free space存在于group中,例如一个record从文件中删除,它实际通过有它的frees pace被标志为删除。每个record都把从文件开始的偏移量作为它的地址,例如group在0x2000地址,那么group中的第一个record的地址就是0x2000。
动态hash file的魅力在于它可以随需求动态增长,自动加倍文件大小,重新分配数据,把溢出文件(OVER)中的数据移入数据文件(DATA)中。由于Hash file其特有的存贮机制,需要注意DataStage设计中其使用和误用的地方。
要想在hash file中查找一条记录,需要知道其key值。数据都是连续字符存贮,字段分隔符是@AM(系统变量),每个字段都按照数据本来的数据排列,这样看来hash file几乎同sequential file一样,字段由其所在的位置定位而非字段名字。 实际上,由于数据是以文本字符串形式存贮,你只需要知道key和字段长度位置即可。在hash file中不要使用受限的ASCII字符,这些字符可能会被作为内部数据分隔符。此外,由于每条记录都是一条文本字符串存贮的,所以hash file中的每条记录都允许有自己的结构, hash file成为非一致结构的自由格式文件。
Hash file在DataStage中以下主要用法:
通过primary key的 非大量的lookup DataStage® 可以将Hash lookup放入cache内存(Lookup不是Join)。 Lookup使用hey值在hash file中指定查询的row. 如果使用ODBC/OCI stages来做lookup,由于缺少memory cache的能力 performance会差。此外,许多job都作ODBC/OCI Lookup,数据库查询将会饱和。 阶段性的关联性文件 也就是转换job为另外一个job准备的关联数据。通过hash file很容易完成。
非固定不变的中间结果文件. Hash files奇妙的存贮机制是它用于关联lookup的原因。如果数据不需要关联lookup,由于写入sequential file的appending方式,sequential file是最好的选择。Hash file需要检测可用空间,然后决定写入数据文件还是溢出文件。
在DataStage设计中误用的地方:
1,存贮固定不变的生产数据在ETL工具中。Hash file 是应该用于丢出数据或者随意使用的中间结果暂存的文件,而非需要可以从被破坏的状态下恢复或者备份的文件。
2,把绝大多数row从未被关联到的Hash file Preload到内存中。如果处理的数据量不能超过关联的数据量,Preloading到内存既浪费时间由浪费内存。
3,每条记录可能只被Lookup一次的Hash file Preloading到内存。
4,使用SQL接口(UV/ODBC,UV/SQL命令)访问hash file。Hash file没有第二个索引支持任何关系型数据库的查询。虽然其内部的engine可以支持这类的操作,我们知道DataStage的大部分东西都是以HashFile存放的,你可以用UVSQL访问他们,但是别试图在你的ETL工具中建造起一个数据库,这也违背了ETL工具将数据展现为图形界面开发处理的初衷。也许这方面的操作,很多人没有遇到,或者不知道如何使用,在后面会有相关的介绍,比如我最近遇到hash file中数据删除问题,就采用了这样的方式。当然我不会总是用UVSQL访问DataStage的数据库和hash file(那样也太累太蠢了)。
继续hash File可能使用不当的地方。
5,企图欺骗Hash File,改变hashfile的元数据,使用一组不同的字段(即使这些字段都在hashfile的表定义中)找到某条记录。这种方式是关系型数据的优势,但不是用于hash file。DataStage 会读取hashfile中记录的全部内容(全部表定义字段)到内存中,所以必须要使用完整的元数据来定义hashfile,不能像操作RDB一样不同的job stage使用不同的表定义来获取记录。
6,多个job并行往同一个hashfile中写入数据。尤其是选择Allowing stage write cache的时候,需要及其小心DataStage处理并行的方式。多实例的Job如果使用write cache 的方式写hash file会将数据放入缓冲区(buffer),会造成清洗缓冲点(flush point)的争用,这样就会当实例数增加到一定的数据,运行效率开始下降的分界点。例如,可能由于磁盘的拥堵和争用,4个实例运行的时间可能会比8个实例运行的时间短。对于不同server配置,分界点也会不同,需要测试去找到较好的实例数目。
7,同样,一个job中同时读写同一个hash file,不要选择"Allowing Stage Write Cache"属性。
8,为了帮助DataStage可以以交易模式(transactional mode)使用,在hashfile中加入了行锁机制。但是这个属性最好不要在ETL中使用,它会导致性能极度丧失。DataStage对hash file使用脏读写隔离级别和顺序执行的方式,比依赖锁机制避免污染数据而并行执行几个进程的方式要好很多。
此外,我们可以用Hash File玩些小把戏,得到些额外的收获。找点时间填东西了
sorry, coming soon...
1,我们都知道可以利用hash去除重复记录,对于键值一样的多条记录只保留最后一条写入的记录。其实这个类似table的update操作,也可以利用此功能进行hash中的数据更新。利用这个功能时候,容易犯错误的是,有时候键值看似一样的数据存在两条或者多条,这是由于hash file对于传入的字段字段中存在空字符串。这也做lookup时应该注意的问题。
2,DataStage中hash设置有两种方式:Use account name/use directory path
Use account name中如果不选account name,系统都会指向此hash目前所在的 account name(Project name),这样如果移植到别的项目时候,hash 会指向移植的项目,hash 文件会建立在此项目的默认目录下,同时写入VOC。如果要删除此hash file,只删除其物理文件不行,需要用TCL command,如在Adminitrator中:DELETE.FILE hashfilename;清空的话用 CLEAR.FILE hashfilename;
如果选择user diretory path,可以在选定的路径下,直接删除路径下的物理文件和路径就可以删除hash 文件了。
发表评论
-
DataStage在RedHat Linux Enterprise 3上安装详细步骤(八)
2009-01-13 15:21 2415(5)配置好后,进入对应目录使这两个文件立即生效 source ... -
DataStage在RedHat Linux Enterprise 3上安装详细步骤(七)
2009-01-13 15:20 3671DataStage在RedHat Linux Enterpri ... -
DataStage在RedHat Linux Enterprise 3上安装详细步骤(六)
2009-01-13 15:19 1823DataStage在RedHat Linux Enterpri ... -
DataStage在RedHat Linux Enterprise 3上安装详细步骤(五)
2009-01-13 15:19 1896DataStage在RedHat Linux Enterpri ... -
DataStage在RedHat Linux Enterprise 3上安装详细步骤(四)
2009-01-13 15:18 1739DataStage在RedHat Linux Enterp ... -
DataStage在RedHat Linux Enterprise 3上安装详细步骤(三)
2009-01-13 15:16 1998DataStage在RedHat Linux Enterpri ... -
DataStage在RedHat Linux Enterprise 3上安装详细步骤(二)
2009-01-13 15:15 2304DataStage在RedHat Linux Enterpri ... -
DataStage在RedHat Linux Enterprise 3上安装详细步骤(一)
2009-01-13 15:14 2368DataStage在RedHat Linux Enterpri ... -
datastage对于超过2000的长字段的处理
2008-12-22 20:43 1614对于超过2000的长字段的处理(Datastage版本:Dat ... -
DataStage---方法小结ing[转]
2008-12-20 14:21 3653datastage怎样调用存 ... -
DataStage---lookup和join的区别 [转]
2008-12-16 12:00 10532关于lookup和join的区别, ... -
DataStage乱码问题
2008-12-15 20:02 42561.用户的.bash_profile里面:NLS_LANG=A ...
相关推荐
DataStage Sequential File Stage是ETL(提取、转换、加载)过程中用于处理文本文件的一个关键组件。这个stage专门设计用于读取和写入简单的文本文件,它具有灵活性和可配置性,能够适应各种数据处理需求。以下是对...
标题与描述概述的知识点主要集中在两个方面:DataStage中的乱码问题解决以及Hash File的深入解析。接下来将详细展开这两个核心知识点。 ### DataStage乱码问题解析 #### 乱码问题背景与解决策略 在DataStage操作...
在ETL(Extract, Transform, Load)过程中,DataStage作为一款强大的数据集成工具,提供了丰富的设计模式。以下是对该章节内容的深入解析: 1. **获取源数据**:在DataStage中,获取数据可以通过PUSH或PULL两种方式...
Sequential file是DataStage中的一个常用组件,用于处理Sequential数据。该组件可以处理大规模数据,具有高效和可靠的特点。 3.1.2. Annotation Annotation是DataStage中的一个常用组件,用于添加注释信息到数据中...
在DataStage中,调用存储过程通常在设计数据抽取和加载流程时是必要的。以下是调用存储过程的基本步骤: - 首先,打开DataStage Designer,这是设计和构建DataStage作业的主要环境。 - 接着,拖拽DB2 Connector到...
而 Hash File Stage 用于创建基于主键的哈希文件,用于高效的数据查找,特别适用于参考查找场景。 总的来说,DataStage 提供了一个强大的环境,让数据工程师能够高效地管理复杂的数据整合任务,同时通过其丰富的 ...
描述中的"Datastage种子资源"可能指的是通过BitTorrent协议分发的软件副本。种子文件(如".torrent"文件)是P2P网络中用于共享大文件的关键组件,它包含了下载所需的所有元数据,允许用户通过BitTorrent客户端来下载...
**DataStage** 是IBM InfoSphere DataStage 和 QualityStage V8.5版本的核心组件之一,主要用于数据集成项目中,能够帮助用户实现高效的数据处理和转换任务。该指南是Datastage开发人员必备的文档资料,包含了详细的...
根据提供的文件信息,我们可以深入探讨DataStage中的一些关键概念与技术细节。特别是关于DataStage的常用函数、例行程序(Routine)及其应用场景。 ### DataStage中的重要函数与例行程序 #### 1. 数据加载流程 在...
在菜单栏中选择 **Job** > **Clear Status File**。 3. 选择需要解锁的任务。 4. 系统会弹出警告对话框:“This will remove all job status information from [job name]. Are you sure you want to continue?”...
DataStage 提供了一套完整的解决方案来提取来自不同来源的数据,对这些数据进行转换处理,并将其加载到目标系统中,如数据仓库或业务智能系统。DataStage 7.5是该系列的一个较早期版本,但仍然在某些特定环境中被...
DATASTAGE经验积累与分享 DATASTAGE是ETL(Extract-Transform-Load)工具中的一种重要组件,主要...DATASTAGE是ETL工具中的一种重要组件,通过了解DATASTAGE的经验积累和分享,可以更好地使用DATASTAGE来处理数据。
在 DATASTAGE 中,添加 Link 是一种常见的操作。 Link 可以将不同的 stage 连接起来,以便实现数据的流程处理。添加 Link 的方法有两种,一种是右键点击起始 stage,并将其拖动到目标 stage;另一种是将鼠标放在起始...
IBM WebSphere DataStage 中使用 Java Pack 组件工具包
在与DataStage的集成中,RedBrick Load是关键组件之一,用于将数据从DataStage管道高效加载到RedBrick Warehouse中。 **三、RedBrick Load WN** RedBrick Load WN是用于将数据加载到RedBrick Warehouse中的组件,...
这种直观的界面和强大的功能使得DataStage成为了数据集成项目中的首选工具。 在产品概述部分,DataStage提供了多个组件,以满足不同的数据处理需求。其中,Sequential File组件主要用于处理结构化的文本文件,如CSV...
在Linux环境中,Datastage支持企业级的稳定性和性能,适合大型数据处理项目。 **2. SERVER安装** **2.1. SERVER安装准备** 在安装Datastage Server之前,确保满足以下硬件和软件要求: - **硬件**:足够的CPU、...
1. **创建并行文件源**:使用DataStage的文件源组件,如Sequential File,将其设置为并行模式,以便于数据的并行读取。 2. **数据转换**:利用Transformer组件对读取的数据进行转换,例如清洗、格式化等操作。 3. **...
在本文中,我们将深入探讨如何在Linux服务器端和Windows客户端环境中安装DataStage 11.5。 1. **环境准备** 在开始安装之前,确保你的系统满足DataStage 11.5的硬件和软件需求。对于服务器端,通常选择Linux操作...
在"DataStage学习版文档"中,你可能会学习到如何使用这些组件,创建复杂的ETL流程,以及如何利用DataStage提供的各种工具进行数据治理和性能监控。通过深入理解和实践,你将成为一名熟练的DataStage使用者,能够为...