问题描述
我正在使用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 }
}
}
}
}
]
}