数据仓库服务 GAUSSDB(DWS)-导入OBS桶数据到GaussDB(DWS)集群及从GaussDB(DWS)导出数据到OBS桶:步骤四:将GaussDB(DWS)某张表的数据导出到OBS桶

时间:2025-04-28 11:16:58

步骤四:将 GaussDB (DWS)某张表的数据导出到OBS桶

  1. 创建一张新的本地表。

    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE dws_data.dws_order
    ( order_idVARCHAR(14)PRIMARY KEY,
    order_channel VARCHAR(32),
    order_timeTIMESTAMP,
    cust_codeVARCHAR(6),
    pay_amountDOUBLE PRECISION,
    real_payDOUBLE PRECISION );
    

  2. 插入三条数据。

    1
    2
    3
    4
    INSERT INTO dws_data.dws_order 
    VALUES ('20230627000001', 'webShop', TIMESTAMP '2023-06-27 10:00:00', 'CUST1', 1000, 1000)
    , ('20230627000002', 'webShop', TIMESTAMP '2023-06-27 11:00:00', 'CUST2', 5000, 5000)
    , ('20240309000003', 'webShop', TIMESTAMP '2024-03-09 13:00:00', 'CUST1', 2000, 2000);
    

  3. 创一张外表,用于导出数据到OBS桶。

    其中foldername '/obs-demo01/obs-dws/'请替换为实际需要导出的OBS桶路径。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    CREATE FOREIGN TABLE dws_data.obs_orc_order
    ( order_idVARCHAR(14)PRIMARY KEY NOT ENFORCED,
    order_channel VARCHAR(32),
    order_timeTIMESTAMP,
    cust_codeVARCHAR(6),
    pay_amountDOUBLE PRECISION,
    real_payDOUBLE PRECISION )
    SERVER obs_server 
    OPTIONS (
    foldername '/obs-demo01/obs-dws/',
    format 'ORC',
    encoding 'utf8' )
    WRITE ONLY
    DISTRIBUTE BY roundrobin;
    

  4. 执行以下语句,将本地表数据写入OBS外表。

    1
    2
    3
    INSERT INTO dws_data.obs_orc_order ( order_id, order_channel, order_time, cust_code, pay_amount, real_pay )
    SELECT order_id, order_channel, order_time, cust_code, pay_amount, real_pay
      FROM dws_data.dws_order;
    

  5. 查询外表,数据写入成功。

    1
    SELECT * FROM dws_data.obs_orc_order;
    

  6. 成功写入后,您可以登录OBS控制台,查看OBS桶对应路径下是否有数据文件存在。
  7. 同时可以验证下,是否允许同一张外表下额外插入数据。

    1
    2
    3
    INSERT INTO dws_data.obs_orc_order ( order_id, order_channel, order_time, cust_code, pay_amount, real_pay )
    SELECT order_id, order_channel, order_time, cust_code, pay_amount, real_pay
      FROM dws_data.dws_order;
    

    结果会报错:“the file path specified in the foreign table is not empty”,但如果删除外表中指定的OBS文件路径下的数据文件后,可以重新插入数据。

  8. 执行以下语句,验证下是否允许更新和删除外表数据。

    1
    2
    UPDATE dws_data.obs_orc_order  SET pay_amount = 3000, real_pay = 3000 WHERE order_id   = '20240309000003';
    DELETE FROM dws_data.obs_orc_order WHERE order_id = '20240309000003';
    

    从显示结果看,不支持更新和删除外表数据。

support.huaweicloud.com/bestpractice-dws/dws_05_0024.html
提示

您即将访问非华为云网站,请注意账号财产安全