在google bigdata sql查询中转换json日期列
Posted
技术标签:
【中文标题】在google bigdata sql查询中转换json日期列【英文标题】:Convert a json date column in google bigdata sql query 【发布时间】:2021-05-08 14:35:20 【问题描述】:我正在尝试获取表中的一列,该列的值是一个包含日期的 json 字符串。
SELECT DISTINCT
contact_date,
JSON_value(contact_date, '$.value') as date1
FROM arcus.encounter
代码产生这个错误
错误:对于参数类型:DATETIME、STRING 的函数 JSON_VALUE 没有匹配的签名。支持的签名:JSON_VALUE(STRING, [STRING]) at [3:3]
SELECT DISTINCT
contact_date,
FROM arcus.encounter
LIMIT 5
"value": "2014-11-05T00:00:00"
【问题讨论】:
根据报错信息,该列已经是日期了。 您正在处理的表的架构是什么? (更准确地说是 arcus.encounter contact_date)。 JSON_VALUE 函数对 JSON 的 STRING 表示进行操作,您的列似乎不符合该要求。 @Cylldbycontact_date
列包含 JSON 字符串而不是字符串。问题是如何将该 JSON 字符串中的值转换为日期格式。说尝试过的方法不起作用,忽略了一点,即如果它确实起作用,那么向 SO 发布问题就没有意义了。
@HarlanNelson 实际上我的问题不是很准确。我的观点是我们需要更多关于如何构建表格的信息。当我尝试使用 SELECT JSON_VALUE("\"value\": \"2014-11-05T00:00:00\"", '$.value') AS 结果重现问题时......我的没有错误边..
【参考方案1】:
JSON_VALUE 函数的两个参数都应该是字符串。即,JSON_VALUE(字符串,[字符串])。 从错误消息中可以清楚地看出,contact_date 的类型是 DATETIME。这就是函数返回错误的原因。为了使用 JSON_VALUE,contact_type 的类型应该是字符串。
更多说明请参考以下链接,
JSON_VALUE
【讨论】:
以上是关于在google bigdata sql查询中转换json日期列的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Spring Data Cloud Spanner 中将 java.sql.Timestamp 转换为 com.google.cloud.Timestamp