AWS Glue:使用混合数据从Datalake(S3)导入JSON

时间:2019-07-02 15:15:13

标签: json aws-glue aws-glue-data-catalog

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

背景

我们具有事件驱动的体系结构,并开始将应用程序产生的所有事件存储到数据湖(S3存储桶)中。在存储事件之前,我们先对它们进行清理(删除敏感信息),并在每个事件周围添加一个信封,其中包含一些常规数据:

  • 事件起源(哪个应用程序生成了事件)
  • 事件类型(生成了哪种事件)
  • 时间戳记(何时生成事件)
  • ...

借助Kinesis Streams和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 Glue挂接到原始数据并使用ETL Jobs来聚合事件数据。据我了解,我需要为我的源数据提供一个数据目录,而这正是我在其中苦苦挣扎的地方,因为JSON总是包含不同的事件,这些事件被批处理在一起。标准的“ Crawler”无法处理此问题。它可以处理,但是会基于每个JSON文件创建无意义的模式。

我想要实现的目标:

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

我的问题

  • 在我们的数据湖中使用胶水的最佳方法是什么?
  • 是否有可能将爬虫与自定义分类器和某种过滤器一起用于我们的数据湖?
  • 我是否需要转换数据才能真正使用AWS胶水?

1 个答案:

答案 0 :(得分:0)

让我尝试一下。

  1. 解析数据湖以过滤出我感兴趣的事件 在
  2. 使用我感兴趣的事件并做一些 进行转化/聚合/计算

->您可以为每个事件展平json,然后将其导出到不同的S3存储桶中。在https://aws.amazon.com/blogs/big-data/simplify-querying-nested-json-with-the-aws-glue-relationalize-transform/

处参考一些python代码。

->使用Glue抓取您的新存储桶并生成新的表架构,然后在Athena中您应该能够看到它并在表顶部进行过滤器/查询/聚合。对转换后的数据满意后,您可以将其进一步导入Redshift或RDS。

  1. 将结果存储到我们当前的Google Analytics(分析)RDS中或任何地方(足以 我们现在的目的)

->在上面的Glue Catalog中,添加Redshift / RDS连接,然后使用Python Spark(需要一些有关使用数据框的基本知识)将数据加载到Redshift或RDS中。 https://www.mssqltips.com/sqlservertip/5952/read-enrich-and-transform-data-with-aws-glue-service/

  1. 每天解析新事件并插入/添加/更新 到我们的分析rds

->您可以安排Glue搜寻器从新存储桶中发现新数据。 另外,Lambda也是一个很好的选择。可以使用S3对象创建(带有扁平化json的新存储桶)触发Lambda进行预处理,ETL,然后将其插入Redshift / RDS(使用JDBC驱动程序)