我的问题可能很简单,但是,我一直在寻找答案。
如何检查从Aginity工作台在IBM Netezza SQL中处理表的数据和时间?
在MS SQL服务器中很容易找到它,但是,我无法在Netezza中找到它。
任何帮助都将不胜感激。
谢谢!
答案 0 :(得分:0)
不幸的是,系统不会记录上次在目录元数据中修改表内容的时间。
但是,如果您已打开查询历史记录,则可以从查询历史数据库中挖掘此信息。 $ hist_table_access_ n 表中的USAGE列(其中 n 是您查询历史数据库的版本using)包含有关针对该表执行的操作的信息as documented here。
您可以在where子句中使用此列来过滤表更新时的情况,还可以使用FORMAT_TABLE_ACCESS()函数以人类可读的格式as documented here显示USAGE信息。
这是我们在给定表上查找插入,更新,删除和截断的示例。在我的情况下,我的历史数据库称为HISTDB,历史数据在HISTUSER模式中收集。
SELECT FORMAT_TABLE_ACCESS(usage),
submittime
FROM histdb.histuser."$hist_table_access_3" a
JOIN histdb.HISTUSER."$hist_query_prolog_3" b
ON a.NPSID = b.NPSID
AND a.NPSINSTANCEID = b.NPSINSTANCEID
AND a.OPID = b.OPID
JOIN histdb.HISTUSER."$hist_query_epilog_3" c
ON a.NPSID = c.NPSID
AND a.NPSINSTANCEID = c.NPSINSTANCEID
AND a.OPID = c.OPID
WHERE a.DBNAME = 'TESTDB'
AND a.SCHEMANAME = 'ADMIN'
AND a.TABLENAME = 'HIST_TEST'
AND c.STATUS = 0
AND a.USAGE & (2 + 4 + 8 + 16) <> 0 ;
FORMAT_TABLE_ACCESS | SUBMITTIME
---------------------+----------------------------
ins | 2015-01-21 19:00:10.448681
del | 2015-01-21 19:00:30.094608
upd | 2015-01-21 19:00:49.148814
ins | 2015-01-21 19:00:01.106845
(4 rows)
SELECT MAX(submittime)
FROM histdb.histuser."$hist_table_access_3" a
JOIN histdb.HISTUSER."$hist_query_prolog_3" b
ON a.NPSID = b.NPSID
AND a.NPSINSTANCEID = b.NPSINSTANCEID
AND a.OPID = b.OPID
JOIN histdb.HISTUSER."$hist_query_epilog_3" c
ON a.NPSID = c.NPSID
AND a.NPSINSTANCEID = c.NPSINSTANCEID
AND a.OPID = c.OPID
WHERE a.DBNAME = 'TESTDB'
AND a.SCHEMANAME = 'ADMIN'
AND a.TABLENAME = 'HIST_TEST'
AND c.STATUS = 0
AND a.USAGE & (2 + 4 + 8 + 16) <> 0 ;
MAX
----------------------------
2015-01-21 19:00:49.148814
(1 row)
请注意,这仅适用于已在查询历史数据库中加载的数据,因此根据系统的活动和配置,结果不会是实时的。另请注意,如果您要定期执行此操作,并且性能是一个问题,您可能希望更改where子句以过滤对象ID而不是文本值。