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

ALTER FOREIGN TABLE (For HDFS or OBS)

功能描述

对HDFS外表和OBS外表进行修改。

外表(Foreign Table)是数据库或大数据平台中一种虚拟表结构,它不实际存储数据,而是通过元数据信息(如表结构、存储位置、文件格式等)将外部存储系统(如HDFS、OBS等)中的数据映射到数据库内部,使用户能够以标准SQL操作直接访问或操作外部数据。外表的本质是一种“数据代理”,将外部文件系统的数据逻辑映射成数据库可识别的表结构。

外表的核心价值是 “打破数据孤岛”: 通过元数据映射,让数据库用户以熟悉的方式访问外部系统数据,同时支持数据向外部系统的导出,实现跨系统数据的高效协同、分析与共享,尤其在大数据场景中能显著降低数据移动成本、提升协作效率。

注意事项

无。

语法格式

  • 设置外表属性。
    1
    2
    ALTER FOREIGN TABLE [ IF EXISTS ]  table_name
        OPTIONS ( {[ ADD | SET | DROP ] option ['value']} [, ... ]);
    
  • 设置外表的所有者。
    1
    2
    ALTER FOREIGN TABLE [ IF EXISTS ] tablename 
        OWNER TO new_owner;
    
  • 更新外表列。
    1
    2
    ALTER FOREIGN TABLE [ IF EXISTS ] table_name
        MODIFY ( { column_name data_type | column_name [ CONSTRAINT constraint_name ] NOT NULL [ ENABLE ] | column_name [ CONSTRAINT constraint_name ] NULL } [, ...] );
    
  • 修改外表的列。
    1
    2
    ALTER FOREIGN TABLE [ IF EXISTS ] tablename 
        action [, ... ];
    
    其中action语法为:
    1
    2
    3
    4
    5
    6
    7
    ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type
       | ALTER [ COLUMN ] column_name { SET | DROP } NOT NULL
       | ALTER [ COLUMN ] column_name SET STATISTICS [PERCENT] integer
       | ALTER [ COLUMN ] column_name OPTIONS ( {[ ADD | SET | DROP ] option ['value'] } [, ... ])
       | MODIFY column_name data_type
       | MODIFY column_name [ CONSTRAINT constraint_name ] NOT NULL [ ENABLE ]
       | MODIFY column_name [ CONSTRAINT constraint_name ] NULL
    

    参考ALTER TABLE

  • 增加外表信息约束(Informational Constraint)。
    1
    2
    3
    4
    ALTER FOREIGN TABLE [ IF EXISTS ] tablename
        ADD [ CONSTRAINT constraint_name ]
        { PRIMARY KEY | UNIQUE } ( column_name )
        [ NOT ENFORCED [ ENABLE QUERY OPTIMIZATION | DISABLE QUERY OPTIMIZATION ] | ENFORCED ];
    

    对于增加外表信息约束(Informational Constraint)相关参数请参考参数说明

  • 删除外表的信息约束(Informational Constraint)。
    1
    2
    ALTER FOREIGN TABLE [ IF EXISTS ] tablename 
        DROP CONSTRAINT constraint_name ;
    
  • 设置外表行级访问控制开关(9.1.0及以上集群版本支持)。
    ALTER FOREIGN TABLE [ IF EXISTS ] tablename
            ENABLE | DISABLE | FORCE | NO FORCE ROW LEVEL SECURITY

参数说明

表1 ALTER FOREIGN TABLE (For HDFS or OBS)参数说明

参数

描述

取值范围

IF EXISTS

如果指定的外表不存在时返回一个提示而不是错误。

-

tablename

需要修改的外表名称。

已存在的外表名。

new_owner

外表的新所有者。

字符串,有效的用户名。

data_type

已存在字段的新数据类型。

字符串。

constraint_name

要添加/删除的约束的名称。

字符串。

column_name

已存在字段的名称。

字符串。

修改外表语法中其他参数,请参见ALTER TABLE的参数说明

示例

  1. 创建HDFS_Server,对应的foreign data wrapper为HDFS_FDW或者DFS_FDW。
    1
    CREATE SERVER hdfs_server FOREIGN DATA WRAPPER HDFS_FDW OPTIONS (address '10.10.0.100:25000,10.10.0.101:25000',hdfscfgpath '/opt/hadoop_client/HDFS/hadoop/etc/hadoop',type'HDFS');
    
  2. 创建不包含分区列的HDFS外表:
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    DROP FOREIGN TABLE IF EXISTS ft_region;
    CREATE FOREIGN TABLE ft_region
    (
        R_REGIONKEY INT4,
        R_NAME TEXT,
        R_COMMENT TEXT
    )
    SERVER
        hdfs_server
    OPTIONS
    (
        FORMAT 'orc',
        encoding 'utf8',
        FOLDERNAME '/user/hive/warehouse/gauss.db/region_orc11_64stripe/'
    )
    DISTRIBUTE BY 
         roundrobin;
    
  3. 修改外表ft_region的r_name字段类型为text。
    1
    ALTER FOREIGN TABLE ft_region ALTER r_name TYPE TEXT;
    
  4. 标记外表ft_region的r_name列为not null。
    1
    ALTER FOREIGN TABLE ft_region ALTER r_name SET NOT NULL;
    

相关文档