Presto 生成 JSON 结果

lcl*_*kyo 7 sql json presto trino

我有一个 json 表,它是由

CREATE TABLE `normaldata_source`(
  `column1` int, 
  `column2` string, 
  `column3` struct<column4:string>)
Run Code Online (Sandbox Code Playgroud)

样本数据是:

{
  "column1": 9,
  "column2": "Z",
  "column3": {
    "column4": "Y"
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我做

SELECT column3
FROM normaldata_source
Run Code Online (Sandbox Code Playgroud)

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

这可能吗?

*编辑此查询给出以下结果:

SELECT CAST(column3 AS JSON) as column3_json
FROM normaldata_source
Run Code Online (Sandbox Code Playgroud)

结果

kyl*_*yre 1

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

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

尽管我最初认为这是一个烦人的解决方法,但我现在开始认为这对于我的应用程序来说是正确的选择