在 Redshift 中将 json-format 列拆分为多个列
Posted
技术标签:
【中文标题】在 Redshift 中将 json-format 列拆分为多个列【英文标题】:Split json-format column into multiple columns in Redshift 【发布时间】:2021-08-16 08:31:15 【问题描述】: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】:我假设这些是 Redshift 中包含 json 的字符串(不是新的 Super 数据类型)。 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 个 3 行字符串还是 3 行字符串?要使这些成为有效的 json 字符串,它们需要是 3 行字符串,但我可以看到这可能不是您所要做的 是3行字符串 好的,这仍然可行,但您需要修改字符串,使其成为单个有效的 json。通过将 "line": [ 添加到开头和 ] 到末尾并使用正则表达式在元素之间添加逗号,您可以使其成为单个 json 数组。然后,您可以使用 Redshift json 函数解析 json(嵌套,因为数组中有对象)。以上是关于在 Redshift 中将 json-format 列拆分为多个列的主要内容,如果未能解决你的问题,请参考以下文章
在 Redshift 中将 MD5 输出转换为 32 位整数
如何在 Redshift 中将时间戳(具有毫秒)转换为 EPOCH