每个嵌套级别的 XML/JSON 源代理项序列

xml/json source surrogate sequence per nesting level

提问人:XKB 提问时间:11/8/2023 最后编辑:XKB 更新时间:11/10/2023 访问量:63

问:

半结构 xml/json 文件通常用于以主-细节级联方式序列化来自不同级别实体的关系数据。 由于对 xml/json 文件进行了排序,因此不一定提供唯一键来保留顺序和层次结构。

大多数 ETL 提供了一种反序列化这些实体实例的方法,方法是将它们从 xml/json 文件调度回不同的主从级联表,生成一个整数动态代理序列 PER LEVEL,该序列可以传播到主记录(作为唯一的代理键)和详细记录(作为主的引用外键)。

我似乎在 ADF 转换(无论是解析、展平、代理等)中找不到这样的功能。

  • 在主级别进行分组可以达到对主记录进行唯一编号的目标,但链接会丢失到详细信息

  • 扁平化整个xml/json源代码可能非常繁重,冗余,并且需要大量的重新扫描和查找才能实现该目标。

问题:(在ADF中)有什么聪明的想法可以在整个源数据集上一次性(一次扫描)中执行每个级联主细节级别的多个代理序列编号吗?

谢谢


@Rakesh : '应该从一开始就这样做 |假设以下结构(国家/地区名称也可以嵌套为常规 XML 标记):

<geo>
  <country name="USA">
    <city>Miami</city>
    <city>Frisco</city>
  </country>
  <country name="France">
    <city>Paris</city>
    <city>Brest</city>
  </country>
</geo>

理想情况下,我会生成以下两个数据流,每个数据流都有一个独立的序列,跟踪顺序和结构:

country_id country_name
1 美国
2 法国
country_id city_id city_name
1 1 迈阿密
1 2 弗里斯科
2 3 巴黎
2 4 布列斯特

如果我得到两个序列(即使在 xml 保留的结构中),以下非规范化流程就可以了

country_id country_name city_id city_name
1 美国 1 迈阿密
1 美国 2 弗里斯科
2 法国 3 巴黎
2 法国 4 布列斯特

下面这个是不行的:

city_id country_name city_name
1 美国 迈阿密
2 美国 弗里斯科
3 法国 巴黎
4 法国 布列斯特

...因为如果你想到一个非常大且深度嵌套的数据集,它会在下游进行大量的重新处理和查找,以重新连接主从-细节代理,而前面的示例只需要一次传递解析/传递。

关于如何做的任何想法?

谢谢

azure-data-factory etl json-deserialization xml-deserialization

评论

0赞 Rakesh Govindula 11/14/2023
你能提供总的xml数据吗?你的 XML 中不存在吗?country_id
0赞 XKB 11/15/2023
你好 Rakesh,这是我的总 xml 数据,因为它是手动制作的(但如果您打算访问,我可以添加一堆法国城市;-))没有提供技术代理 ID,这就是重点。但你可以很容易地承认,国家的商业PK是国家名称和城市的城市名称(是的,德克萨斯州有一个巴黎,让我们忘记这种情况)
0赞 XKB 11/15/2023
我知道我的分期体操是关于在推送到维度和事实表之前从序列中提取代理项,但我的观点是优化:而不是暂时索引和查找代理项的业务键,我想利用数据在 xml 文件中排序(尤其是关于育儿)

答: 暂无答案