GaussDB for DWS 数据融合系列第四期:OBS导入数据
OBS导入数据,将样例数据通过OBS导入到集群。
数据导入流程:
-
- 准备数据文件:CSV格式的数据文件。
- 创建OBS存储桶,并将数据文件上传至桶。
- 创建外表,用于引流OBS存储桶中的数据到GaussDB(DWS)集群。
- 启动GaussDB(DWS)并创建数据库表后,将OBS上的数据导入到表中。
步骤1:上传数据到OBS
准备数据文件
GaussDB(DWS)支持将OBS上的TEXT、CSV、ORC和CARBONDATA格式的数据导入到集群中。提前准备一个数据文件。
OBS上传数据到
- 将上面准备的3个CSV格式的数据源文件存储到OBS桶中。
步骤2:外表字段说明
- 连接GaussDB(DWS)数据库。
- 创建外表。传到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
- DELIMITER
- ENCODING
- 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"。
- IGNORE_EXTRA_DATA
- 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;
- 若出现以下类似信息,说明数据导入成功。
- 执行SELECT命令查询目标表product_info,查看从OBS导入到GaussDB(DWS)中的
- 查询结果显示如中所示的数据,表示导入成功。
- 点赞
- 收藏
- 关注作者
评论(0)