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

CREATE EXTERNAL SCHEMA

功能描述

创建EXTERNAL SCHEMA,即外部模式。该语法仅8.3.0及以上版本支持。

创建EXTERNAL SCHEMA来访问Lakeformation、DLI、Hive Metastore的表。用户可以使用外部模式名作为前缀进行访问,若无模式名前缀,则访问当前模式下的命名对象。

注意事项

  • 只要拥有当前数据库CREATE权限的用户,就可以创建外部SCHEMA。
  • 创建命名对象时不可用EXTERNAL SCHEMA作为前缀修饰,即不支持在EXTERNAL SCHEMA下创建对象。
  • CREATE EXTERNAL SCHEMA不支持在新模式中创建对象的子命令。

语法格式

  • 根据指定的名称创建EXTERNAL SCHEMA。
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE EXTERNAL SCHEMA schema_name 
        WITH SOURCE source_name
             DATABASE 'database_name'
             SERVER server_name
             [ CATALOG 'catalog_name' ]
             [ OPTIONS ( { option_name ' value ' } [, ...] ) ]
             [METAADDRESS 'address']
             [CONFIGURATION 'confpath'];
    

参数说明

表1 CREATE EXTERNAL SCHEMA参数说明

参数

描述

取值范围

schema_name

外部模式名称。

  • 模式名不能和当前数据库里其他的模式重名。
  • 模式的名称不可以“pg_”开头。

字符串,需符合标识符命名规范

SOURCE

外部元数据存储引擎的类型。

当前仅支持dli,lakeformation,hive。

DATABASE

指定外部SCHEMA所对应的要访问的数据库。

-

SERVER

外部SCHEMA关联的外部服务器名称,关联后可访问到外部数据。

支持关联type类型为lf、obs、dli或hdfs的Server。详情可参见CREATE SERVER

CATALOG

Lakeformation中对应的要访问的catalog,当Server的type为lf时需要指定catalog,否则不需要指定。

-

OPTIONS

用于指定外表数据的各类参数,当前支持的参数类型如右列所示。该参数仅8.3.0及以上版本支持。

dli_project_id:DLI服务对应的项目编号,可在管理控制台上获取项目ID,该参数仅支持type类型为dli的Server。

METAADDRESS

表示Hive Metastore通讯接口。该参数仅9.1.0及以上版本支持。

-

CONFIGURATION

表示Hive Metastore相关配置文件存放路径。该参数仅9.1.0及以上版本支持。

如果当前搜索路径上的模式中存在同名对象时,需要明确指定引用对象所在的模式。可以通过命令SHOW SEARCH_PATH来查看当前搜索路径上的模式。

示例:通过external schema读取Lakeformation表

通过external schema读取Lakeformation表的方式如下:
  1. 创建lf_server,对应的foreign data wrapper为DFS_FDW。

    如何创建lf_server请参见《数据仓库服务用户指南》中“管理LakeFormation数据源”章节。

  2. 创建external schema。

    SOURCE填写lakeformation,表关联的DLI服务器为lf_server,DATABASE为对应的Lakeformation数据库,

    CATALOG为对应要访问的Lakeformation的CATALOG,根据实际替换。
    1
    2
    3
    4
    5
    CREATE EXTERNAL SCHEMA ex_lf
        WITH SOURCE lakeformation
             DATABASE 'demo'
             SERVER lf_server
             CATALOG 'hive';
    
  3. 角色授权。
    1. 查询当前用户。
      1
      SELECT current_user;
      
    2. Lakeformation管控面创建与当前同名角色并对要访问的表授权。
  4. 通过external schema查询Lakeformation表的数据,test_lf为要访问的Lakeformation表。
    1
    2
    3
    4
    5
    SELECT COUNT(*) FROM ex_dli.test_lf;
     count 
    -------
        20
    (1 row)
    

通过external schema读取Hive Metastore表。

通过external schema读取Hive Metastore表。仅9.1.0及以上版本支持。
  1. 创建obs/hdfs server,对应的foreign data wrapper为DFS_FDW。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    CREATE SERVER hdfs_server 
    FOREIGN DATA WRAPPER HDFS_FDW 
    OPTIONS (
    address '***.***.***.***:9000', 
    type'HDFS');
    
    CREATE SERVER obs_server 
    FOREIGN DATA WRAPPER dfs_fdw 
    OPTIONS ( 
        address 'obs.cn-north-1.myhuaweicloud.com' ,     ACCESS_KEY 'access_key_value_to_be_replaced', 
        SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced', 
        encrypt 'on'
        type 'obs' );
    
  2. 创建external schema,SOURCE为hive,表关联的服务器为obs/hdfs server。其中DATABASE为对应的HMS数据库,METAADDRESS表示Hive Metastore通讯接口,CONFIGURATION表示Hive Metastore相关配置文件存放路径,根据实际替换。
    1
    2
    3
    4
    5
    6
    CREATE EXTERNAL SCHEMA ex_hms 
        WITH SOURCE source_type
        DATABASE 'db_name'
        SERVER srv_name
        METAADDRESS 'address'
        CONFIGURATION 'confpath';
    
  3. 通过external schema查询HMS表的数据,test_hms为要访问的HMS表,根据实际替换。
    1
    2
    3
    4
    5
    SELECT COUNT(*) FROM ex_hms.test_hms;
     count 
    -------
        20
    (1 row)
    

相关链接

ALTER EXTERNAL SCHEMA

相关文档