
# 创建外表
当完成[创建外部服务器](https://support.huaweicloud.com/migration-dws/dws_15_0080.html#ZH-CN_TOPIC_0000002255063665)后，在DWS数据库中创建一个HDFS只写外表，用来访问存储在HDFS上的数据。此外表是只写的，只能用于导出操作。
创建外表的语法格式如下，详细的描述请参见《数据仓库服务SQL语法参考》中"CREATE FOREIGN TABLE (SQL on Hadoop or OBS)"章节。
```
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_name       | 外表中的字段名。多个字段用","隔开。外表的字段个数和字段类型，需要与OBS上保存的数据完全一致。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | product_price          |
| type_name         | 字段的数据类型。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | integer                |
| SERVER dfs_server | 外表的外部服务器名称，这个server必须存在。外表通过设置外部服务器连接OBS/HDFS读取数据。 此处应参考[创建外部服务器](https://support.huaweicloud.com/migration-dws/dws_15_0080.html#ZH-CN_TOPIC_0000002255063665)中创建的外部服务器名称填写。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | *hdfs_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)"章节。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | -                      |
   
根据以上信息，创建外表命令如下所示：
```
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 hdfs_server 
OPTIONS (
format 'orc', 
foldername '/user/hive/warehouse/product_info_orc/',
   compression 'snappy',
    version '0.12'
) Write Only;
```
