在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 表示进行操作,您的列似乎不符合该要求。 @Cylldby contact_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

多个Google表格/工作簿上的SQL联盟

如何在 SQL Workbench/J 中配置 sql 查询快捷方式?

如何在Google BigQuery中管理架构迁移

常用API3 BigData

如何在标准 SQL 中将 Epoch 时间戳转换为日期