#sql #json #amazon-redshift
Вопрос:
select feature_column from table
{"reporting": true, "newsletters": false, "merchant_payment": false, "customer_feedback": true, "reserve_with_google": true, "new_closingtime_background": true, "merchant_logo_on_customer_email": true}
{"messaging": false, "yext_sync": false, "marketplace": false, "newsletters": false, "ranking_coach": false, "sms_reminders": false, "sms_newsletters": false, "merchant_payment": true, "customer_feedback": true, "birthday_reminders": false, "merchant_dashboard": true, "merchant_shiftplan": false, "reserve_with_google": false, "sms_customer_confirmation": false, "individual_email_from_name": true, "appointment_location_customer": false}
{"messaging": false, "newsletters": false, "merchant_payment": false, "birthday_reminders": false, "merchant_shiftplan": false, "double_opt_in_required": false, "new_closingtime_background": true, "facebook_instagram_integration": true, "show_all_branch_option_on_insights": true, "show_newsletter_non_subscriber_selection": false}
Вместо того, чтобы хранить все эти значения в одном столбце, я хотел бы преобразовать его в табличную форму:
No. reporting newsletters merchant_payment customer_feedback
1 true false false true
2 false false true true
3 false false false false
Насколько я знаю, функциональность json ->>> была недоступна в устаревшей версии Redshift Postgres.
Ответ №1:
Я предполагаю, что это строки в красном смещении, которые содержат json (а не новый супер тип данных). Redshift имеет несколько функций синтаксического анализа json — https://docs.aws.amazon.com/redshift/latest/dg/json-functions.html
Я думаю, вы хотите использовать функцию json_extract_path_text () — https://docs.aws.amazon.com/redshift/latest/dg/JSON_EXTRACT_PATH_TEXT.html
select json_extract_path_text(feature_column, '{reporting}') as reporting from ...
Комментарии:
1. каким-то образом каждое значение внутри столбцов пустое(?)
2. Позвольте мне проверить, правильно ли я понимаю ваши данные — является ли ваша текущая информация 1 строкой из 3 строк или 3 строками строк? Для того, чтобы это были действительные строки json, они должны быть 3 строками строк, но я вижу, что это может быть не то, что у вас происходит
3. это 3 ряда строк
4. Хорошо, это все еще выполнимо, но вам нужно будет изменить строку так, чтобы она была единственным допустимым json. Добавив {«строка»: [ в начало и ]} в конец И запятые между элементами с регулярным выражением, вы можете сделать это единым массивом json. Затем вы можете проанализировать json с помощью функций json Redshift (вложенных, поскольку у вас есть объекты внутри массива).