AWS胶水:从DataLake(S3)导入JSON具有混合数据



我目前正在努力了解如何创建数据湖的数据目录(= source(。

背景:

我们有一个以事件为导向的架构,并开始存储我们应用程序在数据湖(S3桶(中产生的所有事件。在存储这些事件之前,我们对它们进行了消毒(删除敏感信息(,并在每个事件周围添加一个信封,并使用一些一般数据:

  • 事件原点(哪个应用程序生成了事件(
  • 事件类型(生成了什么样的事件(
  • 时间戳记(事件生成的时间(
  • ...

使用Kinesis流和Firehose,我们将这些事件汇总在一起,并将它们作为JSON文件存储在S3存储桶中。水桶是这样结构化的://////

在那里,我们将信封作为JSON文件存储了批处理的事件。这意味着一个JSON文件包含多个事件:

{
  "origin": "hummingbird",
  "type": "AuthenticationFailed",
  "timestamp": "2019-06-30T18:24:13.868Z",
  "correlation_id": "2ff0c077-542d-4307-a58b-d6afe34ba748",
  "data": {
    ...
  }
}
{
  "origin": "hummingbird",
  "type": "PostingCreated",
  "timestamp": "2019-06-30T18:24:13.868Z",
  "correlation_id": "xxxx",
  "data": {
    ...
  }
}

数据对象包含事件的特定数据。

现在,我认为我可以使用AWS胶将原始数据连接到原始数据中,并使用ETL作业来汇总事件数据。据我所知,我需要为源数据提供数据目录,这是我正在努力的地方,因为JSON始终包含不同的事件,这些事件被批量合计。标准的" crawler"无法处理。.嗯,但是它基于每个JSON文件创建了非固定模式。

我想实现的目标:

  • 在数据湖中解析以过滤我对我感兴趣的事件
  • 使用我感兴趣的事件,并对其进行一些转换/聚合/计算
  • 将结果存储到我们当前的分析RDS或任何地方(现在足以满足我们的目的(
  • 每天通过新事件进行解析,然后插入/附加/更新我们的分析RDS

我的问题我有:

  • 在我们的数据湖中使用胶水的最佳方法是什么?
  • 是否有可能将爬行者与自定义分类器一起使用以及与我们的数据一起使用某种过滤器?
  • 我是否需要更改数据,才能实际使用AWS胶?

让我尝试一下。

  1. 在数据湖中解析以滤除我感兴趣的事件在
  2. 使用我感兴趣的事件并做一些事件使用它的转换/聚合/计算

->您可以将每个事件的JSON弄平,然后将其导出到不同的S3存储桶中。请参阅此处的一些python代码https://aws.amazon.com/blogs/big-data/simplify-querying-querying-nested-nested-json-with-the-with-the-aws-glue-relationalize-transform/

->使用胶水爬上新的水桶&生成一个新的表格架,然后在雅典娜,您应该可以看到它&在表格顶部进行过滤器/查询/聚合。一旦您对转换的数据感到满意,就可以将其进一步导入Redshift或RDS。

  1. 将结果存储到我们当前的分析RD或任何地方我们现在的目的(

->从上面的胶水目录中,添加红移/RDS连接,然后使用Python Spark(需要与DataFrame一起使用一些基本知识(将数据加载到Redshift或RDS中。https://www.mssqltips.com/sqlservertip/5952/read-enrich-and-transform-data-with-with-aws-glue-service/

  1. 每天在新事件中解析并插入/附加/更新对于我们的分析RDS

->您可以安排胶水爬行者从新存储桶中发现新数据。另外,Lambda也是一个不错的选择。可以使用S3对象创建(然后是带有扁平JSON的桶(来触发lambda,以预处理等&然后插入红移/RD(使用JDBC驱动程序(

最新更新