【问题标题】:MarkLogic Query Based Views: Constructing dynamic columnsMarkLogic 基于查询的视图:构建动态列
【发布时间】:2022-10-04 21:57:56
【问题描述】:

这个问题来自一个关于我在 TDE 和光学计划设置中面临的用例的现有问题: MarkLogic Optic API: Dynamic update support for Template View Configuration

我在表MyTable 和架构MyView 的模板视图配置中有以下字段:

<column>
   <name>currentDateTime</name>
   <scalar-type>dateTime</scalar-type>
   <val>fn:current-dateTime()</val>
   <nullable>true</nullable>
   <invalid-values>ignore</invalid-values>
</column>

我正在尝试创建一个与此列等效的基于查询的视图,以便在每次针对此视图运行光学计划时动态更新此值,但在使用 MarkLogic 可用的当前文档时遇到问题。

我使用文档中概述的以下查询创建基于查询的视图,并将其作为文档插入到我的 Schemas 数据库中的 XML 输出中:

op:from-view("MyTable", "MyView")
   => op:select(("currentDateTime"))
   => op:generate-view("DataHub", "myQBV")

但是,当我查询这个新视图时,dateTime 时间戳保持静态并且不会动态更新。

这是我的光学查询:

let $QBV := op:from-view("DataHub", "myQBV")
return $QBV
 =>op:select((op:view-col("myQBV", "currentDateTime")))
 =>op:result()

我必须设置一个额外的步骤来获得currentDateTime 值以在光学计划之后动态更新吗?

我将 QBV XML 保留为具有 data-view-admin 角色的用户。

【问题讨论】:

    标签: marklogic


    【解决方案1】:

    应该使用 op:as 调用将动态字段配置为 select 语句的一部分。这将确保当前日期时间的评估发生在查询时间而不是索引时间。

    op:select(op:as("currentDateTime", fn:current-dateTime()))
    

    虽然可以在动态视图中执行此操作,但它可能不是性能最高的。请务必对您的一些将利用此字段的查询进行概要分析。

    光学功能:https://docs.marklogic.com/op:as

    值处理函数:https://docs.marklogic.com/js/op/value-processing-functions

    【讨论】:

      猜你喜欢
      • 2010-10-04
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多