`t(sites)` 对 presto 查询意味着什么?

What does `t(sites)` means for presto query?

Here 是来自 aws 网站的片段:

WITH dataset AS (
  SELECT ARRAY[
    CAST(
      ROW('aws.amazon.com', ROW(true)) AS ROW(hostname VARCHAR, flaggedActivity ROW(isNew BOOLEAN))
    ),
    CAST(
      ROW('news.cnn.com', ROW(false)) AS ROW(hostname VARCHAR, flaggedActivity ROW(isNew BOOLEAN))
    ),
    CAST(
      ROW('netflix.com', ROW(false)) AS ROW(hostname VARCHAR, flaggedActivity ROW(isNew BOOLEAN))
    )
  ] as items
)
SELECT sites.hostname, sites.flaggedActivity.isNew
FROM dataset, UNNEST(items) t(sites)
WHERE sites.flaggedActivity.isNew = true;

而且有效!但是 t(sites) 是什么意思呢?当我尝试使用真正的 table 而不是 dataset 时,我得到了错误 Table 'site' not found.

它看起来很奇怪 - 就像用 UNNEST 关键字调用的函数。有人可以解释一下这是什么吗?

FROM dataset, UNNEST(items) t(sites)

UNNEST() 是一个集合返回函数:它生成一系列行,其中一列保存原始数组中的值。

这组行也称为 派生的 table。这里 t 是派生 table 的别名,site 是派生 table.

中(唯一)列的名称

加上AS关键字可能更容易理解:

FROM dataset, UNNEST(items) AS t(sites)