如何使用映射数据流来展平数据湖中 JSON 字符串列的层次结构

How to use Mapping Data flow to flatten hierarchy of a JSON string column in Data Lake

我在 Data Lake 的容器中有 CSV 文件,我正在尝试将文件中的属性列(位于 json)转换为多个列。当我尝试使用数据流来执行此操作时,它将属性列识别为字符串,我无法将其更改为数组,以便我可以展平或从中创建派生列。我在这里做错了什么吗 CSV 文件格式:

ID Name Attribute
123 Test {"Referrer URL":null,"Query Parameters":"topics"}
456 Test2 {"Referrer URL":"www.google.com","Query Parameters":"WebTopics"}

在遵循 Mark 和 Joseph 的指导后: 使用解析函数并从这些列 json object 中的键中删除空格时遇到的问题

  1. replace 函数不会也从与这些键关联的值中删除空格吗?如果我们在这些字段中获取句子类型数据,那可能是个问题。
  2. 当我按照约瑟夫提到的所有步骤进行操作时,我仍然 运行 遇到问题。它可能与我如何设置数据集有关。如果我使用数据预览来检查数据,我会看到源未正确填充列。在示例中,它只是在 Refferer URL 为 null 后停止,并且不显示其他值以及列中 json object 的右括号。添加数据湖连接设置的图片。

因为您的 JSON 字符串实际上是分隔文本文件中的字符串字段,您首先需要使用解析转换来解析它。现在“Attribute”是一种 JSON 数据类型,您可以使用其中的结构和数组。

https://docs.microsoft.com/en-us/azure/data-factory/data-flow-parse

选择“属性”作为表达式 属性 并为列 属性 命名。 ADF 将根据该新名称创建一个新的分层列,其属性是您在输出 属性.

中标识的列

更新:
嗨@Hammad Hassan Khan,由于您的 Attribute 列包含“,”字符,因此我将其编辑如下。并在源代码中使用竖线 (|) 作为列分隔符:


附上@Mark Kromer MSFT 给出的答案。是的,我们可以在映射数据流中使用 Parse transformation 来实现这一点。但是 Parse activity 不支持键包含 space 个字符的 JSON 对象。因此,我们需要替换space个字符。

我为此创建了一个简单的测试。结果如下:

  1. 数据来源如下:

  2. DerivedColumn1activity。 Select Attribute 列,输入表达式 replace(Attribute,' ','' ) 替换键中的 spaces。因为在接下来的Parse1activity中,不支持包含space个字符的key。
    数据预览如下:

  3. Parse1activity、selectAttribute栏中,输入Attribute作为表达式,输入 (ReferrerURL as string,QueryParameters as string) 作为 输出列类型
    数据预览如下: