Google BigQuery:TABLE_QUERY 和 TABLE_DATE_RANGE

Posted

技术标签:

【中文标题】Google BigQuery:TABLE_QUERY 和 TABLE_DATE_RANGE【英文标题】:Google BigQuery: TABLE_QUERY AND TABLE_DATE_RANGE 【发布时间】:2017-04-06 04:41:44 【问题描述】:

我有如下所示的 Big Query 表,并且想向标记为 <= 的表发出查询。

prefix_AAAAAAA_20170320
prefix_AAAAAAA_20170321
prefix_AAAAAAA_20170322 <=
prefix_AAAAAAA_20170323 <=
prefix_AAAAAAA_20170324 <=
prefix_AAAAAAA_20170325
prefix_BBBBBBB_20170320
prefix_BBBBBBB_20170321
prefix_BBBBBBB_20170322 <=
prefix_BBBBBBB_20170323 <=
prefix_BBBBBBB_20170324 <=
prefix_BBBBBBB_20170325
prefix_CCCCCCC_20170320
prefix_CCCCCCC_20170321
prefix_CCCCCCC_20170322
prefix_CCCCCCC_20170323
prefix_CCCCCCC_20170324
prefix_CCCCCCC_20170325

我这样查询

SELECT * FROM 
  (TABLE_QUERY(mydataset, 
    'table_id CONTAINS "prefix" AND 
    (table_id CONTAINS "AAAAAA" OR table_id CONTAINS "BBBBBB")' )
   AND
   TABLE_DATE_RANGE(mydataset.prefix, TIMESTAMP('2017-03-22'), TIMESTAMP('2017-03-24')))

我收到了这个错误。

Error: Encountered " "AND" "AND "" at line 5, column 4. Was expecting: ")" ...

有人有想法吗?

【问题讨论】:

【参考方案1】:

您不能将 TABLE_QUERY 和 TABLE_DATE_RANGE 混用以获得完全相同的 FROM!

试试下面的方法

#legacySQL
SELECT * 
FROM (TABLE_QUERY(mydataset, 'REGEXP_MATCH(table_id, "prefix_[AB]7_2017032[234]")'))  

考虑Migrating to BigQuery Standard SQL

这种情况下你可以Query Multiple Tables Using a Wildcard Table

How to Migrate from TABLE_QUERY() to _TABLE_SUFFIX

我认为,在这种情况下,您的查询可能看起来像

#standardSQL
SELECT * 
FROM `mydataset.prefix_*`
WHERE REGEXP_CONTAINS(_TABLE_SUFFIX, '[AB]7_2017032[234]')  

我无法迁移到标准 SQL,因为 ... 如果我想在 2017-03-29 和 2017-04-02 之间搜索例如,你有没有智能 SQL

试试下面的版本

#legacySQL
SELECT * 
FROM (TABLE_QUERY(mydataset, 
    'REGEXP_MATCH(table_id, r"prefix_[AB]7_(\d)8") AND 
    RIGHT(table_id, 8) BETWEEN "20170329" AND "20170402"'))  

当然你可以在上面调整以使用你需要应用的任何逻辑!

【讨论】:

感谢您的回复。我无法迁移到标准 SQL,因为我必须使用标准 SQL 不支持的 PERCENTILE_DISC 函数。如果我想在 2017-03-29 和 2017-04-02 之间搜索例如,你有什么智能 SQL 吗? 我想我回答的正是你原来的问题。并且仍然使用旧版 sql。是的,我确实为您的下一个问题提供了智能 sql,但 cmets 的格式不允许我把它放在这里。请接受并投票给这个答案,然后提出新问题,我很乐意再次回答这个问题 @N.F. - 请参阅我的答案中的更新。请考虑对答案进行投票。这让我们有动力回答您的问题 :o) 请考虑! 感谢您的回复!这正是我想要的。我稍微修改了你最后的 SQL 以避免错误。

以上是关于Google BigQuery:TABLE_QUERY 和 TABLE_DATE_RANGE的主要内容,如果未能解决你的问题,请参考以下文章

com.google.cloud.bigquery.BigQueryException:读取超时

将表从 google bigquery 导出到 google 存储

Google BigQuery 的 Google App Engine 授权

使用命令行将数据从 BigQuery 加载到 Google 表格中

Google 标准 SQL UDF - 写入 BigQuery

将数据从 Google 永久磁盘加载到 BigQuery?