【问题标题】:Bigquery wildcard query with ruby gem使用 ruby​​ gem 的 Bigquery 通配符查询
【发布时间】:2017-02-09 10:20:35
【问题描述】:

我正在使用 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
  1. 在使用 Bigquery Web 控制台时,我可以通过 使用反引号(FROM `audit.some_table*`),但以编程方式对 gem 执行相同操作会导致 Google::Cloud::InvalidArgumentError: invalid: Invalid table name: `audit.some_table*`

  2. 即使在 Web 控制台中,当我尝试使用 LAST 命令时,它也需要使用旧版 SQL,然后由于上一节的反引号而出现错误。如果我禁用旧版 sql,LAST 将不再可用(不熟悉的命令),然后我必须按时间戳列降序排列并限制 1。

任何想法如何解决这些问题并能够使用上述 gem 和版本进行查询?

【问题讨论】:

    标签: ruby google-bigquery wildcard


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-05
      • 2014-05-03
      • 1970-01-01
      • 2019-05-27
      • 2020-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多