Google BigQuery - 将通配符表查询与日期分区表一起使用?

Posted

技术标签:

【中文标题】Google BigQuery - 将通配符表查询与日期分区表一起使用?【英文标题】:Google BigQuery - Using wildcard table query with date partitioned table? 【发布时间】:2016-10-06 06:27:02 【问题描述】:

我正在尝试使用通配符表函数来查询一堆日期分区表。

这个查询有效:

select * from `Mydataset.fact_table_1` where _partitiontime='2016-09-30' limit 10

此查询不起作用:

select * from `Mydataset.fact_table_*` where _partitiontime='2016-09-30' limit 10

不支持此操作吗?

如果不支持从多个日期分区表中读取同一天数据的最佳方法是什么?

【问题讨论】:

你能澄清一下你所说的“不起作用”是什么意思吗?您是否收到错误,或者结果是意外的问题? 我收到错误 -“无法识别的名称:_partitiontime” .. 如果我不使用通配符或不使用 _partitiontime,则同样有效。我不能在同一个查询中同时使用它们。 我认为如果你使用通配符表,你必须过滤_TABLE_SUFFIX,或者至少这是我对cloud.google.com/bigquery/docs/querying-wildcard-tables的解释。我不确定您是否可以同时使用 _TABLE_SUFFIX_PARTITIONTIME,但我请同事确认。 我可以在旧版 sql 中使用 TABLE_QUERY 以及 PARTITIONTIME。因此,如果我想列出所有表的分区 - 从 (TABLE_QUERY(Mydataset, 'table_id CONTAINS "fact_table"')) 组中选择 _partitiontime 作为 pt by 1 这里是功能请求的链接,仅供参考:code.google.com/p/google-bigquery/issues/detail?id=728。 【参考方案1】:

以下声明

select * from TABLE_QUERY(YOUR_DATASET,'table_id contains "fact_table_"') where _PARTITIONTIME = TIMESTAMP('2016-09-30')

应该做的伎俩

【讨论】:

这行得通,但我正在寻找使用 standard_sql 而不是旧版 sql 的解决方案。 嗨@TimS 你有没有找到一个使用标准sql的解决方案?我尝试使用 UNION ALL,但这太慢了。

以上是关于Google BigQuery - 将通配符表查询与日期分区表一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 能否在 Google Cloud Storage 中基于 CSV 文件的外部表中使用通配符?

BigQuery 通配符表 - 有啥限制?

bigquery 通配符表查询不允许选择某些字段

从 BigQuery 中的最新表分区通配符查询

Bigquery 使用 Union All 和通配符删除查询

带有日期列的 BigQuery 标准 SQL 表通配符