我正在将我的数据库表从postgres移动到Redshift,下面的查询不再工作:
select dr.id, dr.opportunity_id, dr.roi -> 'data' ->> 'campaignName' as campaign_Name,
users.value ->> 'name' as influencer_name, users.value ->> 'id' as influencer_dyzio_id,
users.value -> 'instagramCount' as instagram_Count, users.value -> 'instagramEngagementFactor' as instagram_Engagement_Factor,
users.value -> 'emv' ->> 'estimatedImpressions' as emv_estimated_Impressions,
users.value -> 'emv' ->> 'impressionsCPM' as emv_impressions_CPM,
users.value -> 'emv' ->> 'engagementsCPM' as emv_engagements_CPM,
users.value ->> 'platformID' as platform_ID
FROM platform_db.dyzio_rois dr, jsonb_each(roi -> 'data' -> 'reportData') as users
我怎么能使它工作使用红移?
由于Redshift没有本地json数据类型,因此在Redshift SQL中没有与jsonb_each()等效的函数,该函数将在所有情况下工作。特定于用例的Redshift SQL在某些情况下可能是可行的,而udf在其他情况下可能是可行的。需要更多关于源数据和预期结果的信息,以便为您的用例生成解决方案提供帮助。
Redshift支持json作为文本存储,并具有从这些字符串中提取信息的函数。Json_extract_path_text()就是这样一个函数,它将根据字符串中使用的json键提取文本值。它的结构是表中每行一个字符串(json)。因为你在Redshift工作,我假设你已经将json存储为字符串。Postgres中的jsonb_each()将json blob中的元素扩展为数据行。基于json- storage -text列中的元素扩展行是可能的,但您可能需要考虑您的数据模型以及为什么要存储多个"行";json文本列中的数据(roi ->"数据"→"reportData")。这样做会很慢,而且很难查询。