Athena 嵌套结构查询 - 如何在 SQL 中查询 Value_counts

Posted

技术标签:

【中文标题】Athena 嵌套结构查询 - 如何在 SQL 中查询 Value_counts【英文标题】:Athena nested Struct Querying - how to query Value_counts in SQL 【发布时间】:2020-05-17 16:49:56 【问题描述】:

我在 AWS Athena 中有一个大的嵌套结构。这是表中名为“petowners”的一列:

_id=5e6b531a412345e0e86aeae0, status=NotAnalyzed, animalcategories=[categoryname=mammals, matches=1, categoryname=birds, matches=2, categoryname= UnknownField, matches=4], ...many-other-values

我正在寻找:

    相当于列中的python函数value_counts。 意思是我正在寻找将输出的 SQL Athena 命令 这一行:[mammals:1, birds:2, UnknownField:4] 一种查询聚合的方法——创建一个总数的直方图 每个主人的宠物数量row = 7 有多少宠物主人在“动物类别”中有UnknownField 整张桌子有多少种动物?

【问题讨论】:

当由于数据结构导致逻辑复杂时,可以使用正则表达式提取出需要的数据。 【参考方案1】:

这是解决方案的开始: 我们称表为“entire_table”

 SELECT t.entire_table._id,
         t.petowners.animalcategories,
         ac.categoryname,
         ac.matches
FROM entire_table t, UNNEST(t.petowners.animalcategories) AS t(ac)

此查询将输出一个表,其中包含名为“categoryname”和“matches”的列,其中每一行重复的类别名称与每个 user_id 的数量一样多:

| _id |动物类别 |类别名称 |比赛 | |--------------------------|---------- -------------------------------------------------- ---------------------------------------|---------- ----|----------| | 5e6b531a412345e0e86aeae0 | [categoryname=mammals,matches=1,categoryname=birds,matches=2,categoryname=UnknownField,matches=4] |哺乳动物| 高分辨率照片| CLIPARTO 1 | | 5e6b531a412345e0e86aeae0 | [categoryname=mammals,matches=1,categoryname=birds,matches=2,categoryname=UnknownField,matches=4] |鸟| 高分辨率照片| CLIPARTO 2 | | 5e6b531a412345e0e86aeae0 | [categoryname=mammals,matches=1,categoryname=birds,matches=2,categoryname=UnknownField,matches=4] |未知字段 | 4 |

以下是启用该解决方案的最相关链接(按重要性顺序排列):

A similar question in *** Presto documentation showing Lambda Expressions and Functions which are another way to work with nested structs AWS explaining about "Querying Arrays with Complex Types and Nested Structures" A good blog read from Joe Celko about "Nesting levels in SQL" SQL original paper from 1970 IBM research by E.F.CODD added for the sake of "being pretty" and as a token of respect SQL pdf HUGE manual - a bit of an overkill but under "Query expressions" at page 323 I look for the answers I can't seem to find anywhere else

在进入兔子洞时,我遇到了一些我认为值得一提的不太有用的链接,为了进行全面审查,我将在此处添加它们:

AWS Athena forum - many good questions, yet sadly few answers Presto google group - focused on the engineering part, not many answers as well

我希望有一天有人会发现这篇文章很有用,并从浏览网页的几个小时中获得一条捷径,以寻找我必须通过的答案。祝你好运。

【讨论】:

以上是关于Athena 嵌套结构查询 - 如何在 SQL 中查询 Value_counts的主要内容,如果未能解决你的问题,请参考以下文章

在 Athena 中,如何在结构中的数组中查询结构的成员?

AWS Athena - 如何参数化 SQL 查询

如何在 Amazon Athena 上查询(搜索)具有 JSON 值的 sql?

在查询athena时将结构转换为json

Athena 在另一个 json 结构数组中未嵌套 json 字符串数组

从 Python Lambda 函数连接 Athena SQL 查询中的变量