如果计算的逻辑比较复杂,用一个SQL难以描述,您可以通过实时计算 Flink所支持的定义视图的方式,简化开发过程。需要明确的是,视图仅仅用于辅助计算逻辑的描述,不会产生数据的物理存储。视图是一种简便的方法,可以通过提供片段名称将SQL转换成可管理的视图块,并且不额外占用系统空间。
语法
CREATE VIEW viewName[ (columnName[ , columnName]*) ]AS queryStatement;
示例一
CREATE VIEW LargeOrders(r, t, c, u) ASSELECT rowtime,productId,c,unitsFROM Orders;INSERT INTO rds_outputSELECTr,t,c,uFROM 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 ASSELECT a,CAST(HOP_START(d, interval '5' second, interval '30' second) AS TIMESTAMP) AS cc,sum(b) AS cntFROM datahub_streamGROUP BY HOP(d, interval '5' second, interval '30' second),a;INSERT INTO rds_outputSELECTa,cc,cntFROM rds_viewWHERE cnt=4
测试结果
| a(varchar) | b (TIMESTAMP) | cnt (BIGINT) |
|---|---|---|
| test2 | 2017-11-06 16:54:10 | 4 |
本文转自实时计算——
数据视图概念