【问题标题】:How do I set an expiration date on a file I create in the Azure Data lake using the Python SDK?如何为使用 Python SDK 在 Azure 数据湖中创建的文件设置过期日期?
【发布时间】:2020-08-27 14:01:16
【问题描述】:

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

            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'

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

【问题讨论】:

  • 你能告诉我你的意思expiration time吗?你想在一段时间后删除文件吗?
  • 我指的是“设置或删除指定文件的过期时间。此操作只能针对文件执行”这句话。在这个页面上——github.com/Azure/azure-data-lake-store-python
  • Azure 数据湖存储和 Azure 数据湖 Gen 2 是不同的服务。它们没有相同的功能。 Azure 数据湖 Gen 2 建立在 Azure blob 存储之上。它具有与 Azure blob 存储类似的功能。如果你想管理它的生命周期,请参考docs.microsoft.com/en-us/azure/storage/blobs/…
  • 我阅读了您发送的链接,但我仍然不清楚是否或如何为我的文件(blob?)设置过期时间。
  • 我们没有办法做到这一点。我们可以使用策略来管理它的生命周期。

标签: python-3.x azure-data-lake azure-data-lake-gen2 content-expiration


【解决方案1】:

您的错误的原因是您似乎试图在 DataLakeFileClient 类型的对象上调用属于 azure.datalake.store.core.AzureDLFileSystem 的方法。这就是您收到错误的原因! 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)

只要确保您尝试调用正确类型的对象的方法即可。

对于第 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 }
          }
        }
      }
    }
  ]
}

【讨论】:

    猜你喜欢
    • 2019-10-07
    • 2020-12-08
    • 2017-12-09
    • 1970-01-01
    • 2020-01-01
    • 2011-06-17
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    相关资源
    最近更新 更多