使用U-SQL Json Outputter创建嵌套的JSON数据

时间:2017-10-30 06:41:03

标签: json azure nested u-sql

我必须将表数据输出到嵌套的json(将地址,州,城市列作为地址的子对象),如下所示,

[
{
    "name": "Country",
    "size": 0,
    "children": [
        {
            "name": "America",
            "size": 0,
            "children": [
                {
                    "name": "SouthAmerica",
                    "size": 2,
                    "children": []
                }
            ]
        }
     ]
  }
]

但默认情况下,JSON输出器只创建如下的普通json文件,

[
  {
   "name": "Europe",
    "size": 1,
  }
]

如何使用U-sql自定义输出器创建嵌套的json?建议我一些样品。

提前致谢!

1 个答案:

答案 0 :(得分:0)

U-SQL GitHub页面上提供的示例JSON输出器不支持嵌套输出。你恐怕要编写自己的嵌套输出器。

其中一个复杂因素是,您需要能够保持完整的嵌套关联,并决定是否需要支持同级嵌套(例如,A包含相同非叶级别的B和C)或仅单个路径嵌套(例如,A包含B,而B又包含C)。

你有两个选择来编写这样的输出器,为了获得灵感,我会看一下SQL Server的FOR XML功能:

  1. 如果您只想要单路径嵌套,请查看有关如何将行集分解为嵌套级别的FOR XML AUTO模式语义。您可能需要将参数传递到Outputter中,以确定列如何映射到关卡,以模仿AUTO模式的谱系启发式。

  2. 如果你想要兄弟姐妹的支持,你可以看看FOR XML EXPLICIT的模型:用户必须编写一个生成SQL查询的通用表,然后可以通过流式方式转换输出器,或

  3. 您可以使用SQL.MAPSQL.ARRAY类型列生成一些层次结构,然后编写一个生成嵌套的自定义输出器。

  4. 您可以编写构成较小JSON文档的JSONifier函数,然后可以嵌套为包含JSON片段的字符串,并使用多个SELECT构建嵌套(在SQL Server中有点像FOR XML PATH,但可能不是在行集级别轻松完成。)

  5. 或者,生成平面JSON并找到一个后处理工具,将JSON重塑为您需要的结构。

    我目前正在研究第一种尝试方法#3(SQL.MAPSQL.ARRAY)。