【发布时间】:2017-05-24 12:13:18
【问题描述】:
我有一个应用程序必须查询数百个 BigQuery 表(在 Dataflow 作业中),其中一些可能不存在(对于每天发生的事件,有些表按天命名,有些表可能不存在)已创建)。
有没有办法编写一个 BQ SQL 查询,以便它对 some_table if 进行 SELECT 并且仅当命名表存在时,否则不返回任何行?
有人发布了一个查询,如果表存在则返回
#standardSQL
SELECT COUNT(1) AS table_count
FROM `my-project:blah.__TABLES_SUMMARY__`
WHERE table_id = 'some-table-name-2017-04-02'
但我们正在尝试在 Dataflow 中完成工作,并且很难首先在数据流控制结构之外进行这些查询。
有没有办法在单个 SQL 语句中将上述查询与针对该表“some-table-name-2017-04-02”的 SELECT 组合起来,这样如果该表不存在,我们只需没有行回来,而不是错误?
问题在于,如果 BigQuery SQL 解析器引用了不存在的表名,即使没有对该表进行查询,它也不会编译查询。
【问题讨论】:
-
如果您每天只有一张表,其架构中的数据按日期、事件和您需要的所有其他内容分隔,那么它是否适合您,而不是拥有数百个表?这样,您可以保证每天都有表格,并且如果某些查询没有返回给定日期和事件的数据,则不会出现问题。
标签: google-bigquery