DB2为MQT(材料化查询表)创建登台表以进行增量刷新

时间:2019-07-16 14:43:20

标签: sql db2 ibm-midrange db2-400

如何为MQT(材料查询表)创建登台表?

目标是使用增量刷新(而不是完全刷新)

这是与IBMi上的DB2一起使用的

我一直在关注这篇文章 https://www.ibm.com/support/knowledgecenter/en/SSEPGG_9.7.0/com.ibm.db2.luw.apdv.sample.doc/doc/clp/s-tbast-db2.html

我能够创建MQT

当我尝试按照示例创建登台表时,收到错误消息

例如

为XXLIB.SALES创建MQT:

create table XXLIB.SALES as 
(select Company, Territory, SUM(Sales) 
From XXLIB.HISTORY Where Company = 1 Group by Company, Territory)
data initially deferred refresh deferred maintained by user

然后进入分期XXLIB.SALES_S

CREATE TABLE XXLIB.SALES_S FOR XXLIB.SALES PROPAGATE IMMEDIATE;

这是错误消息

  

SQL状态:42601供应商代码:-104消息:[SQL0104]令牌。不是   有效。有效令牌:。原因。 。 。 。 。 :语法错误   在令牌上被检测到。不是有效的令牌。部分   有效令牌列表为。此列表假设   声明是正确的,直到令牌为止。该错误可能早于   语句,但该语句的语法似乎一直有效   这点。恢复。 。 。 :执行以下一项或多项操作,然后   再次尝试该请求:-验证SQL语句在   令牌..更正该语句。错误可能是缺少逗号或   引号,它可能是拼写错误的单词,也可能是相关的   按条款的顺序。 -如果错误令牌为,   更正该SQL语句,因为它不以有效子句结尾。

     

处理结束,因为突出显示的语句未完成   成功

1 个答案:

答案 0 :(得分:1)

不幸的是,IBM i的Db2不支持LUb的Db2所支持的所有MQT功能。

我的db2缺少系统维护的MQT以及用户维护的增量MQT。

您需要使用基表上的触发器在Db2上为i推出自己的解决方案。

您的触发器可以立即更新MQT或写入您自己的“登台”表。 注意该表仅在刷新过程使用它的意义上进行分阶段。您必须自己手动创建它,就我的Db2而言,它是一个完全独立的表。

就我个人而言,我从不打扰MQT,相反,带有计算列的编码矢量索引(EVI)可以满足我考虑的所有需求。 (请注意,Db2 LUW没有EVI)

EVI由系统维护,因此数据始终是最新的。

CREATE ENCODED VECTOR INDEX sales_fact_location_id_evi 
ON sales_fact(sale_location_id ASC) 
INCLUDE(SUM(sale_amount_measure))

以下IBM文档Accelerated analytics - faster aggregations using the IBM DB2 for i encoded vector index (EVI) technology讨论了在其他RDBMS可能使用MQT的地方使用EVI。

已添加
这是一个EVI,它将代替您尝试创建的MQT ...

CREATE ENCODED VECTOR INDEX XXLIB.SALES 
ON XXLIB.HISTORY(Company, Territory)
INCLUDE(SUM(Sales))

EVI与MQT相比,唯一的缺点是您可以直接在查询中引用MQT,而不是依赖数据库来隐式使用它。使用EVI,您将依赖数据库来隐式使用它。