首页 > 解决方案 > 如何在 azure 数据工厂中使用 azure 函数将数据写入文件

问题描述

我在天蓝色数据湖存储 gen2 位置有一个文件(employee_details.csv),它是一个空白文件。我要求仅将当前日期时间存储到文件内容中。但我无法在 azure 数据工厂中找到任何可用的内置组件。因此,我正在考虑使用 azure 函数,但我是 azure 函数的新手。您能指导我如何使用 azure 函数实现相同的功能吗?

标签: azurefunction

解决方案


对于这样一个简单的用例,Azure 函数有很多开销。尽管如此,当从 ADF 管道触发时,下面的函数对我有用。要使该功能正常工作,必须启用其托管标识并授予对输出文件的写访问权限 - 通过 RBAC 或 ACL。此函数的生产版本需要错误处理、参数化等。在 Azure 中部署该函数有详细的文档,因此我没有在这里讨论。

import azure.functions as func
import logging
import datetime
from azure.identity import ChainedTokenCredential,ManagedIdentityCredential
import os, uuid, sys
from azure.storage.filedatalake import DataLakeServiceClient

def main(req: func.HttpRequest) -> func.HttpResponse:    

    MSI_credential = ManagedIdentityCredential()
    credential_chain = ChainedTokenCredential(MSI_credential)
    client = DataLakeServiceClient(
               https://<your-storage-account>.dfs.core.windows.net/",
               credential = credential_chain)

    # Create file
    file_client = client.get_file_client(
                    file_system = "<your-adlsgen2-container>",
                    file_path = "<your-timestamp-file")
    file_client.create_file()

    # Write current timestamp to file
    current_date_time = datetime.datetime.now()
    file_content = current_date_time.strftime("%m/%d/%Y %I:%M %S %p")
    file_client.append_data(data=file_content, offset = 0)
    file_client.flush_data(len(file_content))

    return func.HttpResponse("Ok", status_code=200)

推荐阅读