我正在尝试获取包含 Wonderware Historian 中不同标签的历史值的视图的定义。目标是识别源表并在这些表上启用 CDC,以便将数据流式传输到远程服务器。但是当我查看视图定义时,它显示类似的内容
Select *
From [INSQL].Runtime.dbo.History
但是
History
就是视图本身。附上 DBeaver 的图像:
有什么提示吗?看起来和这个[INSQL]有关系
要查找视图引用的表,有几个选项可用,最简单的可能是使用
sql_expression_dependencies
select referenced_entity_name
from sys.sql_expression_dependencies
where referencing_id=Object_Id('View name')
我也许能够为那些偶然接触到这个主题的人稍微介绍一下 Wonderware INSQL。 我是一名 DBA,最近从 XOM 继承了 Wonderware 系统,并且我一直在实施一些程序以将当前/历史数据拉入其他系统。
我不知道我正在处理的实现是否正常,但运行时数据库是一个常规的 SQL 数据库< 100MB. It mostly contains metadata such a list of Tags and other organizational stuff. All the big stuff lies in that INSQL linked-server, which is referenced by many of the views in the Runtime db.
请注意,提供程序要求您在从[历史记录]视图中提取数据时指定一些标签过滤条件。 它可以是两边带有通配符的 like 子句。 它不能是子查询。我们当前的导出例程在其他查询中使用带有大量标签的 IN 子句和一些其他 LIKE 子句。
如果您以多种方式按同一列进行过滤(即:TagName IN 'something123' 和 TagName like '%blahblah_OilValue'),它将不会处理这两个子句。
这是一个例子:
select *
FROM Runtime.dbo.history
WHERE TagName in ('WELL001.METERTypeABC.001_Gas_PreviousDay')
AND wwRetrievalMode = 'Cyclic'
AND wwResolution = '86400000'
AND wwVersion = 'Latest'
AND [DateTime] >= '7/1/2024'
AND [DateTime] <= '7/2/2024'
AND [Value] IS NOT NULL
order by [DateTime] desc
请注意,我见过的两种检索模式是 Cyclic 和 Delta。
循环似乎执行动态计算,如果您的时间跨度跨越零/错误值的一天,则可能会导致错误值。 wwResolution 似乎是 24 小时采样周期中的毫秒数。 除了 wwVersion 之外,还有许多与数据质量相关的标志。
所以我认为没有任何方法可以在此 INSQL 表上实现本机更改检测。相反,我建议按计划从该视图中复制数据,可能会向其中添加一些校验和/哈希并与先前的值进行比较。 但根据我自己的发现,我会尝试只选择 24 小时的时间跨度。