1

问题:我正在尝试创建一个宽视图(~5000 列),它可以跨数据源精细 JDV。但是,当我尝试使用来自数据源的 2+ 表的连接来创建视图时,优化器会将连接下推到源。当前源无法处理超过 1600 列。

示例:当尝试在客户端加入 Member_DX1 和 Member_DX2 时,JDV 将enter code here合并后的加入推送到 postgres,因为出现最大列错误。

/* TABLE 1 */

CREATE VIEW Member_DX1 (
    MEMB_BID Integer
     , DX130402000000 Integer
     , DX180608000000 Integer
     , DX20401070000 Integer
.... /* 1000 more */
as
SELECT dx.memb_bid
, case dx.EPI_1_DX4 when 130402000000 then 1 else 0 END as  DX130402000000                                              
, case dx.EPI_1_DX4 when 180608000000 then 1 else 0 END as  DX180608000000                                              
, case dx.EPI_1_DX4 when 20401070000 then 1 else 0 END as  DX20401070000
...
FROM BDR.ENH_EPI_DETAIL dx 

/* TABLE 2 */

CREATE VIEW Member_DX2 (
    MEMB_BID Integer
     , DX200102010000 Integer
     , DX90125000000 Integer
     , DX160603070000 Integer
... /* 1000 more ...
SELECT dx.memb_bid  /* FOREIGN TABLE */
, case dx.EPI_1_DX4 when 200102010000 then 1 else 0 END as  DX200102010000                                              
, case dx.EPI_1_DX4 when 90125000000 then 1 else 0 END as  DX90125000000                                                
, case dx.EPI_1_DX4 when 160603070000 then 1 else 0 END as  DX160603070000      
...`enter code here`
FROM BDR.ENH_EPI_DETAIL dx 

然后我的查询(例如dBeaver)看起来像这样:

SELECT * from Member_DX1 dx1
join Member_DX2 dx2 
on dx1.MEMB_BID = dx2.MEMB_BID
4

1 回答 1

1

当前源无法处理超过 1600 列。

您能否将其视为 Teiid 的问题?然后我们可以自动采取适当的补偿措施。

然后我的查询(例如dBeaver)看起来像这样:

如果您发现此问题影响了您的所有用户查询,那么您可以通过翻译器覆盖 - SupportsInnerJoin、SupportsOuterJoins 等在翻译器级别关闭连接支持。如果存在 pk/fk 关系并且您可以修改元数据,您可以添加扩展属性 allow-join 为 false 以防止下推 - 请参阅加入补偿http://teiid.github.io/teiid-documents/master/content/reference/Federated_Optimizations.html

于 2018-10-24T12:00:50.187 回答