如何使用通配符表语法(如 _TABLE_SUFFIX)加入 INFORMATION_SCHEMA 元数据,以便在 Google Big Query 中通过 table_name 获得结果
Posted
技术标签:
【中文标题】如何使用通配符表语法(如 _TABLE_SUFFIX)加入 INFORMATION_SCHEMA 元数据,以便在 Google Big Query 中通过 table_name 获得结果【英文标题】:How can I join INFORMATION_SCHEMA metadata with wildcard table syntax like _TABLE_SUFFIX, so I can get results by table_name in Google Big Query 【发布时间】:2020-05-23 20:14:14 【问题描述】:我有一个 Google Big Query 数据集,其中包含使用快照的表(例如:我看到一个名为 .system_users 的表,实际上有多个以 system_users[YYYYMMDD] 格式命名的表)。
我想在“_schema_push_date”列中查询所有快照的唯一值,并显示表的全名。我正在寻找的最终结果:
Row | table_name | _schema_push_date
1 | system_users20200101 | 2020-01-01 09:51:29.251 UTC
2 | system_users20200102 | 2020-01-02 08:53:04.017 UTC
我正在使用
'''WHERE REGEXP_CONTAINS(_TABLE_SUFFIX, r"202001([0-2])")'''
要限制查询的表,但我认为我还需要针对 INFORMATION_SCHEMA.TABLES.TABLE_NAME 加入 _TABLE_SUFFIX 以将表名放入结果中。
可以将 _TABLE_SUFFIX 与 INFORMATIOIN_SCHEMA 数据连接起来吗?
【问题讨论】:
可以使用 INFORMATION_SCHEMA.TABLES 从数据集中获取包含元数据的表,然后使用 _TABLE_SUFFIX/通配符查询实际表,最后连接两个表(并且这两个表都应该在里面With() 语句)。此外,如果您按表名加入,则表名应该是两个表中的列。您能否也检查一下描述类似情况的thread?让我知道结果。 谢谢@muscat - 这没有回答我的问题,但确实让我意识到我可以更好地问它:“使用通配符语法时,我可以在查询结果中包含表的名称吗?”正如您所指出的,要加入,我需要在两个查询中都有一个公共列,例如“table_name”。我的问题实际上是当使用 _TABLE_SUFFIX 作为过滤器时,我只能在结果中得到 _TABLE_SUFFIX 的过滤部分。例如:'select _schema_push_date, count(1), _TABLE_SUFFIX as my_table_name FROMmy_proj.my_dataset.*
WHERE _TABLE_SUFFIX LIKE '%20200523' GROUP BY my_table_name, _schema_push_date'
【参考方案1】:
要在 GBQ 中使用通配符语法时包含表的名称,您必须将 _TABLE_SUFFIX 添加到您的选择语句并为其命名。例如:
select _TABLE_SUFFIX as my_table_name, email, count(1)
FROM `my_project.my_dataset.*`
WHERE REGEXP_CONTAINS(_TABLE_SUFFIX, r"202005[0-3]*")
GROUP BY my_table_name, email
会产生类似
的结果my_table_name | email | f0
my_first_table | my@email.com | 2345
这是一个指向其他伪列的有趣链接: http://bigdata.freeideas.cz/subdom/bigdata/2017/05/30/bigquery-cheat-sheet-standard-sql-meta-tables-pseudo-columns/
【讨论】:
以上是关于如何使用通配符表语法(如 _TABLE_SUFFIX)加入 INFORMATION_SCHEMA 元数据,以便在 Google Big Query 中通过 table_name 获得结果的主要内容,如果未能解决你的问题,请参考以下文章
Bigquery 使用 Union All 和通配符删除查询
如何在 Big Query 的标准 SQL 中使用通配符为特定分区查询多个表