我对数据工程领域非常陌生,但这里是:
我有一些用户上传各种格式的数据,我想将其转换为单一的标准格式。例如:
源格式#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(它谈论的是"自动模式发现"(,但即使是这样,似乎也更倾向于将数据从各种数据库中提取出来,并将其ETLing到单个数据库中,而不是读取原始数据(从发送到API端点的数据或从磁盘上的平面文件中读取(。
我感兴趣的功能,按可取性排序:
- 如果源数据与已知(或可自动发现(格式匹配,请将其转换为目标格式
- 定义必填字段和可选字段。示例:如果不存在
favorite
,则仍然提取另一个";已知的";字段 - 能够识别不同类型的格式(例如JSON和XML(
Edit:如果重要的话,我现有的大多数代码都是用Python编写的,但这是一个足够大的用例,我可以用另一种语言构建一个单独的服务来处理。
我可能遗漏了一些东西,但以下是我所知道的。
- 就像XMLjson也有模式一样:https://json-schema.org/
- 如果您有模式,您将有关于转换的问题。这里有一个:json模式:如何从一个json模式转换到另一个
我认为你不会找到任何完全符合你要求的现成材料,但我认为你可以接近。
由于这是一个项目,不是一个快速的问题,我怀疑你是否会得到完整的代码答案。
HTH-