这个问题来自这里关于我在 TDE 和光学计划设置中面临的用例的现有问题: MarkLogic Optic API:模板视图配置的动态更新支持
我的模板视图配置中有以下字段用于表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>
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建与此列等效的基于查询的视图,以便每次针对此视图运行光学计划时动态更新此值,但我在使用 MarkLogic 提供的当前文档时遇到了问题。
我使用文档中概述的以下查询创建基于查询的视图,并将其 XML 输出作为文档插入到我的架构数据库中:
op:from-view("MyTable", "MyView")
=> op:select(("currentDateTime"))
=> op:generate-view("DataHub", "myQBV")
Run Code Online (Sandbox Code Playgroud)
但是,当我查询这个新视图时,日期时间时间戳保持静态并且不会动态更新。
这是我的光学查询:
let $QBV := op:from-view("DataHub", "myQBV")
return $QBV
=>op:select((op:view-col("myQBV", "currentDateTime")))
=>op:result()
Run Code Online (Sandbox Code Playgroud)
我是否必须设置额外的步骤才能currentDateTime
在光学计划后动态更新该值?
我以具有 data-view-admin 角色的用户身份保留 QBV XML。
应使用 op:as 或 op:bind-as 调用将动态字段配置为 select 或 bind 语句的一部分。这将确保当前日期时间的评估发生在查询时而不是索引时。
op:select(op:as("currentDateTime", ofn:current-dateTime()))
Run Code Online (Sandbox Code Playgroud)
op:bind-as("currentDateTime",ofn:current-dateTime())
Run Code Online (Sandbox Code Playgroud)
虽然这可以在动态视图中完成,但它可能不是最高性能的。请务必分析一些将利用此字段的查询。
光学作为功能:https://docs.marklogic.com/op:as
光学指南:https://docs.marklogic.com/10.0/guide/app-dev/OpticAPI
表达式函数所需的 XQuery 库:https://docs.marklogic.com/10.0/guide/app-dev/OpticAPI#id_94816
归档时间: |
|
查看次数: |
205 次 |
最近记录: |