LAG - Amazon Kinesis Data Analytics

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

LAG

LAG 返回给定窗口中当前记录之前的 N 条记录的表达式(例如列名)的求值。偏移量和默认值都是相对于当前记录进行评估的。如果没有这样的记录,LAG 会改为返回指定的默认表达式。LAG 返回与表达式的类型相同的值。

语法

LAG(expr [ , N [ , defaultExpr]]) [ IGNORE NULLS | RESPECT NULLS ] OVER [ window-definition ]

参数

expr

根据记录计算的表达式。

要查询的当前记录之前的记录数。默认为 1

defaultExpr

与 e xpr 相同类型的表达式,如果查询的记录(在当前记录之前 n)落在窗口之外,则返回该表达式。如果未指定,则为位于窗口外部的值返回 null

注意

defaultExpr 表达式不会替换从源流返回的实际 null 值。

IGNORE NULLS

一个子句,它指定在确定偏移量时不计算空值。例如,假设查询 LAG(expr, 1),并且上一条记录具有为 null 的 expr 值。随后,将查询之前的第二条记录,依此类推。

RESPECT NULLS

一个子句,它指定在确定偏移量时计算空值。此行为是默认行为。

OVER window-specification

一种将流中的记录除以时间范围间隔或记录数的子句。窗口规范定义流中记录的划分方式 (按时间范围间隔或记录数)。

示例

示例数据集

以下示例基于示例股票数据集,后者是《Amazon Kinesis Analytics 开发人员指南》 中的入门练习的一部分。要运行每个示例,您需要一个包含样本股票行情输入流的 Amazon Kinesis Analytics 应用程序。要了解如何创建 Analytics 应用程序和配置示例股票代码输入流,请参阅《Amazon Kinesis Analytics 开发人员指南》 中的入门练习

具有以下架构的示例股票数据集。

(ticker_symbol VARCHAR(4), sector VARCHAR(16), change REAL, price REAL)

示例 1:在 OVER 子句中返回前面的记录中的值

在此示例中,OVER 子句将分区流中的记录除以前 '1' 分钟的时间范围间隔。随后,LAG 函数从包含给定股票代码的前 2 条记录中检索价格值,如果 price 为 null,则跳过记录。

CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ( ticker_symbol VARCHAR(4), price DOUBLE, previous_price DOUBLE, previous_price_2 DOUBLE); CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM ticker_symbol, price, LAG(price, 1, 0) IGNORE NULLS OVER ( PARTITION BY ticker_symbol RANGE INTERVAL '1' MINUTE PRECEDING), LAG(price, 2, 0) IGNORE NULLS OVER ( PARTITION BY ticker_symbol RANGE INTERVAL '1' MINUTE PRECEDING) FROM "SOURCE_SQL_STREAM_001"

上一示例输出的流与以下内容类似。

Table showing stock data with columns for time, ticker symbol, price, and previous prices.

注意

LAG 不是 SQL: 2008 标准的一部分。它是Amazon Kinesis Data Analytics 应用程序。