如何使用 ETL (AWS Glue) 聚合数据,以便我们可以使用 Athena 通过特定属性仅选择一部分数据
Posted
技术标签:
【中文标题】如何使用 ETL (AWS Glue) 聚合数据,以便我们可以使用 Athena 通过特定属性仅选择一部分数据【英文标题】:How to aggregate data with ETL (AWS Glue) so we can use Athena to select by certain attribute for only a percentage of data 【发布时间】:2021-05-06 20:40:19 【问题描述】:如果有更好的地方可以问这类问题,请告诉我。
我有一个存储和尝试读取文档的服务。对于每个文档,该服务都会以一定的信心提取和读取行和单词。
单个文档(ETL 之前)的负载如下所示
"Blocks": [
"Type": "LINE",
"Confidence": 90
"Value": "this is a sentence"
...
,
"Type": "WORD",
"Confidence": 99
"Value": "this"
...
,
"Type": "WORD",
"Confidence": 97
"Value": "is"
...
,
"Type": "WORD",
"Confidence": 89
"Value": "a"
...
,
"Type": "WORD",
"Confidence": 99
"Value": "sentence"
...
,
"Type": "WORD",
"Confidence": 50
,
"Type": "LINE",
"Confidence": 90
"Value": "example of another line"
...
,
...
]
我正在为 ETL 聚合函数寻找高级算法或想法,以便我可以使用 Athena 进行查询,从而得到类似的结果
“给我所有 30% 单词置信度 > 60 的文档”
【问题讨论】:
【参考方案1】:不需要etl,athena可以原生读取json,见
https://docs.aws.amazon.com/athena/latest/ug/querying-JSON.html
在您创建表之后,您需要为您的任务编写正确的查询。你的陈述“给我所有的文档,其中 x% 的单词有一些信任”是非常标准的。细节取决于你如何定义你的表列,但你可以这样做:
SELECT docid from mytable group by docid
having count_if(confidende>60)* 1./count(*) > 0.3
【讨论】:
嗨,感谢您的回答,是的,我们也考虑过这种方法,但是我们的 json 可以达到几个 mb。此外,查询可能非常复杂。所以我们想要一个解决方案,我们可以将我们的聚合数据带到顶层以进行更简单的查询。我想我找到了一个可行的解决方案,我可能可以将数据聚合为百分比分布的直方图的地图表示。以上是关于如何使用 ETL (AWS Glue) 聚合数据,以便我们可以使用 Athena 通过特定属性仅选择一部分数据的主要内容,如果未能解决你的问题,请参考以下文章
从 AWS Redshift 到 S3 的 AWS Glue ETL 作业失败
AWS Glue:SQL Server 多个分区数据库 ETL 到 Redshift