查询雅典娜时将结构转换为json

ami*_*mit 6 sql json struct amazon-athena

我有一个雅典娜表,我没有创建或管理它,但可以查询。字段之一是结构类型。为了这个例子,让我们假设它看起来像这样:

my_field struct<a:string,
                b:string,
                c:struct<d:string,e:string>
                >
Run Code Online (Sandbox Code Playgroud)

现在,我知道如何查询此结构中的特定字段。但是在我的查询之一中,我需要提取完整的结构。所以我只用:

select my_field from my_table
Run Code Online (Sandbox Code Playgroud)

结果看起来像一个字符串:

{a=aaa, b=bbb, c={d=ddd, e=eee}}
Run Code Online (Sandbox Code Playgroud)

我想将结果作为json字符串:

{"a":"aaa", "b":"bbb","c":{"d":"ddd", "e":"eee"}}
Run Code Online (Sandbox Code Playgroud)

然后,该字符串将由另一个应用程序处理,这就是为什么我需要json格式的原因。

我该如何实现?

编辑:更好的是,有没有办法以扁平化的方式查询该结构?所以结果看起来像:

a   |   b   |   c.d  |  c.e   |
-------------------------------
aaa |   bbb |   ddd  |  eee   |
Run Code Online (Sandbox Code Playgroud)

Jam*_*mes 5

您可以使用parent_field.child_field符号直接引用嵌套字段。尝试:

SELECT
  my_field,
  my_field.a,
  my_field.b,
  my_field.c.d,
  my_field.c.e
FROM 
  my_table
Run Code Online (Sandbox Code Playgroud)

  • 我说我知道:-) 问题是对一个非常大的结构进行这样的查询,特别是在您事先不知道其结构的情况下,您只知道您想让它变得平坦。 (7认同)