继续来一个Cube动态增加分区和动态刷新分区数据的问题

0
查找了以前别人提的问题,和我的需求不一样。
问题:
1、Cube动态增加分区,比如是按照月做的分区,现在是做到2013年12月份,要求在月底自动增加下一个月的分区,比如在12月31号自动增加2014年1月份的分区,在2014年1月31号自动增加2014年2月份的分区,以此类推。。。

2、增量刷新Cube分区的数据,目前只考虑刷新最近一个分区的数据,比如现在是2013年12月,要求只增量刷新12月所在分区的数据(也就是最后一个分区),到2014年1月份的时候,由于上一个问题已经增加了1月份的分区,这样就只增量刷新2014年1月份所在分区的数据,2014年2月份时候只增量刷新2月份所在分区,其余的分区数据不动,以此类推。。。。

这样的需求怎么实现?
已邀请:
1

BIWORK - 热衷于微软BI技术,技术架构和解决方案! 2013-12-09 回答

  1. 首先把默认创建的分区给删除掉,然后自己手动创建一个分区,在分区的查询代码里加上这样的一段代码:

SELECT 事实表中的列
FROM .
WHERE DateKey BETWEEN 20140101 AND 20140131

  1. 部署你的项目之后就能看到你的这个新建的分区,然后把分区的这个 Script 个导出来保存起来 分区.xmla 。

<ID>Sales_20140101-20140131</ID>
<Name>Sales_20140101-20140131</Name>
<Source xsi:type="QueryBinding">
<DataSourceID>BIWORK SSIS</DataSourceID>
<QueryDefinition>SELECT 事实表中的列
FROM .
WHERE DateKey BETWEEN 20140101 AND 20140131</QueryDefinition>
</Source>

  1. 自己写一个表 PartitionLog 每次新增一个月的数据就记录一条记录,比如第一次是 Sales_20140101-20140131, 起始范围是 20140101,20140131
  2. 现在比如说从 DW 中又进来了第二个月的数据,那么就再往 PartitionLog 里面记录第二条数据。
  3. 在 SSIS 中,其实每次所做的事情就是使用 SSIS 更新这个 xmla 文件,将相应的查询语句的时间更新为新的月份,然后再重新部署。当然你需要在文件中查找这个时间字符串并更新它。

0

天桥下的郑成功 - Hadoop大数据开发工程师、数仓架构师、熟悉数据仓库设计、Hadoop、Spark、HBase、Hive、SSIS等开发 2013-12-10 回答

@To BIWork:
"自己写一个表 PartitionLog 每次新增一个月的数据就记录一条记录" ----请问这个一般如何实现呢?

哦,明白了。
  1. 在SSIS里 通过控件自动更新这个 XMLA文件, 修改它的时间。然后运行之前那个script, 让它帮助你进行新的分区的创建。
  2. 在这个ETL分区模块完成后,再建立一些别的流程 比如 写日志到表里。

感谢楼主的问题,以及BIWork的分享。
0

liangf 2013-12-10 回答

思路清晰了,也知道怎么实现了,
现在的问题卡在怎么更新这个xmla文件,下面这几个部分的内容每次都是不同的,比如<ID></ID>之间的,所以要用脚本替换整个<ID></ID>,现在还在看怎么搞,对脚本不熟,哈哈

<ID>Sales_20140101-20140131</ID>
<Name>Sales_20140101-20140131</Name>
<QueryDefinition>SELECT 事实表中的列
FROM .
WHERE DateKey BETWEEN 20140101 AND 20140131</QueryDefinition>

要回复问题请先登录注册