如何使用 Azure 流分析查询创建复杂类型

Posted

技术标签:

【中文标题】如何使用 Azure 流分析查询创建复杂类型【英文标题】:How to create complex types with Azure Stream Analytics queries 【发布时间】:2017-03-13 14:00:38 【问题描述】:

我尝试将平面 JSON 数据从事件中心转换为 DocumentDB。目标结构应如下所示:


   "id" : 1
   "field_1" : "value_1",
   "details" : 
      "detail_field_1":"abc",
      "detail_field_2":"def"
   

从源创建:


   "id":1,
   "field_1" : "value_1",
   "detail_field_1":"abc",
   "detail_field_2":"def"

我查看了 Azure 流分析的文档,但没有明确说明如何创建正确的查询。

谁能帮帮我?

【问题讨论】:

【参考方案1】:

您可以利用 the new javascript UDF feature 将嵌套的 JSON 对象写入输出。

注册一个用户自定义函数,“UDF.getDetails()”如下:

function main(obj) 
  //get details object from input payload
  var details_obj = ;

  details_obj.detail_field_1 = obj.detail_field_1;
  details_obj.detail_field_2 = obj.detail_field_2;

  return JSON.stringify(details_obj);

然后在查询中调用 UDF 以获取嵌套 JSON 对象的字符串。

SELECT
  id,
  field_1,
  UDF.getDetails(input) As details
INTO output
FROM input

【讨论】:

【参考方案2】:

使用 JavaScript UDF 功能,您可以返回复杂的 JSON。 示例写函数。

function main(obj) 
//get details object from input payload
var details_obj = ;

details_obj.detail_field_1 = obj.detail_field_1;
details_obj.detail_field_2 = obj.detail_field_2;

 return details_obj;

您不应该使用 JSON.stringify,因为它会使其成为字符串而不是 JSON 对象。

像这样使用它。

SELECT id,  field_1, UDF.getDetails(input) As details
INTO output
FROM input

【讨论】:

以上是关于如何使用 Azure 流分析查询创建复杂类型的主要内容,如果未能解决你的问题,请参考以下文章

如何使用基于分区键的 Azure 流分析查询数据

在 Azure 流分析查询中同时使用数组和记录类型

Azure Blob 存储和流分析

Azure 流分析:如何在运行时和以编程方式更新查询?

如何在 Azure 流分析查询中检查 null Json 属性?

如何在运行 Azure 流分析查询时获取系统时间