数据仓库服务 GaussDB(DWS)-CREATE FOREIGN TABLE (SQL on OBS or Hadoop):示例4

时间:2025-02-12 15:05:07

示例4

通过外表读取OBS上的json数据。

  1. OBS上有如下json文件,json对象中存在嵌套、数组,部分对象的某些字段缺失,部分对象name重复。
    {"A" : "simple1", "B" : {"C" : "nesting1"}, "D" : ["array", 2, {"E" : "complicated"}]}{"A" : "simple2", "D" : ["array", 2, {"E" : "complicated"}]}{"A" : "simple3", "B" : {"C" : "nesting3"}, "D" : ["array", 2, {"E" : "complicated3"}]}{"B" : {"C" : "nesting4"},"A" : "simple4",  "D" : ["array", 2, {"E" : "complicated4"}]}{"A" : "simple5", "B" : {"C" : "nesting5"}, "D" : ["array", 2, {"E" : "complicated5"}]}
  2. 创建obs_server,对应的foreign data wrapper为DFS_FDW。
    123456
    CREATE SERVER obs_server FOREIGN DATA WRAPPER DFS_FDW OPTIONS (   ADDRESS 'obs.example.com',   AC CES S_KEY 'xxxxxxxxx',   SECRET_ACCESS_KEY 'yyyyyyyyyyyyy',   TYPE 'OBS');
    • ADDRESS是OBS的终端节点(Endpoint),请根据实际替换。也是使用region参数,通过指定regionCode在region_map文件中查找对应的 域名
    • ACCESS_KEY和SECRET_ACCESS_KEY是云账号体系访问密钥。请根据实际替换。
    • 认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。
    • TYPE表示创建的Server为OBS Server。请保持OBS取值不变。
  3. 创建OBS外表json_f ,定义字段名,以d#2_e为例,从命名可以看出该字段是数组d的第二个元素里嵌套的e对象。表关联的OBS服务器为obs_server。foldername为外表中数据源文件目录,即表数据目录在OBS上对应的文件目录。

    认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。

     1 2 3 4 5 6 7 8 91011
    CREATE FOREIGN TABLE json_f (  a VARCHAR(10),  b_c TEXT,  d#1 INTEGER,  d#2_e VARCHAR(30))SERVER obs_server OPTIONS (    foldername '/xxx/xxx/',    format 'json',    encoding 'utf8',    force_mapping 'true')distribute by roundrobin;
  4. 查询外表json_f。由于容错性参数force_mapping默认打开,json对象缺失的字段会填NULL;json对象name重复的以最后一次出现的name为准。
    1
    SELECT * FROM json_f;
    图4 查看外表json_f结果
support.huaweicloud.com/sqlreference-dws/dws_06_0161.html