如何使用通配符表语法(如 _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 FROM my_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 中使用通配符为特定分区查询多个表

SQL 通配符

如何使用通配符导入多个具有相似工作表名称的 Excel 文件?

Lucene/kibana查询 语法

MySQL 在表名中使用通配符