Google bigquery 在发布的问题中,我声明了一个固定的my_id=1234,因此此列不会是重复项的决定因素。在这种情况下,可以通过使用标量子查询来跳过相关的交叉联接,从而取消对数组的嵌套。这里的最佳解决方案是: 嵌套为 选择e.my_id、SPLITsecondary_id作为arr_secondary_id 从带有_分隔的_字符串_列e的表 其中my_id=1234 选择不同的 从unnest选择arr_secondary_id FROM nested作为

Google bigquery 在发布的问题中,我声明了一个固定的my_id=1234,因此此列不会是重复项的决定因素。在这种情况下,可以通过使用标量子查询来跳过相关的交叉联接,从而取消对数组的嵌套。这里的最佳解决方案是: 嵌套为 选择e.my_id、SPLITsecondary_id作为arr_secondary_id 从带有_分隔的_字符串_列e的表 其中my_id=1234 选择不同的 从unnest选择arr_secondary_id FROM nested作为,google-bigquery,Google Bigquery,请注意,括号将SELECT括在unnest中。它们是必需的,否则您将收到如下消息: UNNEST的参数是一个表达式,而不是一个查询;使用查询 作为一个表达式,查询必须用附加的 括号使其成为标量子查询表达式 嵌套在my_id筛选之后也应该只有一行,否则您会发现 标量子查询生成了多个元素 谢谢@mikhail berlyant。在我看来,FROM子句中的多个表是交叉连接的语法糖分。您是否解释了为什么需要包含父表?我想避免交叉连接,因为表相当大。谢谢。实际上,它不是常规的交叉连接,而是将每一行变平,所

请注意,括号将SELECT括在unnest中。它们是必需的,否则您将收到如下消息:

UNNEST的参数是一个表达式,而不是一个查询;使用查询 作为一个表达式,查询必须用附加的 括号使其成为标量子查询表达式

嵌套在my_id筛选之后也应该只有一行,否则您会发现

标量子查询生成了多个元素


谢谢@mikhail berlyant。在我看来,FROM子句中的多个表是交叉连接的语法糖分。您是否解释了为什么需要包含父表?我想避免交叉连接,因为表相当大。谢谢。实际上,它不是常规的交叉连接,而是将每一行变平,所以不用担心表的大小。这与交叉连接两个表完全不同。从sugar开始-在这种情况下,您必须指定嵌套的表,否则bigquery将如何知道数据源。用语句定义CTEThanks@mikhail berlyant。在我看来,FROM子句中的多个表是交叉连接的语法糖分。您是否解释了为什么需要包含父表?我想避免交叉连接,因为表相当大。谢谢。实际上,它不是常规的交叉连接,而是将每一行变平,所以不用担心表的大小。这与交叉连接两个表完全不同。从sugar开始-在这种情况下,您必须指定嵌套的表,否则bigquery将如何知道数据源。WITH语句只定义CTE
WITH nested AS
(
  SELECT e.my_id , SPLIT(secondary_ids, '<#>') AS arr_secondary_ids
  FROM table_with_delimited_string_column e
  WHERE my_id = 1234
) SELECT * FROM nested
CROSS JOIN UNNEST(nested.arr_secondary_ids) as unnested_output
SELECT my_id, unnested_output FROM 
(WITH nested AS
    (
      SELECT e.my_id , SPLIT(secondary_ids, '<#>') AS arr_secondary_ids
      FROM table_with_delimited_string_column e
      WHERE my_id = 1234
    ) SELECT * FROM nested
    CROSS JOIN UNNEST(nested.arr_secondary_ids) as unnested_output
) as a;
WITH nested AS
(
  SELECT e.my_id , SPLIT(secondary_ids, '<#>') AS arr_secondary_ids
  FROM table_with_delimited_string_column e
  WHERE my_id = 1234
)
SELECT DISTINCT a
FROM nested, UNNEST(arr_secondary_ids) a