#sql #amazon-athena #amazon-quicksight
Вопрос:
Я написал ниже запрос Athena для отображения/визуализации данных в Quicksight. Это прекрасно работает, пока у меня есть одна запись в таблице. Если вы видите запрос, который я жестко закодировал как индекс 1. Как я могу изменить приведенный ниже запрос, чтобы включить все данные из таблицы. Если удалить индекс 1, то это даст мне ошибку, как
SYNTAX_ERROR: line 8:19: Expression result.extensions.response is not of type ROW
Запрос:
select user_id, assessment_id, created_by,result.extensions.response[1].assessmentid AS AssesmentId, result.extensions.response[1].assessmentname AS AssesmentName, response_json.questionid AS QuestionId, response_json.questionText as Questiontext, transform(response_json.answers,answer-gt; answer.answerId) AS AnswerID, transform(response_json.answers,answer-gt; answer.answerText) AS AnswerText FROM focalbucket CROSS JOIN UNNEST(result.extensions.response[1].responseData) AS t(response_json)
Таблица Афины DDL:
CREATE EXTERNAL TABLE `focalbucket`( `assessment_id` int COMMENT 'from deserializer', `id` string COMMENT 'from deserializer', `user_id` string COMMENT 'from deserializer', `project_id` int COMMENT 'from deserializer', `created_by` string COMMENT 'from deserializer', `team_id` int COMMENT 'from deserializer', `result` structlt;extensions:structlt;response:arraylt;structlt;assessmentid:int,assessmentname:string,assessmentcreateddate:string, responsedata:arraylt;structlt;questionid:int,answers:arraylt;structlt;answerid:int,answertext:stringgt;gt;, questiontext:string,questiontype:stringgt;gt;,userfullname:stringgt;gt;gt;, completion:boolean,platform:string,app_version:stringgt; COMMENT 'from deserializer', `verb` structlt;id:stringgt; COMMENT 'from deserializer', `actor` structlt;mbox:string,name:stringgt; COMMENT 'from deserializer', `timestamp` bigint COMMENT 'from deserializer', `version` string COMMENT 'from deserializer') ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
Ответ №1:
result.extensions.response
это также массив, так что вы тоже можете его отменить. Что — то вроде этого (примечание-не тестировалось, так как не было предоставлено никаких примеров данных):
select user_id, assessment_id, created_by, t.response.assessmentid AS AssesmentId, t.response.assessmentname AS AssesmentName, response_json.questionid AS QuestionId, response_json.questionText as Questiontext, transform(response_json.answers,answer-gt; answer.answerId) AS AnswerID, transform(response_json.answers,answer-gt; answer.answerText) AS AnswerText FROM focalbucket CROSS JOIN UNNEST(result.extensions.response) AS t(response) CROSS JOIN UNNEST(t.response.responseData) AS tt(response_json)