我有一个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/';