繁体   English   中英

无法使用 python azure-storage-file-datalake SDK 在 Azure Data Lake Gen2 中创建 Append Blob

[英]Cannot create Append Blobs in Azure Data Lake Gen2 using python azure-storage-file-datalake SDK

我的用例要求我不断地将传入消息写入存储在 Azure Data Lake Gen2 存储帐户中的文件中。 我可以通过触发 function 创建文件,它使用 python azure-storage-file-datalake SDK 与存储帐户进行交互。

问题是,默认情况下,使用 DataLakeFileClient class 的 create_file() 方法创建的文件是块 Blob(并且没有任何参数可以更改创建的 blob 的类型),这意味着我不能 append 之后的数据新消息到达。

我已经尝试使用 python azure-storage-blob SDK,但是,它无法使用路径在我的数据湖的容器中定位文件。

这将是我如何创建文件的示例,尽管这些文件以 Block Blob 的形式出现:

if int(day) in days:  
    day_directory_client.create_directory()                                     
    file_client = day_directory_client.create_file(f'{json_name}')                                                 
    file_client.append_data(data=f'{str(message_body)}\n', offset=0,  
    length=len(str(message_body)))                                     
    file_client.flush_data(len(str(message_body)))                                     
    write_to_cache(year, month, day, json_path)

感谢我能得到的任何帮助,谢谢!

如果要在 Azure Data Lake Gen2 帐户中创建 append blob,则需要使用azure-storage-blob package 而不是azure-storage-file-datalake

azure-storage-file-datalake package 是Azure Data Lake Store REST API的包装器,它不允许您指定 blob 类型。

通过使用 BlobClient 库在 Azure Datalake Storage Gen2 中创建和 append 一个 blob,我能够实现您的要求,使用以下代码:

from azure.storage.blob import BlobClient

#converted a pandas dataframe to csv (your data can be converted to your desired file format)

data=df.to_csv()
sas_url="https://<ACCOUNT_NAME>.blob.core.windows.net/<CONTAINER>/<DIRECTORIES>/<BLOBNAME>?<SAS TOKEN>"
blob_client = BlobClient.from_blob_url(sas_url)
blob_client.upload_blob(data, blob_type="AppendBlob")

在数据湖中创建 append blob 后,您可以在每次要添加值时使用 blob_client.append_block(data) append 文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM