将新文件添加到第1代Azure数据湖后,我想向外部NIFI流发送事件或通知。
任何人都可以使用该用例或对此用例有任何信息吗?
答案 0 :(得分:5)
嘿,这是一个很好的问题,不幸的是,目前还没有可以挂起的现成事件,但是我找到了一种使用诊断日志的方法。
所以这个想法很简单
因此要在ADLSv1上设置诊断日志
现在设置逻辑应用程序
3.1。设置从到表达式
triggerBody()?['ContentData']['records']
3.2。将右侧条件设置为“创建”,左侧条件字段设置为表达式
item()['operationName']
5.1。您将看到逻辑应用程序成功执行
您会在列表中找到新文件
如您所见,我上传的文件之一是演示文件夹中的MarketplaceCharge.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"
}
}
您将通过文件路径 /webhdfs/v1/demo/MarketplaceCharges.json
获得价值我在ADLSv1上创建了3个文件,并按预期在循环中获得了3个项目
现在,您可以使用此事件信息执行任何操作,并在需要时将其发送给您。
结束语时,由于逻辑应用程序的规模并不便宜,您可能希望将逻辑应用程序更改为功能应用程序
[FunctionName("EventHubTriggerCSharp")]
public static void Run([EventHubTrigger("stackdemo", Connection = "EventHubConnectionAppSetting")] EventData[] eventHubMessages, ILogger log)
{
foreach (var message in eventHubMessages)
{
// parse items and do something
}
}
对于较大的文件,还要另外一个重要说明,请确保在此过程中增加一些延迟,因为创建的请求类型是文件出现在存储中时,即使文件仍在复制中。在这种情况下,还会发生其他“附加”事件。
答案 1 :(得分:0)
尽管Azure数据湖存储(ADLS)第2代是基于Azure Blob存储构建的,但有两个known issues and differences已记录。
由于存在这些差异,我相信我们无法使用可用于Blob存储或事件网格的现有绑定。
例如,您仍然可以具有由计时器触发的功能,并使用ADLS v2 REST API来读取/更新文件。
答案 2 :(得分:0)
我通过使用Azure Data Lake Gen 2找到了解决此问题的方法,我们可以触发不同类型的事件,例如“ Azure函数”,并使该函数将通知发送到刚添加到NIFI流中的文件的路径,从诸如“ ListenHttp或HandleHttpRequest”处理器之类的侦听器处理器开始。之后,我们可以使用任何处理器从您的存储中提取该文件。
答案 3 :(得分:0)
这也可以使用以下方法解决:
Microsoft.Storage.BlobCreated
相关联)