BigQuery从表

时间:2016-06-01 14:10:16

标签: google-bigquery

我有一个表定义一行中的常量。我想通过使用这些常量的值来构造另一个表的查询,如:

  

SELECT DataTable.name FROM DataTable WHERE DataTable.key>   Config.keyConstant

但我不知道如何干净利落地做到这一点。在这种情况下,可以使用CROSS JOIN

来完成
  

SELECT DataTable.name FROM(DataTable CROSS JOIN Config)WHERE DataTable.key>   Config.keyConstant

但是当我的查询变得更大并且在不同的地方需要配置时,这变得非常混乱。

有什么建议吗?在SQL中,我认为你是用变量做的。

编辑:其实我希望能够做类似

的事情
  

SELECT IF(Config.keyConstant * DataTable.key = 1,DataTable.name," John")FROM DataTable

这意味着,遗憾的是,我无法将所有条件逻辑移动到一个WHERE EXISTS子句中,就像答案中建议的那样(虽然我没有意识到这一点,而且很酷)。

2 个答案:

答案 0 :(得分:1)

我认为你的方向正确:

下面的内容应该适用于BigQuery Legacy和Standard SQL,并且Config只有一行会使CROSS JOIN看起来不那么糟糕。

SELECT DataTable.name 
FROM DataTable 
CROSS JOIN Config
WHERE DataTable.key1 > Config.key1Constant
  AND DataTable.key2 = Config.key2Constant
  AND DataTable.key3 < Config.key3Constant

在BigQuery Standard SQL中,您可以将其更改为以下内容,这在某种程度上让我看起来更具便携性:

SELECT
  DataTable.name
FROM DataTable
WHERE EXISTS (
  SELECT 1 FROM config
  WHERE DataTable.key1 > key1Constant
    AND DataTable.key2 = key2Constant
    AND DataTable.key3 < key3Constant
)   

很少注意到:

  • 成本明智 - 即使Config表很小 - 每次它都会为账单字节贡献额外的10MB
  • 在Config中有额外的列(如id)将允许您通过调用特定的id值来管理要使用的不同版本的常量。或者基于条件的逻辑可用于调用所需的常量

答案 1 :(得分:0)

这是为了回答更新的问题:

Remove cached files