这个例子可以帮助我们理解SCD类型1的用法以及如何处理错误消息。
关于缓慢变化的维度的简介:缓慢变化的维度是指数据随时间变化的维度。
有三种处理缓慢变化的维度的方法可用:这里我们只关注SCD类型1.
类型1-无历史保存-标准化的自然结果。
对于SCD类型1更改,您可以在特定维度记录上查找并更新相应的属性。例如,要更新
SALES\u PERSON\u维度表中的记录以显示对个人的SALES\u PERSON\u NAME字段的更改,只需更新
SALES\u PERSON\u维度表中的一条记录即可。此操作将跨时间更新或更正所有事实记录的记录。在维度模型中,事实没有意义,全球云购,除非你把它们与维度联系起来。如果更改维度属性而没有适当说明时间维度,则更改将在所有事实记录中变为全局性的。
这是更改前的数据:
这是更改销售人员姓名后的同一个表:
但是,假设销售人员调往新的销售团队。更新销售人员的维度记录将更新所有以前的事实,以便
销售人员看起来总是属于新的销售团队。这可能会导致两个团队在报告销售数字方面出现问题。如果你想准确记录谁是哪个销售团队的成员,类型1不合适。
下面是使用SCD类型1使用错误处理逐步批量创建作业。
创建新作业
从工作台添加Try和"Script"控件并拖动到工作区
为SYSDATE创建全局变量
在脚本部分添加下面的脚本。
#设置今天日期
$SYSDATE=cast(sysdate(),'date');
print('Today's date:'| | cast('sysdate,'varchar(10)');
Add DataFlow.
现在双击DF并添加源表。
Add Query Transformation
Add LOAD_date new column in Query_Extract
Map created global variable$sysdate。如果每次都提到sysdate()这个函数调用,可能会影响性能。
为查寻表添加另一个查询转换
为查寻表创建新的函数调用。
通过查寻表成功添加必选列。
添加另一个查询转换。此查询将决定是否插入和更新源记录。
现在删除目标文件的主键。
创建新列以设置要更新或插入的标志。
如果LKP\U PROD\U ID为null,则写入if then else函数如果不使用UPD,则使用INS更新标志。
如果使用else(查询\U LOOKUP\U PRODUCT_TIM.LKP\u生产密钥为空,"INS","UP")
现在创建case转换。
创建两个规则来标记field以设置"INS"或"UPD"
创建Insert和Update Query以对齐字段
将LKP\u PROD\u KEY更改为PROD\u KEY,国内免费云服务器,将PROD\u ID更改为SOURCE\u PROD\u ID以便更好地理解目标表。
现在创建KEY Generation Transform以生成代理项KEY
选择带有代理键(PROD\u key)的目标维度表
设置目标实例
为Quary\u Insert添加键生成转换,为新列添加计数。
对于Query\u Update,我们需要代理键和其他属性。使用映射操作转换更新记录。
默认正常模式为正常。我们希望在正常模式下更新记录。
更新代理项密钥、产品密钥和其他属性。
返回插入目标表–>选项–>更新错误处理,如下所示:
返回作业屏幕并创建捕获块
选择要捕获的所需异常。并创建脚本以显示错误消息
编写消息以打印脚本错误日志中的错误,服务器云服务器,如下所示
打印('错误处理');
打印(错误消息()| |'在'| |转换(错误|时间戳(),返现,'varchar(24));
引发|异常('作业失败');
现在验证脚本,返利机器人哪个好用,然后再继续。
现在这些消息将捕获作业完成状态的错误。
现在创建一个脚本,如果有任何数据库拒绝,则打印错误消息:
#print('DB error Handling');
if(get_file_attribute('[$$LOG_DIR]/VENKYBODS_TRG_dbo_Product_尺寸.txt‘, 'SIZE')>0)
引发异常('Job Failed Check Rejection File');
注:VENKYBODS\u TRG\u dbo\u产品_尺寸.txt是我们在目标表错误处理部分提到的文件名。
执行前,上次更新日期的源表和目标表数据。
现在执行作业,我们可以看到上次更新日期。
现在尝试生成任何错误,以查看捕获到我们错误处理的错误日志。
尝试实现相同的,如果您需要任何进一步的解释,请告诉我。