# 创建OBS外表
#### 操作步骤
1. 根据[规划导出数据](https://support.huaweicloud.com/migration-dws/dws_15_0068.html#ZH-CN_TOPIC_0000002255063653)中规划的路径，由此确定创建外表时使用的参数**location**的值。
2. 用户获取OBS访问协议对应的AK值和SK值，参见[创建访问密钥（AK和SK）](https://support.huaweicloud.com/migration-dws/dws_15_0007.html#ZH-CN_TOPIC_0000002254983669)章节。
3. 梳理待导出数据的格式信息，确定创建外表时使用的数据格式参数的值。详细使用请参见数据格式参数。
4. 根据前面步骤确定的参数，**创建OBS外表**。
 
#### 示例一
例如，在DWS数据库中，创建一个format参数为text的只写外表，用于导出text文件。设置的参数信息如下所示：
- **location**
  在[规划导出数据](https://support.huaweicloud.com/migration-dws/dws_15_0068.html#ZH-CN_TOPIC_0000002255063653)中，通过[获取数据源文件的OBS路径](https://support.huaweicloud.com/migration-dws/dws_15_0014.html#ZH-CN_TOPIC_0000002219983976__zh-cn_topic_0000001811609589_zh-cn_topic_0000001188482188_zh-cn_topic_0000001145410931_zh-cn_topic_0102810712_li123314509351)已经获取到数据源文件的OBS路径。
  因此，设置参数"location"为：
  ```
  location 'obs://mybucket/output_data/',
  ```
  
- **访问密钥（AK和SK）**
  - 用户获取OBS访问协议对应的AK值（access_key）。
  
  - 用户获取OBS访问协议对应的SK值 （secret_access_key）。
  
  
  ![](https://support.huaweicloud.com/migration-dws/public_sys-resources/note_3.0-zh-cn.png)
  用户在创建用户时已经获取了access_key和secret_access_key的密钥，请根据实际密钥替换示例中的内容。
  

- **设置数据格式参数**
  - **数据源文件格式（format）**为"TEXT"。
  
  - **编码格式（encoding）**为"UTF-8"。
  
  - **是否使用加密（encrypt）**，默认为"off"。
  
  - **字段分隔符（delimiter）**为"\|"。
   
根据以上信息，创建的外表如下所示：
![](https://support.huaweicloud.com/migration-dws/public_sys-resources/notice_3.0-zh-cn.png)
认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险，建议在配置文件或者环境变量中密文存放，使用时解密，确保安全。
```
DROP FOREIGN TABLE IF EXISTS product_info_output_ext1;
CREATE FOREIGN TABLE product_info_output_ext1
(
 c_bigint bigint,
 c_char char(30),
 c_varchar varchar(30),
 c_nvarchar2 nvarchar2(30) ,
 c_data date,
 c_time time ,
 c_test varchar(30)) 
 server gsmpp_server 
 options (
 LOCATION 'obs://mybucket/output_data/', 
 ACCESS_KEY 'access_key_value_to_be_replaced',
 SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced'
 format 'text',
 delimiter '|',
 encoding 'utf-8',
 encrypt 'on' 
  )
 WRITE ONLY;
```
返回如下信息表示创建成功：
```
CREATE FOREIGN TABLE
```
#### 示例二
例如，在DWS数据库中，创建一个format参数为CSV的只写外表，用于导出CSV文件。设置的参数信息如下所示：
- **location**
  在[规划导出数据](https://support.huaweicloud.com/migration-dws/dws_15_0068.html#ZH-CN_TOPIC_0000002255063653)中，通过[获取数据源文件的OBS路径](https://support.huaweicloud.com/migration-dws/dws_15_0014.html#ZH-CN_TOPIC_0000002219983976__zh-cn_topic_0000001811609589_zh-cn_topic_0000001188482188_zh-cn_topic_0000001145410931_zh-cn_topic_0102810712_li123314509351)，已经获取到数据源文件的OBS路径。
  因此，设置参数"location"为：
  ```
  location 'obs://mybucket/output_data/',
  ```
  
- **访问密钥（AK和SK）**
  - 用户获取OBS访问协议对应的AK值（access_key）。
  
  - 用户获取OBS访问协议对应的SK值 （secret_access_key）。
  
  
  ![](https://support.huaweicloud.com/migration-dws/public_sys-resources/note_3.0-zh-cn.png)
  用户在创建用户时已经获取了access_key和secret_access_key的密钥，请根据实际密钥替换示例中的对应内容。
  

- **设置数据格式参数**
  - **数据源文件格式（format）**为"CSV"。
  
  - **编码格式（encoding）**为"UTF-8"。
  
  - **是否使用加密（encrypt），**默认为 "off"。
  
  - **字段分隔符（delimiter）**为","。
  
  - **header（指定导出数据文件是否包含标题行）**
    指定导出数据文件是否包含标题行，标题行一般用来描述表中每个字段的信息。缺省值为false，表示导出的数据文件第一行不是标题行（即表头）。
    OBS导出数据时不支持该参数为true。
    
   
根据以上信息，创建的外表如下所示：
![](https://support.huaweicloud.com/migration-dws/public_sys-resources/notice_3.0-zh-cn.png)
认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险，建议在配置文件或者环境变量中密文存放，使用时解密，确保安全。
```
DROP FOREIGN TABLE IF EXISTS product_info_output_ext2;
CREATE FOREIGN TABLE product_info_output_ext2
(
    product_price                integer        not null,
    product_id                   char(30)       not null,
    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 gsmpp_server 
OPTIONS(
location 'obs://mybucket/output_data/',
FORMAT 'CSV' ,
DELIMITER ',',
encoding 'utf8',
header 'false',
ACCESS_KEY 'access_key_value_to_be_replaced',
SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced'
)
WRITE ONLY ;
```
返回如下信息表示创建成功：
```
CREATE FOREIGN TABLE
```
