GaussDB for DWS 数据融合系列第四期:OBS导入数据

举报
liheng52 发表于 2021/02/07 11:42:57 2021/02/07
【摘要】 OBS导入数据,将样例数据通过OBS导入到集群。数据导入流程:准备数据文件:CSV格式的数据文件。创建OBS存储桶,并将数据文件上传至桶。创建外表,用于引流OBS存储桶中的数据到GaussDB(DWS)集群。启动GaussDB(DWS)并创建数据库表后,将OBS上的数据导入到表中。    步骤1:上传数据到OBS     准备数据文件     GaussDB(DWS)支持将OBS上的TEXT...

OBS导入数据,将样例数据通过OBS导入到集群。

数据导入流程:

    • 准备数据文件:CSV格式的数据文件。
    • 创建OBS存储桶,并将数据文件上传至桶。
    • 创建外表,用于引流OBS存储桶中的数据到GaussDB(DWS)集群。
    • 启动GaussDB(DWS)并创建数据库表后,将OBS上的数据导入到表中。

    步骤1:上传数据到OBS

     准备数据文件

     GaussDB(DWS)支持将OBS上的TEXT、CSV、ORC和CARBONDATA格式的数据导入到集群中。提前准备一个数据文件。

     OBS上传数据到

  • 将上面准备的3个CSV格式的数据源文件存储到OBS桶中。


    1. 登录OBS管理控制台。单击“服务列表”,选择“对象存储服务”,打开OBS管理控制台页面。创建桶。
    2. 如何创建OBS桶

    3. 新建文件夹。
    4. 上传文件


    步骤2:外表字段说明

    1. 连接GaussDB(DWS)数据库。
    2. 创建外表。传到OBS上的三个CSV格式的数据文件,为后续将数据引流至GaussDB(DWS)普通表中做准备。


      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>

      • FORMAT

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

      • DELIMITER

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

      • ENCODING

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

      • HEADER

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

      • ACCESS_KEY和SECRET_ACCESS_KEY

        用户访问OBS的AK和SK,请根据实际替换。获取访问密钥,请登录管理控制台,将鼠标移至右上角的用户名,单击“我的凭证”,然后在左侧导航树单击“访问密钥”。在访问密钥页面,可以查看已有的访问密钥ID(即AK),如果要同时获取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
      • IGNORE_EXTRA_DATA

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

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

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

      • READ ONLY

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

      • LOG INTO

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

      • PER NODE REJECT LIMIT

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

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

    步骤3:执行数据导入

    • 创建外表                                                                                                                                                                                                                       CREATE FOREIGN TABLE date_dim_in_csv3(d_date_sk integer,d_date_id char(16),d_date date,d_month_seq integer,d_week_seq integer,d_quarter_seq integer,d_year integer,d_dow integer,d_moy integer,d_dom integer,d_qoy integer,d_fy_year integer,d_fy_quarter_seq integer,d_fy_week_seq integer,d_day_name char(9) ,d_quarter_name char(6),d_holiday char(1),d_weekend char(1),d_following_holiday char(1),d_first_dom integer,d_last_dom integer,d_same_day_ly integer,d_same_day_lq integer,d_current_day char(1),d_current_week char(1),d_current_month char(1),d_current_quarter char(1),d_current_year char(1)) SERVER gsmpp_server OPTIONS(location 'gsobs://obs-data.obs.ctyun.cn/data/date_dim.dat' ,FORMAT 'TEXT' ,DELIMITER '|', encoding 'utf8',access_key '$access_key ',secret_access_key '$secret_access_key ');
    • 在GaussDB(DWS)数据库中,创建一个名为catalog_page_scv的表,用于存储从OBS导入的数据。

      DROP TABLE IF EXISTS catalog_page_scv;

      CREATE TABLE catalog_page_scv(d_date_sk INT,d_date_id char(16),d_date date,d_month_seq INT,d_week_seq INT,d_quarter_seq INT,d_year INT,d_dow INT,d_moy INT,d_dom INT,d_qoy INT,d_fy_year INT,d_fy_quarter_seq INT,d_fy_week_seq INT,d_day_name char(9),d_quarter_name char(6),d_holiday char(1),d_weekend char(1),d_following_holiday char(1),d_first_dom INT,d_last_dom INT,d_same_day_ly INT,d_same_day_lq INT,d_current_day char(1),d_current_week char(1),d_current_month char(1),d_current_quarter char(1),d_current_year char(1));


    • 执行INSERT命令,通过外表date_dim_in_csv3将OBS上的数据导入到目标表catalog_page_scv 中:

      insert into catalog_page_scv select * from date_dim_in_csv3;


      • 若出现以下类似信息,说明数据导入成功。

        插入结果.png

      • 执行SELECT命令查询目标表product_info,查看从OBS导入到GaussDB(DWS)中的11.png
      • 查询结果显示如中所示的数据,表示导入成功。

        22.png


        GaussDB(DWS)博文后缀.png

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。