更新时间:2026-05-12 GMT+08:00
分享

创建外表

当完成创建外部服务器后,在DWS数据库中创建一个HDFS只写外表,用来访问存储在HDFS上的数据。此外表是只写的,只能用于导出操作。

创建外表的语法格式如下,详细的描述请参见《数据仓库服务SQL语法参考》中“CREATE FOREIGN TABLE (SQL on Hadoop or OBS)”章节。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name 
( [ { column_name type_name 
    [ { [CONSTRAINT constraint_name] NULL |
    [CONSTRAINT constraint_name] NOT NULL |
      column_constraint [...]} ] |
      table_constraint [, ...]} [, ...] ] ) 
    SERVER dfs_server 
    OPTIONS ( { option_name ' value ' } [, ...] ) 
    [ {WRITE ONLY }]
    DISTRIBUTE BY {ROUNDROBIN | REPLICATION}
    [ PARTITION BY ( column_name ) [ AUTOMAPPED ] ] ;

例如,创建一个名为"product_info_ext_obs"的外表,对语法中的参数按如表1描述进行设置:

表1 创建外表参数

参数名

描述

示例

table_name

外表的表名。

product_info_ext_obs

column_nam

外表中的字段名。多个字段用“,”隔开。外表的字段个数和字段类型,需要与OBS上保存的数据完全一致。

product_price

type_name

字段的数据类型。

integer

SERVER dfs_server

外表的外部服务器名称,这个server必须存在。外表通过设置外部服务器连接OBS/HDFS读取数据。

此处应参考创建外部服务器中创建的外部服务器名称填写。

obs_server

OPTIONS

用于指定外表数据的各类参数,关键参数如下所示。

  • “format”:表示导出的数据文件格式,支持“orc”和“parquet”格式。
  • “foldername”:外表中数据源文件目录,即表数据目录在HDFS文件系统上对应的文件目录。此选项对WRITE ONLY外表为必选项,对READ ONLY外表为可选项。
  • “encoding”:外表中数据源文件的编码格式名称,缺省为utf8。
  • “filesize”

    指定WRITE ONLY外表的文件大小。此选项为可选项,不指定该选项默认分布式文件系统配置中文件大小的配置值。此语法仅对WRITE ONLY的外表有效。

    取值范围:[1, 1024]的整数。

    说明:

    filesize参数只对ORC格式的WRITE ONLY的HDFS外表有效。

  • “compression”

    指定文件的压缩方式,此选项为可选项。此语法仅对WRITE ONLY的外表有效。

    取值范围:zlib,snappy,lz4。

    指定ORC格式文件的压缩方式,缺省值为zlib。指定PARQUET格式文件的压缩方式,缺省值为snappy。

  • “version”

    指定ORC格式的版本号,此选项为可选项。此语法仅对WRITE ONLY的外表有效。

    取值范围:目前仅支持0.12。缺省值为0.12。

  • “dataencoding”

    在数据库编码与数据表的数据编码不一致时,该参数用于指定导出数据表的数据编码。比如数据库编码为Latin-1,而导出的数据表中的数据为UTF-8编码。此选项为可选项,如果不指定该选项,默认采用数据库编码。此语法仅对HDFS的WRITE ONLY外表有效。

    取值范围:该数据库编码支持转换的数据编码。

    说明:

    dataencoding参数只对ORC格式的WRITE ONLY的HDFS外表有效。

format 'orc'

语法中的其他参数

其他参数均为可选参数,用户可以根据自己的需求进行设置,在本例中不需要设置。详细的描述请参见《数据仓库服务SQL语法参考》中“CREATE FOREIGN TABLE (SQL on Hadoop or OBS)”章节。

-

根据以上信息,创建外表命令如下所示:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
DROP FOREIGN TABLE IF EXISTS product_info_ext_obs;

---建立不包含分区列的HDFS外表,表关联的外部服务器为hdfs_server,表对应的HDFS服务上的文件格式为‘orc’,HDFS上的数据存储路径为'/user/hive/warehouse/product_info_orc/'。

CREATE FOREIGN TABLE product_info_ext_obs
(
    product_price                integer        ,
    product_id                   char(30)       ,
    product_time                 date           ,
    product_level                char(10)       ,
    product_name                 varchar(200)   ,
    product_type1                varchar(20)    ,
    product_type2                char(10)       ,
    product_monthly_sales_cnt    integer        ,
    product_comment_time         date           ,
    product_comment_num          integer        ,
    product_comment_content      varchar(200)                      
) SERVER obs_server 
OPTIONS (
format 'orc', 
foldername '/user/hive/warehouse/product_info_orc/',
   compression 'snappy',
    version '0.12'
) Write Only;

相关文档