簡體   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