如果计算的逻辑比较复杂,用一个SQL难以描述,您可以通过实时计算 Flink所支持的定义视图的方式,简化开发过程。需要明确的是,视图仅仅用于辅助计算逻辑的描述,不会产生数据的物理存储。视图是一种简便的方法,可以通过提供片段名称将SQL转换成可管理的视图块,并且不额外占用系统空间。
语法
CREATE VIEW viewName
[ (columnName[ , columnName]*) ]
AS queryStatement;
示例一
CREATE VIEW LargeOrders(r, t, c, u) AS
SELECT rowtime,
productId,
c,
units
FROM Orders;
INSERT INTO rds_output
SELECT
r,t,c,u
FROM LargeOrders;
示例二
测试数据
a(varchar) | b(bigint) | c(TIMESTAMP) |
---|---|---|
test1 | 1 | 1506823820000 |
test2 | 1 | 1506823850000 |
test1 | 1 | 1506823810000 |
test2 | 1 | 1506823840000 |
test2 | 1 | 1506823870000 |
test1 | 1 | 1506823830000 |
test2 | 1 | 1506823860000 |
测试语句
CREATE TABLE datahub_stream (
a varchar,
b BIGINT,
c TIMESTAMP,
d AS PROCTIME()
) WITH (
type='datahub',
endPoint='http://dh-cn-hangzhou.aliyuncs.com',
project='blink_test',
topic='window_count',
accessId='LTAIYtafPsXXXX',
accessKey='gUqyVwfkK2vfJI7jF90QLXXXXk'
);
CREATE TABLE rds_output (
a varchar,
b TIMESTAMP,
cnt BIGINT,
PRIMARY KEY(a)
)with(
type = 'rds',
url='jdbc:mysql://rm-bp1gz4k20XXXXX.mysql.rds.aliyuncs.com:3306/XXXXX',
tableName='window_rds',
userName='XXXX',
password='XXXX'
);
CREATE VIEW rds_view AS
SELECT a,
CAST(HOP_START(d, interval '5' second, interval '30' second) AS TIMESTAMP) AS cc,
sum(b) AS cnt
FROM datahub_stream
GROUP BY HOP(d, interval '5' second, interval '30' second),a;
INSERT INTO rds_output
SELECT
a,
cc,
cnt
FROM rds_view
WHERE cnt=4
测试结果
a(varchar) | b (TIMESTAMP) | cnt (BIGINT) |
---|---|---|
test2 | 2017-11-06 16:54:10 | 4 |
本文转自实时计算——
数据视图概念