发送有关在Azure Data Lake Gen 1中创建新文件的事件

Alb*_*ous 5 event-handling azure webhooks azure-data-lake azure-functions

一旦将新文件添加到第1代Azure数据湖中后,我想向外部NIFI流发送事件或通知。

有人工作过,或者有关于此用例的任何信息吗?

Ada*_*zak 5

嘿,这是一个很好的问题,不幸的是,目前还没有可以挂起的现成事件,但是我找到了一种使用诊断日志的方法

所以想法很简单

  1. 在ADLSv1上设置诊断日志以将日志流式传输到事件中心
  2. 触发逻辑应用程序,用于事件中心上的新事件

在此处输入图片说明


因此要在ADLSv1上设置诊断日志

  1. 转到ADLSv1上的诊断设置

在此处输入图片说明

  1. 添加诊断设置

在此处输入图片说明

  1. 设置到您的活动中心的链接

在此处输入图片说明


现在设置逻辑应用

  1. 开放逻辑应用设计器

在此处输入图片说明

  1. 添加事件中心触发器(假定存在名为stackdemohub的中心)

在此处输入图片说明

  1. 添加过滤器数组动作

在此处输入图片说明

3.1。设置从到表达式

triggerBody()?['ContentData']['records']
Run Code Online (Sandbox Code Playgroud)

3.2。将右侧条件设置为“创建”,并将左侧条件字段设置为expression

item()['operationName']
Run Code Online (Sandbox Code Playgroud)
  1. 添加for-each循环并通过过滤器数组步骤传递主体

在此处输入图片说明

  1. 保存并运行

5.1。您将看到逻辑应用成功执行时

在此处输入图片说明

您会在列表中找到新文件

在此处输入图片说明

如您所见,在演示文件夹中,我上传的文件之一称为MarketplaceCharges.json。

每个事件看起来像这样

{
    "time": "2019-09-18T07:48:20.342Z",
    "resourceId": "/SUBSCRIPTIONS/2BCB9F3D-3F6B-4345-A49E-86D3141C7F73/RESOURCEGROUPS/STACKDEMO/PROVIDERS/MICROSOFT.DATALAKESTORE/ACCOUNTS/STACKDEMO",
    "category": "Requests",
    "operationName": "create",
    "resultType": "201",
    "callerIpAddress": "::ffff:111.222.333.444",
    "correlationId": "93faafd5-dfa2-4432-91f8-c7f360d80655",
    "identity": "adam@marczak.io",
    "properties": {
      "HttpMethod": "PUT",
      "Path": "/webhdfs/v1/demo/MarketplaceCharges.json",
      "RequestContentLength": 0,
      "ClientRequestId": "288c654f-0948-4468-8e92-b158cc265c54",
      "StartTime": "2019-09-18T07:48:20.264Z",
      "EndTime": "2019-09-18T07:48:20.334Z",
      "UserId": "8162E212-E32B-443C-8F13-1CDA7B264DDB"
    }
}
Run Code Online (Sandbox Code Playgroud)

并且您通过文件路径/webhdfs/v1/demo/MarketplaceCharges.json获得了价值

我在ADLSv1上创建了3个文件,并按预期在循环中获得了3个项目

在此处输入图片说明

现在,您可以使用此事件信息执行任何操作,并在需要时将其发送。


最后,您可能需要将逻辑应用程序更改为功能应用程序,以防止大量请求,因为逻辑应用程序在规模上并不便宜

triggerBody()?['ContentData']['records']
Run Code Online (Sandbox Code Playgroud)

还有一个重要的注意事项,对于较大的文件,请确保添加一些延迟,因为创建的请求类型是文件出现在存储中时,即使文件仍在复制中。在这种情况下,还会发生进一步的“附加”事件。


小智 -1

尽管 Azure Data Lake Storage (ADLS) Gen2 是基于 Azure Blob 存储构建的,但仍记录了一些已知问题和差异

由于这些差异,我相信我们无法使用可用于 Blob 存储或事件网格的现有绑定。

但您仍然可以拥有一个由计时器触发的函数,并使用ADLS v2 REST API来读取/更新文件。