`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)
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)