代码之家  ›  专栏  ›  技术社区  ›  Mohan

SQL“FROM UNNEST”的语义是什么?

  •  0
  • Mohan  · 技术社区  · 6 年前

    当我阅读正式语言中的一个表达时,我习惯于从里到外的阅读,即理解子表达并构建整体。在 this SQL snippet :

    SELECT 
      (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'TITLE') AS level_id,
      (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'url') AS url
    FROM `events_20180725`
    WHERE event_name = 'SCI_ERROR'
    

    SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'TITLE'
    

    这不是一个普通的子查询:如果我试图自己运行它,我会得到一个错误,因为 event_params

    • UNNEST 可以与数组以外的其他对象一起使用。
    • 这张桌子有某种装订 events_20180725 用于外部 FROM 这样就可以进入 在子查询内部。

    https://cloud.google.com/bigquery/docs/reference/standard-sql/arrays

    2 回复  |  直到 6 年前
        1
  •  7
  •   user3216191    4 年前

    结构

    对于结构的输入数组,UNNEST为每个结构返回一行,为结构中的每个字段返回一个单独的列。每列的别名是对应结构字段的名称。

    UNNEST 在一个更适用的部分- FROM clause

        2
  •  3
  •   Elliott Brossard    6 年前

    从中选择的外部查询 events_20180725 介绍 event_params UNNEST 函数返回给定列引用的关系,该关系将其他列引入子查询的范围,即 key value 在这种情况下。对于此标量子查询:

    (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'TITLE')
    

    正在筛选 key = 'TITLE' 只有一把钥匙有这个价值。