【发布时间】:2021-06-17 23:01:56
【问题描述】:
我对数据工程领域非常陌生,但这里是:
我有用户上传各种格式的数据,我想将其转换为单一标准格式。例如:
源格式 #1
{
"firstName": "Bob",
"lastName": "Smith",
"birthdate": "1990-01-01",
"favoriteFood": "pizza",
"favoriteDrink": "beer"
}
源格式 #2
{
"name": {
"first": "Bob",
"last": "Smith"
}
"birthdate": {
"year": "1990",
"month": "01",
"day": "01"
}
"favorites": {
"food": "pizza",
"drink": "beer"
}
}
目标格式:
{
"name": {
"first": "Bob",
"last": "Smith"
}
"birthdate": "1990-01-01",
"favorites": {
"food": "pizza",
"drink": "beer"
}
}
等等。可能有数十种或数百种不同的源格式我想要转换成某种目标格式。
我的第一个想法是构建一种“格式目录”,我会根据它测试每种格式,并在匹配时将转换/映射应用于目标格式。在我看来,这听起来像是一个很常见的问题,它可能已经以某种方式得到了解决,但我什至不确定谷歌是为了什么。
到目前为止,我遇到的唯一一种 听起来是正确的事情是 AWS Glue(它谈到“自动模式发现”),但即使这样似乎也更针对提取数据各种数据库的集合,并将它们 ETL 到单个数据库中,而不是读取原始数据(从发送到 API 端点的数据或从磁盘上的平面文件)。
我感兴趣的功能,按需求顺序排列:
- 如果源数据与已知(或自动发现)格式匹配,请将其转换为目标格式。
- 定义必填和可选字段。示例:如果
favorites 不存在,仍提取其他“已知”字段 - 能够识别不同类型的格式(例如 JSON 与 XML)。
编辑:以防万一,我现有的大部分代码都是用 Python 编写的,但这是一个足够大的用例,我可以用另一种语言构建一个单独的服务来处理。
【问题讨论】:
-
您在问题中提供了几种源格式。这些的目标格式是什么样的,是否有“映射”来做到这一点?原始数据源也总是 JSON 格式,还是可以分隔等?
-
@vmachan 为完整性添加了目标格式。对于此用例,源始终为 JSON 格式。
标签: validation parsing etl data-modeling data-ingestion