SELECT ALL 和 SELECT DISTINCT - Amazon Kinesis Data Analytics
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

SELECT ALL 和 SELECT DISTINCT

如果未指定 ALL 关键词,查询不会消除重复行。如果 ALL 和 DISTINCT 均未指定,则这是默认行为。

如果指定了 DISTINCT 关键词,查询将根据 SELECT 子句中的列消除重复的行。

请注意,出于这些目的,值 NULL 将被视为等于其本身而不等于任何其他值。这与 GROUP BY 和 IS NOT DISTINCT FROM 运算符具有相同的语义。

流式 SELECT DISTINCT

只要 SELECT 子句中存在非常量单调表达式,SELECT DISTINCT 就可用于流式查询。(非常量单调表达式的基本原理与流式处理 GROUP BY 相同。)Amazon Kinesis Data Analytics 在适用于 SELECT DISTINCT 的行就绪后将立即发出这些行。

如果 ROWTIME 是 SELECT 子句中的列之一,为了消除重复项,将忽略 ROWTIME。系统将根据 SELECT 子句中的其他列消除重复项。

例如:

SELECT STREAM DISTINCT ROWTIME, prodId, FLOOR(Orders.ROWTIME TO DAY) FROM Orders

显示在任意给定日期订购的唯一产品的集合。

如果您要执行“GROUP BY floor(ROWTIME TO MINUTE)”,并且在某个给定分钟内存在两个行 (假定为 22:49:10 和 22:49:15),则这些行的汇总的时间戳将为 22:50:00。为什么? 因为这是完成该行的最早时间。

注意:“GROUP BY ceil(ROWTIME TO MINUTE)”或“GROUP BY floor(ROWTIME TO MINUTE) - INTERVAL '1' DAY”将提供相同的行为。

它不是用于确定行是否完成的分组表达式的值,而是表达式更改值的时间。

如果您希望输出行的行时间是它们被发出的时间,则在以下示例中,您需要从使用形式 1 改为使用形式 2:

(Form 1)   select distinct floor(s.rowtime to hour), a,b,c   from s (Form 2)   select min(s.rowtime) as rowtime, floor(s.rowtime to hour), a, b, c   from s   group by floor(s.rowtime to hour), a, b, c