HANA-JSON集合中的访问数组

2020-08-21 15:37发布

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

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


专家您好,

我们目前正在与客户合作,以​​使用JSON文件流为S/4系统提供数据。 我们正在考虑使用HANA Json文档存储来实现此流。 在当前的PoC中,我们已经可以将数据馈入JSON集合中,并通过AMDP方法将该集合转移到暂存表中。

我们目前正在尝试对嵌套结构(尤其是数组)的处理进行原型设计。 例如,我们有一个collection policyIA,然后插入以下JSON文档:

 {" policyID":" 000002"
   " type":"电机"
 ," personInsured":
 [{{" firstName":" Jane"," lastName":" Doe"},{" firstName":" John"," lastName":" Doe"}]
 } 

我们希望将数据转移到两个表中。 一个带有policyId和type字段的头表,一个带有两个人在嵌套数组中的条目的被保险人表。 第一个表没有问题。 但是,有什么方法可以将数组转换为表结构吗?

我们尝试了JSON_TABLE函数,但到目前为止,该函数只有错误。 首先,我们尝试了以下语句:

 SELECT pi。* FROM JSON_TABLE(policyIA,'$ .personInsured'
 栏(FIRST_NAME VARCHAR(50)PATH'$ .firstName',
 LAST_NAME VARCHAR(50)PATH'$ .lastName'))AS pi; 

此语句为我们带来了以下错误:

错误:(dberror)8-无效参数:列必须以表为前缀:第8行col 29(在pos 29处)

我们也尝试了以下语句:

 SELECT pi。* FROM JSON_TABLE(policyIA.policyIA,'$ .personInsured'
 栏(FIRST_NAME VARCHAR(50)PATH'$ .firstName'
        ,LAST_NAME VARCHAR(50)PATH'$ .lastName'))AS pi; 

错误:(dberror)7-不支持的功能:JsonTable不支持DocStore:第8行第29行(在pos 29)

有人对这里出了什么问题有想法吗,或者对如何将数组中的数据传输到表有其他想法吗?

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

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


专家您好,

我们目前正在与客户合作,以​​使用JSON文件流为S/4系统提供数据。 我们正在考虑使用HANA Json文档存储来实现此流。 在当前的PoC中,我们已经可以将数据馈入JSON集合中,并通过AMDP方法将该集合转移到暂存表中。

我们目前正在尝试对嵌套结构(尤其是数组)的处理进行原型设计。 例如,我们有一个collection policyIA,然后插入以下JSON文档:

 {" policyID":" 000002"
   " type":"电机"
 ," personInsured":
 [{{" firstName":" Jane"," lastName":" Doe"},{" firstName":" John"," lastName":" Doe"}]
 } 

我们希望将数据转移到两个表中。 一个带有policyId和type字段的头表,一个带有两个人在嵌套数组中的条目的被保险人表。 第一个表没有问题。 但是,有什么方法可以将数组转换为表结构吗?

我们尝试了JSON_TABLE函数,但到目前为止,该函数只有错误。 首先,我们尝试了以下语句:

 SELECT pi。* FROM JSON_TABLE(policyIA,'$ .personInsured'
 栏(FIRST_NAME VARCHAR(50)PATH'$ .firstName',
 LAST_NAME VARCHAR(50)PATH'$ .lastName'))AS pi; 

此语句为我们带来了以下错误:

错误:(dberror)8-无效参数:列必须以表为前缀:第8行col 29(在pos 29处)

我们也尝试了以下语句:

 SELECT pi。* FROM JSON_TABLE(policyIA.policyIA,'$ .personInsured'
 栏(FIRST_NAME VARCHAR(50)PATH'$ .firstName'
        ,LAST_NAME VARCHAR(50)PATH'$ .lastName'))AS pi; 

错误:(dberror)7-不支持的功能:JsonTable不支持DocStore:第8行第29行(在pos 29)

有人对这里出了什么问题有想法吗,或者对如何将数组中的数据传输到表有其他想法吗?

付费偷看设置
发送
2条回答
吹牛啤
1楼 · 2020-08-21 15:56.采纳回答

出现错误消息,因为默认情况下JSON_TABLE函数不支持JSON文档存储。 JSON_TABLE函数的第一个参数必须是表的列名(例如,当您有一个包含id列和包含json字符串的字符串列的表时,必须将json字符串列设置为第一个参数)。

但是您可以使用CTE即时从文档存储中"创建"这样的列。 例如如下所示:

带有json AS(从policyIA中选择policyIA的AS值)
 选择*从
 JSON_TABLE(json.value,'$ .personInsured [*]'
  列(first_name nvarchar(50)PATH'$ .firstName',
            last_name nvarchar(50)PATH'$ .lastName'));
 

PS:就像一个侧面标记​​。 所描述的将数据输入系统的方法听起来有些麻烦。 您是否考虑过为此使用SDI?

SAP小菜
2楼-- · 2020-08-21 16:05

嗨,弗洛里安,

非常感谢您的回答。 SQL对我们有用。

关于一种更简单的方法,客户目前正在构建其数据中心,第一个想法是通过文件传输json数据。 为此,JSON文档存储和通过AMDP传输似乎是我们最简单的方法。 我们正在将数据馈入BW环境(FPSL的一部分)中,并且在那里可以使用ETL处理方面有很多选择。 因此,对我们来说很难证明SDI的额外许可费用是合理的。 但是一旦我们确定了集成要求,这种情况可能会改变。

再次感谢

雨者

一周热门 更多>