您可以通过创建实时计算数据视图简化开发过程。

背景信息

通常,业务逻辑比较复杂时,需要将多层嵌套写在DML语句中,但是这种方式定位问题比较困难。此时,您可以通过定义数据视图的方式,将多层嵌套写在数据视图中,简化开发过程。
说明 数据视图仅用于辅助计算逻辑的描述,不会产生数据的物理存储。

语法

CREATE VIEW viewName[ (columnName[ , columnName]* ) ] AS queryStatement;
  • viewName:视图名称。
  • columnName:字段名称。
  • queryStatement:嵌套语句别名。

示例1

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;

示例2

  • 测试数据
    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',
      ...
    );
    
    CREATE TABLE rds_output (
       a VARCHAR,
       b TIMESTAMP, 
       cnt BIGINT,
       PRIMARY KEY(a)
    )WITH(
      TYPE = 'rds',
      ...
    );
    
    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