STEP - Amazon Kinesis Data Analytics

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

STEP

STEP ( <time-unit> BY INTERVAL '<integer-literal>' <interval-literal> ) STEP ( <integer-expression> BY <integer-literal> )

STEP 将输入值(<time-unit> 或 <integer-expression>)向下舍入到 <integer-literal> 的最接近的倍数。

STEP 函数适用于日期时间数据类型或整数类型。STEP 是一个标量函数,用于执行类似于 FLOOR 的操作。但是,通过使用 STEP,您可以指定一个任意时间或整数间隔来向下舍入第一个参数。

如果任何输入参数为 null,则 STEP 返回 null。

具有整数参数的 STEP

当使用整数参数调用时,STEP 返回 <interval-literal> 参数的满足以下条件的最大整数倍数:即等于或小于 <integer-expression> 参数。例如,STEP(23 BY 5) 返回 20,因为 20 是 5 的满足以下条件的最大倍数:即小于 23。

STEP ( <integer-expression > BY <integer-literal> ) 等效于以下内容。

( <integer-expression> / <integer-literal> ) * <integer-literal>

示例

在以下示例中,返回值是 <integer-literal> 的满足以下条件的最大倍数:即等于或小于 <integer-expression>。

函数

结果

STEP(23 BY 5)

20

STEP(30 BY 10)

30

具有日期类型参数的 STEP

当通过日期、时间或时间戳参数调用时,STEP 将返回小于或等于输入的最大值,具体取决于 <time unit> 指定的精度。

STEP(<datetimeExpression> BY <intervalLiteral>) 等效于以下内容。

(<datetimeExpression> - timestamp '1970-01-01 00:00:00') / <intervalLiteral> ) * <intervalLiteral> + timestamp '1970-01-01 00:00:00'

<intervalLiteral> 可以是以下项之一:

  • YEAR

  • MONTH

  • DAY

  • HOUR

  • MINUTE

  • SECOND

示例

在以下示例中,返回值是以 <integer-literal> 指定的单位表示的 <intervalLiteral> 最新倍数,它等于或早于 <datetime-expression>。

函数

结果

STEP(CAST('2004-09-30 13:48:23' as TIMESTAMP) BY INTERVAL '10' SECOND)

'2004-09-30 13:48:20'

STEP(CAST('2004-09-30 13:48:23' as TIMESTAMP) BY INTERVAL '2' HOUR)

'2004-09-30 12:00:00'

STEP(CAST('2004-09-30 13:48:23' as TIMESTAMP) BY INTERVAL '5' MINUTE)

'2004-09-30 13:45:00'

STEP(CAST('2004-09-27 13:48:23' as TIMESTAMP) BY INTERVAL '5' DAY)

'2004-09-25 00:00:00.0'

STEP(CAST('2004-09-30 13:48:23' as TIMESTAMP) BY INTERVAL '1' YEAR)

'2004-01-01 00:00:00.0'

GROUP BY 子句中的 STEP(滚动窗口)

在此示例中,聚合查询具有一个 GROUP BY 子句,该子句将 STEP 应用于将流分组为有限行的 ROWTIME

CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ( ticker_symbol VARCHAR(4), sum_price DOUBLE); -- CREATE OR REPLACE PUMP to insert into output CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM ticker_symbol, SUM(price) AS sum_price FROM "SOURCE_SQL_STREAM_001" GROUP BY ticker_symbol, STEP("SOURCE_SQL_STREAM_001".ROWTIME BY INTERVAL '60' SECOND);

结果

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

Data table showing ROWTIME, TICKER_SYMBOL, and SUM_PRICE columns with sample entries.

OVER 子句中的 STEP(滑动窗口)

CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ( ingest_time TIMESTAMP, ticker_symbol VARCHAR(4), ticker_symbol_count integer); --Create pump data into output CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" -- select the ingest time used in the GROUP BY clause SELECT STREAM STEP(source_sql_stream_001.approximate_arrival_time BY INTERVAL '10' SECOND) as ingest_time, ticker_symbol, count(*) over w1 as ticker_symbol_count FROM source_sql_stream_001 WINDOW w1 AS ( PARTITION BY ticker_symbol, -- aggregate records based upon ingest time STEP(source_sql_stream_001.approximate_arrival_time BY INTERVAL '10' SECOND) -- use process time as a trigger, which can be different time window as the aggregate RANGE INTERVAL '10' SECOND PRECEDING);

结果

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

Table showing ROWTIME, INGEST_TIME, TICKER_SYMBOL, and TICKER_SYMBOL_COUNT columns with sample data.

注意

STEP (B <datetime expression>Y<literal expression>) 是Amazon Kinesis Data Analytics 扩展程序。

您可以使用 STEP 通过滚动窗口聚合结果。有关滚动窗口的详细信息,请参阅滚动窗口概念