testbook

创建/修改/删除视图:CREATE/DROP/ALTER VIEW

  • CREATE VIEW
    创建一个视图
    语法
    CREATE VIEW view_name [(column_name,column_name, ...)]
      AS SELECT select_statement;
    
    说明
    • 在创建视图时,指定列名和列值类型不是必须的。
    • CREATE VIEW的语法和CTAS非常相像。区别在于VIEW是非实体化的,CREATE VIEW给查询创建一个快捷方式,而CTAS将查询结果写入磁盘中。
    示例
    下面代码用CREATE VIEW创建了一个视图来显示user_info表中的name, reg_date和acc_level三列:
    [$host]transwarp> CREATE VIEW non_secure_info
                        AS SELECT name, reg_date, acc_level
                        FROM user_info;
    
  • DROP VIEW
    删除一个指定的视图
    语法
    DROP VIEW [IF EXISTS] view_name;
    
    DROP VIEW将指定视图的元数据删除。虽然视图和表有很多共同之处,但是DROP TABLE不能用来删除VIEW。如果删除的视图被其他视图引用,Inceptor不会给出任何警告。依靠于被删除视图的视图会变成无效视图,但是用户需要自己处理这些变成无效的视图。
  • 修改视图属性
    用户自定义的键值对属性也用TBLPROPERTIES来定义:
    语法
    ALTER VIEW view_name SET TBLPROPERTIES table_properties;
    table_properties:
      : (property_name = property_value, property_name = property_value, ...)
    
  • 用ATLER VIEW AS SELECT改变视图定义
    语法
    ALTER VIEW view_name AS select_statement;
    
    ALTER VIEW AS SELECT改变指定视图的定义。在改变一个视图的定义前,该视图的定义必须已经被创建过。如果一个视图有分区,那么它不能通过ALTER VIEW AS SELECT替换。
  • 视图的分区
    语法
    CREATE VIEW view_name [(column_name [COMMENT column_comment], ...) ]
    PARTITIONED ON (col1, col2, ...)
    AS SELECT ...
    
    说明
    • 表的分区使用PARTITIONED BY子句来指定分区键,而视图的分区使用PARTITIONED ON子句来指定分区键。这是为了区分这两种不同的分区方式。为表分区,需要在表定义之外定义分区键,表的分区键不能和列重名;为视图分区,是使用视图定义中已存在的列作为分区键,所以不需要指定分区键的数值类型。
    • 和表的分区相似,PARTITIONED ON子句指定的分区键必须在视图定义(也就是SELECT语句的查询结果)的末尾,而且它们在PARTITIONED ON子句中出现的顺序必须和在视图定义中出现的顺序相同。
    举例
    [$host] transwarp> CREATE VIEW partition_user_info_view PARTITIONED ON (acc_level) AS SELECT * FROM user_info;
    
    [$host]  transwarp> DESCRIBE partition_user_info_view;
    name                    string                  None
    acc_num                 string                  None
    password                string                  None
    citizen_id              string                  None
    bank_acc                string                  None
    reg_date                string                  None
    acc_level               string                  None
    
    # Partition Information
    # col_name              data_type               comment
    
    acc_level               string                  None