[英]Add Azure Blob Partitions to Azure SQL Table
我在 Azure Blob 中對 Parquet 文件進行了分區,並將其復制到 Azure SQL。 如何將分區名稱放入 SQL 表中?
我已經想出了如何通過在復制活動的源數據部分添加一個附加列來獲得 SQL 表的完整文件路徑(圖像 1 和 2),但我試圖弄清楚如何正則表達式完整文件路徑到分區名稱 (202105)。
在 Copy Activity 中源數據的數據預覽中,它顯示了僅包含分區名稱的 time_period 列(圖 3)。 但是當它出現在 SQL 中時,它對於所有行都是 NULL(或者它是完整的文件路徑,取決於我是否在復制活動的源數據部分添加了附加列)。
我嘗試在 Azure SQL 中將 time_period 的數據類型更改為 INT。 我試過解析$$FILEPATH
,但我試過的沒有任何效果。
我基本上是從頭開始,因為我確信有更好的。 額外的背景在這里和可能在這里。
類似於這個
正如解釋這里在MS文檔,你可以利用enablePartitionDiscovery
功能。
來源:分區文件:
源數據集:
剛剛提到了容器名稱,並將目錄和文件字段留空。 我們將在復制活動中使用WildCard paths
過濾它們。
在Copy Activity
根據您的文件路徑配置源:
注意:您可以跳過第 4 步,即帶有$$FILEPATH
附加列,僅供參考。 您可以刪除這一位,因為您已經使用enablePartitionDiscovery
獲得了就緒列。
對於要選擇的單個文件夾,您將設置如下。
通配符路徑: sink / columnparts / time_period=202105 / *.parquet
對於多個文件夾time_period=202105
, time_period=202106
..... 如之前的 sinp 中所見,設置如下。
**
將取代父文件夾columnparts
的任何文件夾
通配符路徑: sink / columnparts / ** / *.parquet
分區根路徑:這應該指向所有分區文件夾所在的父文件夾。
在我的例子中: sink/columnparts
啟用分區發現時必須提供分區根路徑。
Sink:可選更新現有表或創建一個新表。
從 SQL DB 中查看: time_period
列包含值202105
time_period=202105/part-00004-fcbe0bf5-2c93-45f5-9bb2-2f9089a3e83a-c000.snappy.parquet
如果您看到此錯誤:
您有一個未更新的映射! 在映射部分,您可以clear
或reset
架構並再次Import schema
以確保安全。 😊
在我的情況下,它是附加列file_path
- 或者 -
$$FILEPATH
是保留變量,不能在表達式構建器或函數中使用它來操作。
相反,如果您可以在復制到 SQL DB 后合並一個步驟,即使用如下存儲過程。
列path
保存從$$FILEPATH
收到的完整文件路徑,正如您已經管理的那樣。 StoreParquetTest
是在 SQL sink
中創建的表
CREATE PROCEDURE trimpath
AS
UPDATE StoreParquetTest
SET path = SUBSTRING(path,(CHARINDEX('=',path) + 1), ((CHARINDEX('/',path) - CHARINDEX('=',path) -1)))
GO
現在您可以在復制活動之后使用管道中的存儲過程活動。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.