配置基于文件的外部表

基于文件的外表配置

云平台普遍支持通用的对象存储系统,提供对文件的可扩展读写能力,是广泛使用的一类面向湖场景的数据存储平台,本文介绍基于文件的外部表配置方法。

安装扩展

安装extension,仅需要安装一次,如果已经安装过,可以忽略。

CREATE EXTENSION file_fdw;

创建文件存储外部服务器

创建阿里云OSS的外部服务器

CREATE SERVER <server_name> FOREIGN DATA WRAPPER file_fdw
OPTIONS (
 REGION 'region-id',
 OSS_ENDPOINT 'endopint-url'
);
-- 参考示例
CREATE SERVER oss_server FOREIGN DATA WRAPPER file_fdw
OPTIONS (
 REGION 'oss-cn-beijing',
 OSS_ENDPOINT 'https://oss-cn-beijing-internal.aliyuncs.com/' -- 同一区域建议使用oss内网地址
);

创建AWS S3的外部服务器

CREATE SERVER <server_name> FOREIGN DATA WRAPPER file_fdw
OPTIONS (
 REGION 'region-id'
);
-- 参考示例
CREATE SERVER s3_server FOREIGN DATA WRAPPER file_fdw
OPTIONS (
 REGION 'cn-north-1'
);

创建用户映射

为本地用户账号授予对应的对象存储的访问权限,通过access_idaccess_key授权。

CREATE USER MAPPING FOR <local_user> SERVER oss_server
OPTIONS (
 ACCESS_ID 'access-id',
 ACCESS_KEY 'access-key'
);

创建外表

CREATE FOREIGN TABLE <table_name> (
    <column_name> <data_type>,
     ...          
    )      
SERVER <server_name>      
OPTIONS (         
   FILENAME '<path_to_file>', 
   DIR '<path_to_oss>',        
   FORMAT '<csv|text|parquet|orc>'      
);   
  • OPTIONS中的FILENAME指定外部文件的路径

  • OPTIONS中的DIR指定外部对象存储的目录路径

  • OPTIONS中的FORMAT指定文件格式,可以是csv(逗号分隔),text(纯文本),parquet,orc

-- create paquet table
CREATE FOREIGN TABLE f_t1(
  col1 INT,
  col2 TEXT  -- 手动定义schema
) 
SERVER oss_server 
OPTIONS
(
 FORMAT 'parquet',  -- 或者orc
 DIR 'oss://demo-bj/data/'
);
 
-- 从外表导入到 protonbase 内表
INSERT INTO local_t1 SELECT * FROM f_t1;