
# 执行导入数据
#### 背景信息
在执行数据导入前，您可以参考以下优秀实践方法进行合理的设计部署，最大化的使用系统资源，以提高数据导入性能。
- OBS的数据导入性能，多数场景受限于网络的并发访问速率，因此在OBS服务器上最好部署多个桶，使用多桶并发导入，提高DN数据传输利用率。

- 并发导入场景，与单表导入相似，至少应保证I/O性能大于网络最大速率。

- 配置GUC参数"[raise_errors_if_no_files](https://support.huaweicloud.com/devg-dws/dws_04_0899.html#section0)"、"[partition_mem_batch](https://support.huaweicloud.com/devg-dws/dws_04_0899.html#section1)"和"[partition_max_cache_size](https://support.huaweicloud.com/devg-dws/dws_04_0899.html#section2)"，设置导入时是否区分"导入文件记录数为空"和"导入文件不存在"、导入时的缓存个数以及数据缓存区大小。

- 如果导入表存在索引，在数据导入过程中，将增量更新索引信息，影响数据导入性能。建议在执行数据导入前，先删除相关表的索引。在数据导入完成后，再重新创建索引。
 
#### 操作步骤
1. 在DWS数据库中，创建目标表，用于存储从OBS导入的数据。 
   目标表的表结构和OBS上将要导入的数据源文件的字段要保持一一对应，即字段个数、字段类型要一致。并且目标表和创建的外表的表结构也要保持一致，字段名称可以不一样。
   
   
2. （可选）如果导入表存在索引，在数据导入过程中，将增量更新索引信息，影响数据导入性能。建议在执行数据导入前，先删除相关表的索引。在数据导入完成后，再重新创建索引。
3. 执行数据导入。 
   ```
   INSERT INTO [目标表名] SELECT * FROM [foreign table 表名];
   ```
   - 如果出现以下类似信息，说明数据导入成功。请查询错误信息表，查看是否存在数据格式错误，详细操作请参见[处理导入错误](https://support.huaweicloud.com/migration-dws/dws_15_0011.html#ZH-CN_TOPIC_0000002254983673)。
     ```
     INSERT 0 20
     ```
     
   
   - 如果出现数据加载错误，请参见[处理导入错误](https://support.huaweicloud.com/migration-dws/dws_15_0011.html#ZH-CN_TOPIC_0000002254983673)，并重新执行数据导入。
   
   
   
   
 
#### 示例
创建一个名为product_info的目标表，示例如下：
```
DROP TABLE IF EXISTS product_info;
CREATE TABLE product_info
(
    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)                   
) 
with (
orientation = column,
compression=middle
) 
DISTRIBUTE BY HASH (product_id);
```
执行以下命令将外表*product_info* _ext的数据导入到目标表*product_info*中：
```
INSERT INTO product_info SELECT * FROM product_info_ext;
```
