Разделите столбец в формате json на несколько столбцов в красном смещении

#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 (вложенных, поскольку у вас есть объекты внутри массива).