【问题标题】:R package AzureStor: how do you download files with hierarchical namespace enabled?R 包 AzureStor:如何下载启用了分层命名空间的文件?
【发布时间】:2022-08-02 19:02:08
【问题描述】:

我正在使用 AzureStor 包从 Azure blob 下载事件通知。

我设法通过使用特定的文件端点成功地执行了一个文件的下载:

DownloadURL1 <- \"https://myblob.blob.core.windows.net/callrecords/evh-callrecords/callrecords/0/2022/07/28/19/05/09.avro\"
DestinationFolder <- \"./home/Shared/AVRO_FILES/09.avro\"

Azure_Token <- AzureRMR::get_azure_token(resource = \"https://storage.azure.com/\", tenant = TenantID, app = AppID, password = Secret)
        
download_from_url(DownloadURL1, key = StorageAccessKey, DestinationFolder, overwrite = TRUE)

但是,我需要从 blob 下载所有通知文件,并且我在 Azure 中启用了具有以下结构的分层命名空间:

 {Namespace}/{EventHub}/{PartitionId}/{Year}/{Month}/{Day}/{Hour}/{Minute}/{Second}

有没有办法处理这些分层命名空间?我见过一个“目录深度”参数,但我不知道如何使用它......

提前致谢!

    标签: r azure azure-blob-storage


    【解决方案1】:

    请注意Blob storage does not actually have true directories但这似乎包括文件夹和子文件夹,这只是一种命名约定,使用包含分隔符 ('/') 的文件名来模拟目录,但它们只有一个扁平结构。

    但在azure 数据湖基本上是分层命名空间组织的 对象或文件到目录层次结构中.所以要实际下载带有目录的文件和 您可以使用 adls gen2 文件系统检查的子目录,而不是 只是斑点。 adls :Operations on an Azure Data Lake Storage Gen2 filesystem in AzureStor: (rdrr.io)

    • 如果是 blob,请使用multidownload_blob 检查 使用 AzureRMR 一次下载多个文件的功能 并行传输许多小文件。
    • src 和 dest 都可以是向量,src 可以是通配符 模式指示一个或多个文件。如果recursive is true在这里, 文件传输将复制源目录结构和 递归传输目标子目录中的文件。

    格式:

    multidownload_blob(容器,src,dest,recursive = FALSE,
    块大小 = 2^24,覆盖 = FALSE,租约 = NULL,check_md5 = FALSE, use_azcopy = FALSE,max_concurrent_transfers = 10)

    例子:来自以下参考的 sn-p

    cont <- blob_container("https://mystorage.blob.core.windows.net/mycontainer", key="access_key")
    multidownload_blob(cont, "jan*.*", "/data/january")
    

    参考:AzureStor

    use_azcopy 可用于来自 Microsoft 的 AzCopy 实用程序,而不是在本机 R 代码中执行此操作,如果您想要使用日志记录和恢复功能以及传输大量小文件,这将很有用。要启用,请设置use_azcopy argument to TRUE

    笔记:• 它仅支持 SAS 和 AAD (OAuth) 令牌作为身份验证方法。 AzCopy 还需要单个文件名或 通配符规范作为其源/目标参数,而不是 文件名或连接。

    对于服务 SAS,目录的深度从根的 0 开始,并且该帐户启用了分层命名空间,这使您可以根据需要扫描目录结构,即;根文件夹下的目录数,例如:8 或 5。如果 resource_type="d" 则需要此选项d 表示目录的深度

    样本:

    get_service_sas(account, resource, key, service,
    start = NULL, expiry = NULL, permissions = "rl",
    resource_type = “d”, ip = NULL, protocol = NULL, policy = NULL,
    snapshot_time = NULL, directory_depth = 6,
    auth_api_version = getOption("azure_storage_api_version"), ...)
    

    snapshot ,version应该是日期时间字符串,格式为"yyyy-mm-ddTHH:MM:SS.SSSSSSSZ"。如果没有提及, 基础 blob 已下载。

    # service SAS for a directory get_service_sas(endp, "containername/dirname")
    

    前任:

    endp <- storage_endpoint("https://mystorage.blob.core.windows.net", sas="mysas")
    cont <- storage_container(endp, "mycontainer")
    
    multidownload_blob(cont, src, dest, recursive = TRUE, ....,
      use_azcopy =TRUE, max_concurrent_transfers = 10)
    

    参考Operations on a blob container or blob

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-27
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      相关资源
      最近更新 更多