繁体   English   中英

如何使用 arrow::open_dataset 连接到 Azure Blob 存储中的镶木地板文件?

[英]How to connect to parquet files in Azure Blob Storage with arrow::open_dataset?

我对其他方式持开放态度。 这是我的限制:

  • 我在 Azure Blob 存储中的容器中有镶木地板文件
  • 这些镶木地板文件将按产品 ID 以及日期(年/月/日)进行分区
  • 我在 R 中这样做,并希望能够以交互方式连接(不仅仅是在数据块中设置一个笔记本,尽管这是我稍后可能想弄清楚的事情)

这是我能够做的:

  • 我了解如何使用arrow::open_dataset()连接到本地镶木地板目录: ds <- arrow::open_dataset(filepath, partitioning = "product")
  • 我可以使用AzureStor package 连接到我的 blob 容器,从中查看和下载。我可以通过这种方式下载单个镶木地板文件并将其转换为数据框:
blob <- AzureStor::storage_endpoint("{URL}", key="{KEY}")
cont <- AzureStor::storage_container(blob, "{CONTAINER-NAME}")
parq <- AzureStor::storage_download(cont, src = "{FILE-PATH}", dest = NULL)
df <- arrow::read_parquet(parq)

我一直无法弄清楚的是如何使用arrow::open_dataset()来引用{FILE-PATH}的父目录,其中我有所有镶木地板文件,使用我正在连接的容器使用AzureStor创建。 arrow::open_dataset()只接受字符向量作为“sources”参数。 如果我只是给它 URL 路径,我不会传递任何类型的凭据来访问容器。

不幸的是,您今天可能无法仅从 R 执行此操作。

Arrow-R 基于 Arrow-C++,而 Arrow-C++ 还没有针对 Azure 的文件系统实现。 有 JIRA 票ARROW-9611ARROW-2034用于创建一个,但这些票目前尚未处理。

在 python 中,可以使用FSspec 适配器纯粹在 python 中创建文件系统。 由于 Azure Blob 存储有 python SDK,因此应该可以在 Z23EEEB4347BDD26BDD6DFC 中执行您今天想要的操作。

大概可以为 R 创建类似的东西,但您仍然需要创建与 fsspec 适配器等效的 R 并且这将涉及一些 C++ 代码。

如果您使用 Azure Synapse,那么您可以使用 odbc 连接到您的数据,就好像它是 SQL 服务器数据库一样,它还支持分区和其他文件类型。 据我所知,定价大约是 5 美元/月固定加上 5 美元/TB 查询。

查询数据看起来像这样......

library(odbc)
syncon <- dbConnect(odbc(),
                    Driver = "SQL Server Native Client 11.0",
                    Server = "yourname-ondemand.sql.azuresynapse.net",
                    Database = "dbname",
                    UID = "sqladminuser",
                    PWD = rstudioapi::askForPassword("Database password"),
                    Port = 1433)

somedata <- dbGetQuery(syncon, r"---{SELECT top 100 
                       result.filepath(1) as year,
                       result.filepath(2) as month,
                       *
           FROM
           OPENROWSET(
           BULK 'blobcontainer/directory/*/*/*.parquet',
           DATA_SOURCE='blobname',
           FORMAT = 'parquet'
           
           ) as [result]
           
           order by node, pricedate, hour}---")

filepath关键字指的是BULK路径中的目录名称。

这是 MS 网站https://learn.microsoft.com/en-us/azure/synapse-analytics/sql/query-specific-files

您还可以制作视图,以便喜欢 SQL 但不喜欢 parquet 文件的人可以查询视图,而无需了解底层数据结构,它看起来就像一个 SQL 服务器数据库。

暂无
暂无

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

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