Как получить значения t ie из 2 массивов на основе индекса в спектре Redshift - PullRequest
0 голосов
/ 28 марта 2020

У меня есть запись JSON, в которой есть 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

Любой способ устранить неправильные совпадения? Цените любую помощь в этом.

Создание таблицы Spectrum, если кто-то заинтересован в:

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/';
...