如何使用Python SDK在Azure数据湖中创建的文件上设置到期日期?

问题描述

我正在使用Python 3.8和第2代Azure数据湖。我想为我保存在数据湖上的文件设置过期时间。之后-azure.datalake.store.core.AzureDLFileSystem类| Microsoft文档,我尝试了以下操作

            file_client = directory_client.create_file(filename)
            file_client.upload_data(
                data,overwrite=True
            )
            ts = time.time() + 100
            file_client.set_expiry(path=path,expire_time=ts)

但出现错误

AttributeError: 'DataLakeFileClient' object has no attribute 'set_expiry'

在数据湖上创建文件时设置到期时间的正确方法是什么?

解决方法

发生错误的原因是,您似乎试图在类型azure.datalake.store.core.AzureDLFileSystem的对象上调用属于DataLakeFileClient的方法。这就是为什么您得到错误!对于类型DataLakeFileClient的对象,该方法不存在。

如果要调用set_expiry的方法,则必须首先创建正确类型的对象。

例如在Gen1中,首先按如下所述创建对象:

https://docs.microsoft.com/en-us/azure/data-lake-store/data-lake-store-data-operations-python

## Declare variables
subscriptionId = 'FILL-IN-HERE'
adlsAccountName = 'FILL-IN-HERE'

## Create a filesystem client object
adlsFileSystemClient = core.AzureDLFileSystem(adlCreds,store_name=adlsAccountName)

使用该对象,您可以调用

adlsFileSystemClient与代码示例中的完全相同。

set_expiry(path,expiry_option,expire_time=None)

只需确保您尝试在正确类型的对象上调用方法。

对于Gen 2:

from azure.storage.filedatalake import DataLakeServiceClient
datalake_service_client = DataLakeServiceClient.from_connection_string(self.connection_string)

# Instantiate a FileSystemClient
file_system_client = datalake_service_client.get_file_system_client("mynewfilesystem")

对于Gen2,您需要设置一个blob使其过期,如下所示:https://docs.microsoft.com/en-us/azure/storage/blobs/storage-lifecycle-management-concepts?tabs=azure-portal#expire-data-based-on-age

根据年龄过期数据

某些数据可能会在创建后的几天或几个月后过期。您可以 配置生命周期管理策略以通过删除使数据过期 根据数据时代。以下示例显示了删除的策略 所有超过365天的区块Blob。

{
  "rules": [
    {
      "name": "expirationRule","enabled": true,"type": "Lifecycle","definition": {
        "filters": {
          "blobTypes": [ "blockBlob" ]
        },"actions": {
          "baseBlob": {
            "delete": { "daysAfterModificationGreaterThan": 365 }
          }
        }
      }
    }
  ]
}