使用Spark引擎执行SQL

为用户提供了两种使用OmniMV物化视图Spark引擎执行SQL的方式,均可用于重写SQL的物理执行计划。

前提条件

请参见安装特性完成OmniMV物化视图安装,并参见《Spark 部署指南》完成Spark的部署。

使用OmniMV物化视图执行SQL的方式

可以通过两种方式使用OmniMV物化视图Spark引擎执行SQL,均可自动进行执行计划重写。

OmniMV物化视图Spark引擎支持的语法

表1 OmniMV物化视图Spark引擎支持的语法

操作名称

操作语法

Create MV(创建视图)

CREATE MATERIALIZED VIEW [IF NOT EXISTS] [db_name.]mv_name

[DISABLE REWRITE]

[COMMENT 'mv_comment']

[PARTITIONED BY (col_name, ...)]

AS

<query>;

Drop MV(删除视图)

DROP MATERIALIZED VIEW [IF EXISTS] [db_name.]mv_name;

Show MVS(枚举视图)

SHOW MATERIALIZED VIEWS [ON [db_name.]mv_name];

Alter MV rewrite(更新视图配置,是否参与重写)

ALTER MATERIALIZED VIEW [db_name.]mv_name ENABLE|DISABLE REWRITE;

Refresh MV (更新视图数据)

REFRESH MATERIALIZED VIEW [db_name.]mv_name;

WASH OUT MATERIALIZED VIEW(淘汰视图)

--ALL:淘汰所有视图

--UNUSED_DAYS策略(默认):淘汰${UNUSED_DAYS}未使用过的视图

--RESERVE_QUANTITY_BY_VIEW_COUNT策略:保留使用次数前${RESERVE_QUANTITY_BY_VIEW_COUNT}的视图

--DROP_QUANTITY_BY_SPACE_CONSUMED策略:淘汰占用空间前${DROP_QUANTITY_BY_SPACE_CONSUMED}的视图

WASH OUT [ALL] MATERIALIZED VIEW [

USING

[UNUSED_DAYS,]

[RESERVE_QUANTITY_BY_VIEW_COUNT,]

[DROP_QUANTITY_BY_SPACE_CONSUMED]

]

查看OmniMV物化视图Spark引擎是否加载成功

  1. 使用方式一进入spark-sql客户端手动执行SQL。
  2. 执行枚举视图命令,返回信息如下图所示,说明Plugin加载成功。

    1
    SHOW MATERIALIZED VIEWS;
    

  3. 创建样例基本表和样例视图。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    CREATE TABLE IF NOT EXISTS column_type(
        empid INT,
        deptno INT,
        locationid INT,
        booleantype BOOLEAN,
        bytetype BYTE,
        shorttype SHORT,
        integertype INT,
        longtype LONG,
        floattype FLOAT,
        doubletype DOUBLE,
        datetype DATE,
        timestamptype TIMESTAMP,
        stringtype STRING,
        decimaltype DECIMAL
    );
    INSERT INTO TABLE column_type VALUES(
        1,1,1,TRUE,1,1,1,1,1.0,1.0,
        DATE '2022-01-01',
        TIMESTAMP '2022-01-01',
        'stringtype1',1.0
    );
    INSERT INTO TABLE column_type VALUES(
        2,2,2,TRUE,2,2,2,2,2.0,2.0,
        DATE '2022-02-02',
        TIMESTAMP '2022-02-02',
        'stringtype2',2.0
    );
    

  4. 创建物化视图。

    1
    2
    3
    CREATE MATERIALIZED VIEW IF NOT EXISTS mv_create1
    AS
    SELECT * FROM column_type;
    

  5. 通过EXPLAIN SQL,来查看查询的执行计划是否被重写。

    1
    2
    EXPLAIN 
    SELECT * FROM column_type;