文档首页> > 开发指南> 教程:从OBS导入数据到集群> 步骤2:创建外表

步骤2:创建外表

分享
更新时间: 2019/06/24 09:14
  1. 连接DWS数据库。
  2. 创建外表,用于对接步骤1:上传数据到OBS中已上传到OBS上的三个CSV格式的数据文件,为后续将数据引流至DWS普通表中做准备。

    外表样例如下,关于此样例中的各项参数设置解释见样例下方。

    外表中各参数项的定义主要是为了识别数据格式及设置导入容错性,此教程中只给了关键参数的设置,有关外表的更多设置办法,请参考 CREATE FOREIGN TABLE (OBS导入导出)
    DROP FOREIGN TABLE IF EXISTS product_info_ext;
    CREATE FOREIGN TABLE product_info_ext
    (
        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/input_data/product_info | obs://mybucket02/input_data/product_info',
    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',
    FILL_MISSING_FIELDS 'true',
    IGNORE_EXTRA_DATA 'true'
    )
    READ ONLY 
    LOG INTO product_info_err 
    PER NODE REJECT LIMIT 'unlimited';
    返回如下信息表示创建成功:
    CREATE FOREIGN TABLE

    外表中相关参数的设置说明如下:

    • SERVER:无需修改,即固定设为gsmpp_server。
    • LOCATION:OBS路径由“obs://”、桶名和文件路径组成,即为:obs://<bucket_name>/<file_path>
      设置为参数“location”的值,多个路径间以“|”分隔。即:
      LOCATION 'obs://mybucket/input_data/product_info  |  obs://mybucket02/input_data/product_info',
      根据前缀匹配原则,mybucket中的以下两个文件都会被导入:
      mybucket/input_data/product_info0.csv
      mybucket/input_data/product_info1.csv
    • FORMAT

      此教程中待入库的为CSV格式的数据,故设为CSV。如果是TEXT或ORC格式的,请对应替换。

    • DELIMITER

      此教程中数据源文件中的数据是以“,”分隔的。

    • ENCODING

      此教程中数据源文件编码格式为UTF-8。

    • HEADER

      此参数用于指定数据文件是否包含标题行。该参数只针对CSV格式的数据文件有效。准备数据文件中的数据文件第一行不是标题行(即表头),故设为“false”。

    • ACCESS_KEY和SECRET_ACCESS_KEY

      用户访问OBS的AK和SK,请根据实际替换。获取访问密钥,请登录管理控制台,然后将鼠标移到右上角的用户名,单击“我的凭证”,再单击“管理访问密钥”,可以查看已有的访问密钥,也可以单击“新增访问密钥”进行创建。

    • FILL_MISSING_FIELDS

      当数据导入时,数据源文件中一行的最后一个字段缺失的处理方式。默认为false/off。本教程中设为“true”。

      • true/on:表示最后一个字段缺失时,把最后一个字段的值设置为NULL,不报错。
      • false/off:表示最后一个字段缺失时,做如下报错提示:missing data for column "tt"。
        例如,源数据文件product_info2.csv中第2条记录的最后一个字段段“product_comment_content”缺失。当FILL_MISSING_FIELDS设为false/off时,导入数据时错误表中会有类似如下的错误信息:
        missing data for column "product_comment_content"
    • IGNORE_EXTRA_DATA

      数据源文件中的字段比外表定义列数多时,是否忽略多出的列。默认为false/off。本教程中设为“true”。

      • true/on:数据源文件中字段比外表定义列数多,则忽略行尾多出来的列。不报错
      • false/off:若数据源文件中字段比外表定义列数多,做如下报错提示:extra data after last expected column。

        例如,源数据文件product_info2.csv中第3条记录比外表定义列数多。当IGNORE_EXTRA_DATA设为false/off时,导入数据时错误表中会有类似如下的错误信息:

        extra data after last expected column
    • READ ONLY

      外表的语法定义通用于从OBS导入数据到DWS集群和从集群导出数据到OBS。数据导入集群时,请将外表设为READ ONLY;导出时,请设为WRITE ONLY。

    • LOG INTO

      指定记录导入过程中数据格式错误信息的错误表。只需指定表名,无需预先创建。DWS在执行创建外表语句时会自动创建该表,并在删除外表时对其自动删除。

    • PER NODE REJECT LIMIT

      指定本次数据导入过程中每个DN实例上允许出现的数据格式错误的数量,如果有一个DN实例上的错误数量大于设定值,本次导入失败,报错退出。

      本教程设置为“unlimited”,即接受导入过程中所有数据格式错误。

如果您喜欢这篇文档,您还可以:

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区