Presto 生成 JSON 结果

问题描述

我有一个

创建的json表
CREATE TABLE `normaldata_source`(
  `column1` int,`column2` string,`column3` struct<column4:string>)

示例数据是:

{
  "column1": 9,"column2": "Z","column3": {
    "column4": "Y"
  }
}

如果我这样做

SELECT column3
FROM normaldata_source

它会产生一个结果 {column4=y}。但是,我希望它采用 json 形式 {"column4": "y"}

这可能吗?

*Edit 这个查询给了我以下结果:

SELECT CAST(column3 AS JSON) as column3_json
FROM normaldata_source

result

解决方法

我遇到了同样的问题,并且对于如何根据深层组合嵌套/结构进行处理感到非常困惑。我正在使用 Athena(来自 AWS 的带有 Hive 连接器的托管 Presto)。最后,我通过执行 CTAS(创建表作为选择)来解决它,在我想要的条件下,我选择了我想要的复杂列)并将其写入具有 JSON 基础 SerDe 格式的外部表。然后,通过 HiveConnector 的 $path 魔法列(或通过列出外部表位置下的文件),我获得结果文件并从中流出。

我知道这不是手头问题的直接答案 - 我相信我们必须等待 https://github.com/trinodb/trino/pull/3613 才能支持任意结构/数组组合 -> json。但也许这会帮助那些认为他们能够做到这一点的其他人。

虽然我最初认为这是一个烦人的解决方法,但我现在开始认为无论如何这是对我的应用程序的正确调用

,

Trino 357 (formerly known as Presto SQL) 开始,您现在可以将 mysite 强制转换为 row,它会保留列名:

JSON

=>

WITH normaldata_source(column1,column2,column3) AS (
    VALUES (9,'Z',cast(row('Y') as row(column4 varchar)))
)
SELECT cast(column3 as json) 
FROM normaldata_source

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...