2017-10-05 147 views
0

我发现使用WITH块来分解查询中的逻辑很有帮助。我是否认为我无法在ARRAY表达式中的嵌套字段上执行此操作?我可以分成嵌套查询 - 这是足够的但不是理想的。WITH&UNNEST in BigQuery

例如,这个工程:

SELECT 
    repository.url, 
    ARRAY(
    SELECT 
    action 
    FROM (
    SELECT 
     action 
    FROM 
     UNNEST(payload.pages))) action 
FROM 
    `bigquery-public-data.samples.github_nested` 

...但是这并不:

SELECT 
    repository.url, 
    ARRAY(
    WITH 
    p AS (
    SELECT 
     action 
    FROM 
     UNNEST(payload.pages)) 
    SELECT 
    action 
    FROM 
    p) action 
FROM 
    `bigquery-public-data.samples.github_nested` 

... Error: Unrecognized name: payload at [9:14]。可能是因为表格尚未定义为WITH块?

是否有另一种方法可以做到这一点?

编辑:这是玩具查询来说明这个问题,不能代表我们正在运行

回答

1

我看到的只是简化唯一的选择/优化您的查询低于实际查询 - 所以不会有需要与内部的ARRAY

#standardSQL 
SELECT 
    repository.url, 
    ARRAY(SELECT action FROM UNNEST(payload.pages)) action 
FROM `bigquery-public-data.samples.github_nested` 
+0

感谢您试用。这是一个玩具查询仅用于显示目的;实际查询更复杂 – Maximilian

+0

我的答案是 - 您不能在ARRAY或任何其他表达式中使用WITH。我只是试图告诉你方向,以防万一你没有意识到你的查询被过度劳动了一点 –

+0

我感谢你的努力! – Maximilian