更新时间:2025-07-08 GMT+08:00
分享

创建和管理Schema

Schema又称作模式,从逻辑上组织一个数据库中的对象和数据。通过管理Schema,允许多个用户使用同一数据库而不相互干扰,同时便于将第三方应用添加到相应的Schema下而不引起冲突。

相同的数据库对象名称可以应用在同一数据库的不同Schema中,而没有冲突。例如,a_schema和b_schema都可以包含名为mytable的表。具有所需权限的用户可以访问数据库的多个Schema中的对象。

创建Schema

使用CREATE SCHEMA命令来创建一个新的Schema。
1
CREATE SCHEMA myschema;

如果需要在模式中创建或者访问对象,其完整的对象名称由模式名称和具体的对象名称组成。中间由符号“.”隔开。例如:myschema.table。

设置Schema搜索路径

GUC参数search_path设置Schema的搜索顺序,参数取值形式为采用逗号分隔的Schema名称列表。如果创建对象时未指定目标Schema,则该对象会被添加到搜索路径中列出的第一个Schema中。当不同Schema中存在同名的对象时,查询对象未指定Schema的情况下,将从搜索路径中包含该对象的第一个Schema中返回对象。

  • 使用SHOW命令查看当前搜索路径。
    1
    SHOW SEARCH_PATH;
    

    search_path参数的默认值为:default_db。DataArtsFabric SQL会自动帮您创建一个默认Schema。

  • 使用SET命令修改当前会话的默认Schema。例如,将搜索路径设置为myschema1、myschema2,首先搜索myschema1。
    1
    SET SEARCH_PATH TO myschema1, myschema2;
    

使用Schema

在特定Schema下创建对象或者访问特定Schema下的对象,需要使用有Schema修饰的对象名。名称包含Schema名以及对象名,之间用“.”号分开。

  • 在myschema下创建mytable表。以schema_name.table_name格式创建表。
    1
    CREATE TABLE myschema.mytable(id int, name varchar(20)) STORE AS ORC;
    
  • 查询myschema下mytable表的所有数据。
    1
    2
    3
    4
    SELECT * FROM myschema.mytable;
     id | name
    ----+------
    (0 rows)
    

查看Schema

  • 使用current_schema函数查看当前Schema:
    1
    2
    3
    4
    5
    SHOW current_schema;
     current_schema 
    ----------------
     
    (1 row)
    
  • 要查看所有Schema的列表,请执行。
    1
    SHOW SCHEMAS;
    
  • 要查看某Schema详细信息,请执行。
    1
    DESCRIBE SCHEMA myschema;
    

Schema的权限控制

默认情况下,用户只能访问属于自己的Schema中的数据库对象。如需要访问其他Schema的对象,则需赋予对应Schema的usage权限。

当前DataArtsFabric SQL不支持通过SQL执行权限相关操作。您可以通过LakeFormation界面执行权限相关操作,具体操作方法可以参见LakeFormation数据权限概述

删除Schema

  • 使用DROP SCHEMA命令删除一个空的Schema(即该Schema下没有数据库对象)。
    1
    DROP SCHEMA IF EXISTS myschema;
    
  • 默认情况下,删除一个Schema前,它必须为空。 要删除一个Schema及其包含的所有对象(表、数据、函数等),需要使用CASCADE关键字。
    1
    DROP SCHEMA myschema CASCADE;
    

相关文档