如何基于Redshift频谱中的索引来绑定2个数组中的值

我有一个JSON记录,该记录在struct对象中具有2个数组。第一个数组包含问题,第二个数组包含这些问题的答案。所以我需要匹配问题的答案,可能是使用索引。我们正在使用Redshift Spectrum。 我创建了频谱表,但是当我从两个数组中提取时,它会产生带有所有问题和所有答案的笛卡尔乘积。在我的JSON中。

    {
   "responseId":"R_Y5HJGhSSD5CdLHz","values":{
      "startDate":"2019-06-05T17:54:05Z","_recordId":"R_Y5HJGhSSD5CdLHz"
   },"displayedValues":{
      "QID123647221":          [Q1,Q2,Q3],"QID123647221_NPS_GROUP":[A1,A2,A3]
   }
}

预期输出为

ResponseID          Start Date  Question    Answer
R_Y5HJGhSSD5CdLHz   6/5/19      Q1          A1
R_Y5HJGhSSD5CdLHz   6/5/19      Q2          A2
R_Y5HJGhSSD5CdLHz   6/5/19      Q3          A3

但是它还会给出不需要的/不正确的匹配,如下所示。

ResponseID          Start Date  Question    Answer
R_Y5HJGhSSD5CdLHz   6/5/19      Q1          A2
R_Y5HJGhSSD5CdLHz   6/5/19      Q1          A3
R_Y5HJGhSSD5CdLHz   6/5/19      Q2          A1
R_Y5HJGhSSD5CdLHz   6/5/19      Q2          A3
R_Y5HJGhSSD5CdLHz   6/5/19      Q3          A1
R_Y5HJGhSSD5CdLHz   6/5/19      Q3          A2

有什么方法可以消除不正确的匹配?感谢对此的任何帮助。

创建光谱表(如果有兴趣的话)

create external table schema_ext.md_pulse
(
responseId varchar(256),"values" struct<
    startDate:timestamp,_recordId:varchar(64)
    >,displayedValues struct< 
      QID123647221:array<varchar(200)>,QID123647221_NPS_GROUP:array<varchar(200)>
      >
)
row format serde 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ( 
  'ignore.malformed.json' = 'true','paths'='messageId,traits') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
   location 's3://di-production-data-lake/qualtrics/md_pulse/';
wyuan123 回答:如何基于Redshift频谱中的索引来绑定2个数组中的值

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2565329.html

大家都在问