上下文:我有一个ETL过程设置,可以使用Python脚本填充数据仓库中的表。脚本通过sqlalchemy执行一个truncate语句来清空每个表,然后使用pandas.to_sql
方法从数据帧加载新的源数据。参见以下片段:
engine.execute(sa_text(f'''TRUNCATE TABLE {schema}.{table}''').execution_options(autocommit=True))
df.to_sql(table, con=engine, schema=schema, if_exists='append', index=False, chunksize=chunksize,
method=method)
问题:奇怪的是,每个表的SQL Server的sys.tablesmodify_date列没有捕获反映最新modify_date的表更改。有人能向我解释为什么会这样,以及我如何修改Python代码和/或SQL Server设置,以准确地捕捉sys.tables中的更改吗?
modify_date
不会捕获TRUNCATE
(或对数据的任何更改(。从关于sys.objects
的文档(sys.tables
就是从这里获得列的(:
上次使用ALTER语句修改对象的日期。如果对象是表或视图,则在创建或更改表或视图上的索引时,modify_date也会更改。
SQL Server默认情况下不跟踪数据修改,而且您似乎只跟踪这些截断操作,在这种情况下,我建议您的应用程序在每个操作成功(或失败(时写入一个日志表。