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 表格中