更新时间:2024-09-24 GMT+08:00
分享

CREATE EXTERNAL SCHEMA

功能描述

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

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

注意事项

  • 只要拥有当前数据库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'];
    

参数说明

  • schema_name

    外部模式名字。

    取值范围:字符串,要符合标识符的命名规范。

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

    外部元数据存储引擎的类型,当前source_type仅支持dli,lakeformation。

  • DATABASE

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

  • SERVER

    取值范围:已存在的foreign server且type类型为lf或dli。

    通过external schema关联foreign server以达到访问外部数据的目的。

  • CATALOG

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

  • OPTIONS

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

    dli_project_id

    DLI服务对应的项目编号,可在管理控制台上获取项目ID,该参数仅支持server类型为DLI时设置。

  • METAADDRESS

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

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

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

示例

  • 通过external schema读取Lakeformation表。
    • 创建lf_server,对应的foreign data wrapper为DFS_FDW。

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

    • 创建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';
      
    • 角色授权
      • 查询当前用户。
      • SELECT current_user;
      • Lakeformation管控面创建与当前同名角色并对要访问的表授权。
    • 通过external schema查询Lakeformation表的数据,test_lf为要访问的Lakeformation表。
      1
      2
      3
      4
      5
      SELECT COUNT(*) FROM ex_dli.test_lf;
       count 
      -------
          20
      (1 row)
      
  • 通过external schema读取DLI多版本外表。该功能仅8.3.0及以上版本支持。

    支持访问DLI表和LakeHouse模式的DLI内表。

    • 创建dli_server,对应的foreign data wrapper为DFS_FDW。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      CREATE SERVER dli_server FOREIGN DATA WRAPPER DFS_FDW OPTIONS ( 
        ADDRESS 'obs.cn-north-1.myhuaweicloud.com', 
        ACCESS_KEY 'xxxxxxxxx', 
        SECRET_ACCESS_KEY 'yyyyyyyyyyyyy', 
        TYPE 'DLI',
        DLI_ADDRESS 'dli.example.com',
        DLI_ACCESS_KEY 'xxxxxxxxx',
        DLI_SECRET_ACCESS_KEY 'yyyyyyyyyyyyy'
      );
      
      • ADDRESS是OBS的终端节点(Endpoint)。DLI_ADDRESS是DLI的终端节点(Endpoint),请根据实际替换。
      • ACCESS_KEY和SECRET_ACCESS_KEY 是云账号体系访问OBS服务的密钥。请根据实际替换。
      • DLI_ACCESS_KEY和DLI_SECRET_ACCESS_KEY是云账号体系访问DLI服务的密钥。请根据实际替换。
      • TYPE表示创建的Server为DLI Server。请保持DLI取值不变。
    • 创建external schema,SOURCE为dli,表关联的DLI服务器为dli_server。其中project_id为xxxxxxxxxxxxxxx,dli上的database_name为database123,根据实际替换。
      1
      2
      3
      4
      5
      CREATE EXTERNAL SCHEMA ex_dli 
          WITH SOURCE dli
               DATABASE 'database123'
               SERVER dli_server 
               options (dli_project_id 'xxxxxxxxxxxxxxx');
      
    • 通过external schema查询DLI多版本表的数据,test_dli为要访问的DLI表,根据实际替换。
      1
      2
      3
      4
      5
      SELECT COUNT(*) FROM ex_dli.test_dli;
       count 
      -------
          20
      (1 row)
      
  • 通过external schema读取hivemetastore表。仅9.1.0及以上版本支持。
    • 创建obs/hdfs server,对应的foreign data wrapper为DFS_FDW。
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      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' );
      
    • 创建external schema,SOURCE为hive,表关联的服务器为obs/hdfs server。其中DATABASE为对应的HMS数据库,METAADDRESS表示hivemetastore通讯接口,CONFIGURATION表示hivemetastore相关配置文件存放路径,根据实际替换。
      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';
      
    • 通过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

相关文档