【发布时间】:2021-07-05 15:56:28
【问题描述】:
我需要在 Vertica DB 中的多个表上运行此查询:
select Distinct period_key from (
select item_key,period_key,store_key,salestype,event_description_key,count(*) from
YYYYYY.DS_AA_FACT_ZZZZZZ_TABLE_NAME
group by item_key,period_key,store_key,salestype,event_description_key
having count(*) > 1
) a
我在上述查询中使用 YYYYYY 和 ZZZZZZ 作为占位符。每个 YYYYYY 数据库名称都有多个具有不同 ZZZZZZ 名称的表。我希望能够运行一个查询并让它在符合该模式的多个表上运行此查询。
在理想情况下,此查询将返回 0 个结果。我正在检查重复(由添加一堆垃圾的错误创建,我没有这样做。)因此,如果它确实有结果,理想情况下,在它遍历所有表之后,输出看起来像 database_name , 表名, period_key, 记录数。
如果我需要在每个数据库上单独运行 YYYYYY 部分,我可以妥协,但是手动查找每个符合该模式的表名并每次更改表名非常繁琐。
如果需要,我什至可以对这些进行硬编码。虽然理想情况下我希望它能够通过查找任何具有 %%%%%%.DS_AA_FACT_%%%%%%_TABLE_NAME
的表名来进行扩展这是在 Vertica DB 上,仅供参考。
【问题讨论】:
-
我对 Vertica 不是很熟悉,但看起来它们不支持动态 SQL 查询,这将使其更具挑战性。您可以使用 v_catalog.tables 获取要工作的表列表(WHERE table_name LIKE 'DS_AA_FACT_%_TABLE_NAME'),然后通过一些外部语言编写脚本。有关使用 bash 的示例,请参见此处:dwgeek.com/vertica-dynamic-sql-support-and-alternative.html
标签: sql sql-server select vertica