【问题标题】:Athena (Trino SQL) parsing JSON document using fields (dot notation)Athena (Trino SQL) 使用字段解析 JSON 文档(点表示法)
【发布时间】:2021-11-20 14:11:12
【问题描述】:

Athena (Trino SQL) 使用字段(点表示法)解析 JSON 文档(在 Athena 中称为文档 1 的表列)

如果底层 json(Athena 中称为文档 1 的表列)是{a={b ... 的形式 我可以在 Athena (Trino SQL) 中使用

来解析它
document1.a.b

但是,如果 JSON 包含 {a={"text": value1 ...

引号将正确解析。

有没有办法用引号对“字段”进行 JSON 解析?

如果没有,是否有一种优雅的方式来解析“文本”并获取值为 1 的字符串? [请看我下面的评论]。

不能更改 json 及其 Athena“表”中的引号,因此我需要在 Trino SQL 语法中工作的东西。

错误信息格式为:SQL Error [100071] [HY000]: [Simba][AthenaJDBC](100071) An error has been thrown from the AWS Athena client. SYNTAX_ERROR: Expression [redacted] is not of type ROW

注意:不是Oracle Dot Notation Question的副本

【问题讨论】:

  • 可以强制转换(检索为 varchar),然后应用标准 Trino 运算符,例如子字符串、位置等。语法会很长,但如果有足够的耐心看透它,它可以工作.如果有人有比此评论更具描述性的答案,请发布。

标签: json format amazon-athena json-deserialization trino


【解决方案1】:

点表示法仅适用于 struct<…> 等列类型。您可以对 JSON 数据执行此操作,但从错误和您的描述来看,情况似乎并非如此。我假设您的专栏是string 类型。

如果您在 string 列中有 JSON 数据,您可以使用 JSON 函数通过 JSONPath 解析和提取其中的一部分。

【讨论】:

  • 注意:在 Trino 中,类型是 varchar,为了解析,显然必须将任何内容转换为 varchar。另请参阅我对这个问题的评论(如果有兴趣)。
  • Athena 的奇怪之处在于 DDL 是通过 Hive 运行的,它使用“string”和“struct”之类的名称,而 DML 是通过 Presto/Trino 运行的,其中相应的类型称为“varchar”和“行”。
猜你喜欢
  • 2023-01-26
  • 2011-12-28
  • 2022-10-04
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多