【问题标题】:Search for exact string value in JSON在 JSON 中搜索确切的字符串值
【发布时间】:2020-02-27 06:49:25
【问题描述】:

我有一个存储在 JSON 中的列,看起来像

列名:s2s_payload

价值观:

{ 
    "checkoutdate":"2019-10-31",
    "checkindate":"2019-10-30",
    "numtravelers":"2",
    "domain":"www.travel.com.mx",
    "destination": {
                       "country":"MX",
                       "city":"Manzanillo"
                   },
    "eventtype":"search",
    "vertical":"hotels"
}

我想查询数组中的确切值,而不是返回某个数据类型的所有值。我使用 JSON_EXTRACT 来获得不同的计数。

SELECT 
    COUNT(JSON_EXTRACT(s2s_payload, '$.destination.code')) AS total, 
    JSON_EXTRACT(s2s_payload, '$.destination.code') AS destination
FROM 
    "db"."events_data_json5_temp"
WHERE 
    id = '111000'
    AND s2s_payload IS NOT NULL
    AND yr = '2019'
    AND mon = '10'
    AND dt >= '26'
    AND JSON_EXTRACT(s2s_payload, '$.destination.code')
GROUP BY  
    JSON_EXTRACT(s2s_payload, '$.destination.code')

如果我想过滤 where ""eventtype"":""search"" 我该怎么做?

我尝试使用 CAST(s2s_payload AS CHAR) = '{"eventtype"":""search"}' 但这不起作用。

【问题讨论】:

  • 你试过CAST(json_extract(s2s_payload, '$.eventtype') AS varchar) = 'search'吗?
  • 这似乎成功了。谢谢!
  • 我把评论变成了答案。

标签: sql amazon-web-services hive presto amazon-athena


【解决方案1】:

您需要使用 json_extract + a CAST 来获取实际值以进行比较:

CAST(json_extract(s2s_payload, '$.eventtype') AS varchar) = 'search'

或者,与json_extract_scalar 相同(因此不需要CAST):

json_extract_scalar(s2s_payload, '$.eventtype')

【讨论】:

  • 另外,我们可以使用json_extract_scalar, json_extract_scalar(s2s_payload, '$.eventtype') = 'search'
猜你喜欢
  • 2023-03-13
  • 2020-02-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-10
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
  • 2022-01-23
相关资源
最近更新 更多