
# VIEW
Iceberg视图的设计目标是提供引擎无关的视图定义，确保同一视图可以在不同的查询引擎中保持一致的行为和结果，增强了数据查询的灵活性和兼容性。
Iceberg视图是SQL视图的一种通用表示形式，旨在跨多个查询引擎进行解析。以下内容介绍如何在Spark 3.4及之后版本中创建和管理视图。
#### 基本语法
- 创建视图 创建一个不包含任何注释或属性的简单视图：
  ```
  CREATE VIEW <viewName> AS SELECT * FROM <tableName>;
  ```
  使用**IF NOT EXISTS**可避免因视图已存在而导致语句执行失败：
  ```
  CREATE VIEW IF NOT EXISTS <viewName> AS SELECT * FROM <tableName>;
  ```
  创建包含注释的视图，其中可包含与源表不同的列别名和列注释：
  ```
  CREATE VIEW <viewName> (ID COMMENT 'Unique ID', ZIP COMMENT 'Zipcode')  COMMENT 'View Comment' AS SELECT id, zip FROM <tableName>;
  ```
  
- 创建包含属性的视图： 使用**TBLPROPERTIES**创建包含属性的视图：
  ```
  CREATE VIEW <viewName> TBLPROPERTIES ('key1' = 'val1', 'key2' = 'val2') AS SELECT * FROM <tableName>;
  ```
  查看视图的属性：
  ```
  SHOW TBLPROPERTIES <viewName>;
  ```
  
- 删除视图
  - 删除已存在的视图：
    ```
    DROP VIEW <viewName>;
    ```
    
  
  - 如果视图不存在时不希望语句执行失败，可使用**IF EXISTS** 关键字：
    ```
    DROP VIEW IF EXISTS <viewName>;
    ```
    
   
- 更新视图 如果需要更新视图的Schema、属性或底层SQL语句，可使用**CREATE OR REPLACE**语句覆盖原有视图：
  ```
  CREATE OR REPLACE VIEW <viewName> (updated_id COMMENT 'updated ID') TBLPROPERTIES ('key1' = 'new_val1') AS SELECT id FROM <tableName>;
  ```
  
- 设置或移除视图属性
  - 使用**ALTER VIEW** ... **SET TBLPROPERTIES** 为已存在的视图设置属性：
    ```
    ALTER VIEW <viewName> SET TBLPROPERTIES ('key1' = 'val1', 'key2' = 'val2');
    ```
    
  
  - 使用**ALTER VIEW** ... **UNSET TBLPROPERTIES** 从已存在的视图中移除属性：
    ```
    ALTER VIEW <viewName> UNSET TBLPROPERTIES ('key1', 'key2');
    ```
    
   
- 查看视图 查看当前已设置的命名空间（通过**USE** *\<namespace\>*设置）中的所有视图：
  ```
  SHOW VIEWS;
  ```
  查看指定目录或命名空间中的所有可用视图：
  - 查看指定命名空间（namespace）中的所有视图：
    ```
    SHOW VIEWS IN <namespace>;
    ```
    
  
  - 查看指定目录和命名空间组合中的所有视图：
    ```
    SHOW VIEWS IN <catalog>.<namespace>;
    ```
    
   
- 查看创建视图的语句：
  ```
  SHOW CREATE TABLE <viewName>;
  ```
  
- 使用**DESCRIBE** 查看视图详情：
  ```
  DESCRIBE [EXTENDED] <viewName>;
  ```
  
 
