【问题标题】:mystery on BigQuery viewsBigQuery 视图的奥秘
【发布时间】:2015-12-30 15:50:15
【问题描述】:

这是我的谜团。在控制台上,当我计算这个查询时,它运行得非常好:

SELECT rd.ds_id AS ds_id
FROM (SELECT ds_id, 1 AS dummy FROM bq_000010.table) rd
  INNER JOIN EACH (SELECT 1 AS dummy) cal ON (cal.dummy = rd.dummy);

然后我将它保存为一个名为 dataset.myview 的视图,然后运行:

SELECT * FROM dataset.myview LIMIT 1000

但这会引发以下错误:

SELECT 查询引用非常量字段或使用聚合 功能或具有 WHERE、OMIT IF、GROUP BY、ORDER BY 中的一项或多项 子句必须有 FROM 子句。

尽管如此,当我尝试:SELECT * FROM dataset.myview,即没有LIMIT 时,它可以工作!!

事实上,当我在底部使用 LIMIT 运行完整查询时,它也会引发错误:

SELECT rd.ds_id AS ds_id
FROM (SELECT ds_id, 1 AS dummy FROM bq_000010.table) rd
  INNER JOIN EACH (SELECT 1 AS dummy) cal ON (cal.dummy = rd.dummy) LIMIT 1000;

尽管如此,当我添加一个内部 ORDER BY 时,它再次计算得很好:

SELECT rd.ds_id AS ds_id
FROM (SELECT ds_id,
             1 AS dummy
      FROM bq_000010.000010_flux_visites_ds
      ORDER BY ds_id) rd
  INNER JOIN EACH (SELECT 1 AS dummy) cal ON (cal.dummy = rd.dummy) LIMIT 1000

【问题讨论】:

标签: sql views google-bigquery


【解决方案1】:

如果您将 order by 应用于视图上的选择,会发生什么?还是您需要随机结果?

A query with a LIMIT clause may still be non-deterministic if there is no operator in the query that guarantees the ordering of the output result set. This is because BigQuery executes using a large number of parallel workers. The order in which parallel jobs return is not guaranteed.

我不确定为什么这里的订单会有所不同。但是,看到没有任何顺序的限制通常很奇怪;这就是为什么我询问订单的原因。一个完整的 SWAG 可能是并行工作者在内部选择完成之前完成了外部连接和限制,从而导致内部错误;并且通过系统应用命令,在执行内部连接之前强制实现记录。

但我真的有~~NO CLUE~

【讨论】:

    猜你喜欢
    • 2013-12-29
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多