如何为MQT(材料查询表)创建登台表?
目标是使用增量刷新(而不是完全刷新)
这是与IBMi上的DB2一起使用的
我能够创建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语句,因为它不以有效子句结尾。
处理结束,因为突出显示的语句未完成 成功
答案 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,您将依赖数据库来隐式使用它。