文章目录
1. 啥是HANA Delta Merge
首先咱知道HANA是列存储的。就是用的压缩算法,把所有应用数据保存在内存里。那你都压缩保存了。只是针对读取数据相当方便,那我怎么写数据进去呢?
这不就困难了么?
难道我要重新组织下你这个保存的数据?再按行来写?这就不行了啊。
我要更新和插入数据到一个已经排好序的列式存储的表里,也太难了。因为我得重新排序啊,也就是说我无论搞啥,都得重新组织下这整个表。那么大的表,非常耗时。
有什么好一点的办法呢?
SAP是怎么办的呢?
把方便读的,排好序的表,放到Main storage里。
把方便写的,非排序的列表或者行表,放到delta storage里。所有的更改都先给你放到delta storage里。
delta storage在哪?在主存里。当有插入新增数据,把delta storage给合并到main storage里去。
光靠讲是理解不了的。具体后台操作得看图:
具体咋回事呢?在我看来就是修补:
在合并前:所有写操作存到delta1,读取从main1和delta1出。
合并中:所有写更改存到delta2, 因为delta1 和 main1正在往main2 进行合并。那么读操作此刻从delta1 ,delta2 和main1出。 有一些delta1还没提交的更改,给放到delta2 了。
合并后:main 1 和delta1删掉。
总结,HANA数据库中,数据更改默认存储到delta storage中,其后通过delta merge转移到main storage中。
如果在数据加载过程中数据有更改,那么最后要执行delta merge。这个在那呢?
- DTP的delta merge
DTP运行完之后就进行delta merge。
但是如果你有很多个DTP更新到一个ADSO里。
那么就在ADSO中进行。一般在处理链里:
一般不建议DTP完了就直接搞delta merge.
因为如果你有其他DTP,那还在进行数据填入呢。好歹在所有数据加载结束后再搞。
但是不能不搞,要不然数据一直在delta storage里。读取的效率就低啊,而且还有存储空间不够的问题。
对于标准ADSO一般都要这么搞。
如果对于staging ADSO,默认你要在DTP里面勾。
2. 怎么执行一个Delta Merge
那你到HANA Modeler你的BW Schema下面去搜ADSO的表名:/BIC/A*
然后open definition
看到runtime information 中的main storage 和 delta storage.
然后执行一个带delta merge的DTP。
再回头看。