在HANA中使用SQL从JSON_TABLE访问数据

2020-09-23 11:08发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)也许您也遇到过这样的话题。 ...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


也许您也遇到过这样的话题。

将数据从大JSON传输到HANA中的关系表,然后使用SQL消耗存储的信息。

1。 在HANA中创建一个表以存储JSON信息。

2。 使用SQL提取数据并到结果表。

这是我的解决方案:

给出下面的JSON文件,我想通过在HANA中使用一些SQL访问信息。

 {
     "元数据":{
         " language":" de-DE",
         " transaction_id":" 1511335024960:1650367502",
         " version":" 1",
         "纬度":37.54,
         "经度":5.58,
         "单位":" m",
         " expire_time_gmt":1511335872,
         "状态码":200
     },
     "预测":[
         {
             " class":" fod_long_range_daily",
             " expire_time_gmt":1511335872,
             " fcst_valid":1511330400,
        
             "夜晚":{
                 " fcst_valid":1511373600,
                 " fcst_valid_local":" 2017-11-22T19:00:00 + 0100",
                 " day_ind":" N"
             },

             "天": {
                 " fcst_valid":1511330400,
                 " fcst_valid_local":" 2017-11-22T07:00:00 + 0100",
                 " day_ind":" D"
             }
         }
     ]
 }
 ');
 

我创建了一个表" CREATE TABLE .FoD(A INT,B CLOB);" 在HANA中转储JSON。

可以使用以下SQL访问嵌套信息:

-从具有嵌套列的常规列中选择
 选择 *
 来自JSON_TABLE(
          .FoD.B," $"
        
         列 (
             RN出于普通性,
             language_code NVARCHAR(50)PATH'$ .metadata.language',
             transaction_id NVARCHAR(50)PATH'$ .metadata.transaction_id',
             版本NVARCHAR(50)PATH'$ .metadata.version',
             纬度NVARCHAR(50)PATH'$ .metadata.latitude',
             经度NVARCHAR(50)PATH'$ .metadata.longitude',
             单位NVARCHAR(50)PATH'$ .metadata.units',
             expire_time_gmt NVARCHAR(50)PATH'$ .metadata.expire_time_gmt',
             status_code NVARCHAR(50)PATH'$ .metadata.status_code',
            
 -从"预测"部分中提取信息
        
             嵌套路径" $ .forecasts [*]"
             列 (
                 class NVARCHAR(50)PATH'$ .class',
                
 -从"夜晚"部分提取信息,作为"预测"部分的一部分
                     嵌套路径" $ .night"
                         列 (
                             fcst_valid_local_night NVARCHAR(24)路径'$ .fcst_valid_local',
                             night_ind NVARCHAR(1)路径'$ .day_ind')
                            
                             ,
 -从"天"部分中提取信息作为"预测"部分的一部分
                     嵌套路径" $ .day"
                         列 (
                             fcst_valid_local_day NVARCHAR(24)PATH'$ .fcst_valid_local',
                             day_ind NVARCHAR(1)PATH'$ .day_ind')
                                                        
             )
         )
 )AS JT; 

为了避免从上方扩展名为" _day"和" _night"的" fcst_valid_local"列,我曾经使用UNION合并了"预测"的" day"和" night"部分的提取。

选择
      *
 来自(

     选择
      *
     从JSON_TABLE( .FoD.B,
      " $"列(RN为序号,
      language_code NVARCHAR(50)PATH'$ .metadata.language',
      transaction_id NVARCHAR(50)PATH'$ .metadata.transaction_id',
      版本NVARCHAR(50)PATH'$ .metadata.version',
      纬度NVARCHAR(50)PATH'$ .metadata.latitude',
      经度NVARCHAR(50)PATH'$ .metadata.longitude',
      单位NVARCHAR(50)PATH'$ .metadata.units',
      expire_time_gmt NVARCHAR(50)PATH'$ .metadata.expire_time_gmt',
      status_code NVARCHAR(50)PATH'$ .metadata.status_code',
      -从"预测"部分中提取信息
  嵌套路径" $ .forecasts [*]"列(类NVARCHAR(50)路径" $ .class",
      -从"夜晚"部分提取信息,作为"预测"部分的一部分
  嵌套路径'$ .night'列(fcst_valid_local NVARCHAR(24)路径'$ .fcst_valid_local',
      ind NVARCHAR(1)路径'$ .day_ind'))))AS JT_night
    
     联盟
    
     选择
      *
     从JSON_TABLE( .FoD.B,
      " $"列(RN为序号,
      language_code NVARCHAR(50)PATH'$ .metadata.language',
      transaction_id NVARCHAR(50)PATH'$ .metadata.transaction_id',
      版本NVARCHAR(50)PATH'$ .metadata.version',
      纬度NVARCHAR(50)PATH'$ .metadata.latitude',
      经度NVARCHAR(50)PATH'$ .metadata.longitude',
      单位NVARCHAR(50)PATH'$ .metadata.units',
      expire_time_gmt NVARCHAR(50)PATH'$ .metadata.expire_time_gmt',
      status_code NVARCHAR(50)PATH'$ .metadata.status_code',
      -从"预测"部分中提取信息
  嵌套路径" $ .forecasts [*]"列(类NVARCHAR(50)路径" $ .class",
      -从"天"部分中提取信息作为"预测"部分的一部分
  嵌套路径'$ .day'列(fcst_valid_local NVARCHAR(24)路径'$ .fcst_valid_local',
      ind NVARCHAR(1)PATH'$ .day_ind'))))AS JT_day)
   

有什么想法可以更优雅地实现吗?

致谢

Dio。

1条回答
Nir深蓝
2020-09-23 11:51

请您说明如何使用JSON_TABLE函数访问JSON中的"预测"数组,以便能够检查您可能做错了什么。

一周热门 更多>