2017-02-09 60 views
0

我已经使用google-cloud-bigquery gem(版本0.20.2,此刻无法升级)。Bigquery通配符查询与红宝石

我有一个审计数据集包含以下格式的许多表:

audit.some_table20170101 
audit.some_table20170102 
audit.some_table20170103 

等。

我想运行一个查询,将扫描所有这些表中,并给我字段some_field的最后一个值。

我打算使用表通配符是:

FROM audit.some_table* 

,并希望

SELECT LAST(some_field) AS last_some_field 
  1. 在使用BigQuery的Web控制台,我能够通过 利用这样做反引号(FROM`audit.some_table *`),但以编程方式与gem一样会导致Google :: Cloud :: InvalidArgumentError:invalid:无效的表名:`audit.some_table *'

  2. 即使在Web控制台中,当我尝试使用LAST命令时,它也需要使用传统SQL,然后由于上一节的反引号而出现错误。如果我禁用传统的SQL,最后就是没有可用的了(不熟悉的命令),然后我有一个时间戳列降序秩序和限制1.

任何想法如何解决这些问题,并能够查询使用上面提到的宝石和版本?

回答

0

LAST只有在有订单时才有意义。 BigQuery中的表格没有继承顺序,并且如果您运行的是SELECT * FROM table,则每次都可能按不同的顺序获得结果。因此,正确的做法是使用ORDER BY some_value DESC LIMIT 1结构。

wildcard tables确实只在标准SQL中可用,为了获得与传统SQL类似的功能,您可以在FROM子句中使用TABLE_DATE_RANGE function