我使用了google-cloud-bigquery gem(版本0.20.2,目前无法升级)。
我有一个审核数据集,其中包含许多具有以下格式的表:
audit.some_table20170101
audit.some_table20170102
audit.some_table20170103
等。
我正在尝试运行一个扫描所有这些表的查询,并给我字段some_field的最后一个值。
我的目的是使用表格通配符:
FROM audit.some_table*
并希望
SELECT LAST(some_field) AS last_some_field
使用Bigquery Web控制台时,我能够做到这一点 使用反引号(FROM`audit.some_table *`),但以编程方式对gem进行相同操作会导致Google :: Cloud :: InvalidArgumentError:invalid:无效的表名:`audit.some_table *`
即使在Web控制台中,当我尝试使用LAST命令时,它也需要使用旧版SQL,然后由于前一部分的反引号而产生错误。如果我禁用旧版sql,LAST将不再可用(不熟悉的命令),然后我必须按时间戳列降序排序并限制为1.
任何想法如何解决这些问题并能够使用上面提到的gem和版本进行查询?
答案 0 :(得分:0)
LAST
仅在有订单时才有意义。 BigQuery中的表没有继承顺序,如果运行SELECT * FROM table
,每次都可能得到不同顺序的结果。因此,正确的做法是使用ORDER BY some_value DESC LIMIT 1
构造。
wildcard tables确实只在标准SQL中可用,以获得与Legacy SQL类似的功能,您可以在FROM子句中使用TABLE_DATE_RANGE function。