5

我有這樣的管道副本活動數據工廠:Azure的數據工廠副本活動SQL:掛在70000行

{ 
    "type": "Copy", 
    "name": "Copy from storage to SQL", 
    "inputs": [ 
    { 
     "name": "storageDatasetName" 
    } 
    ], 
    "outputs": [ 
    { 
     "name": "sqlOutputDatasetName" 
    } 
    ], 
    "typeProperties": { 
    "source": { 
     "type": "BlobSource" 
    }, 
    "sink": { 
     "type": "SqlSink" 
    } 
    }, 
    "policy": { 
    "concurrency": 1, 
    "retry": 3 
    }, 
    "scheduler": { 
    "frequency": "Month", 
    "interval": 1 
    } 
} 

輸入數據大約是在大小爲90MB,約1.5萬行,分解成約。 Azure存儲中的20 x 4.5MB塊blob文件。這裏的數據(CSV)的示例:

A81001,1,1,1,2,600,3.0,0.47236654,141.70996,0.70854986 A81001,4,11,0,25,588,243.0,5.904582,138.87576,57.392536 A81001,7,4,1,32,1342,278.0,7.5578647,316.95795,65.65895

接收器是一個類型爲S2的Azure SQL Server,它的額定值爲50個DTU。我已經創建了敏感數據類型的一個簡單的表格,沒有鍵,索引或任何幻想,只是列:

CREATE TABLE [dbo].[Prescriptions](
    [Practice] [char](6) NOT NULL, 
    [BnfChapter] [tinyint] NOT NULL, 
    [BnfSection] [tinyint] NOT NULL, 
    [BnfParagraph] [tinyint] NOT NULL, 
    [TotalItems] [int] NOT NULL, 
    [TotalQty] [int] NOT NULL, 
    [TotalActCost] [float] NOT NULL, 
    [TotalItemsPerThousand] [float] NOT NULL, 
    [TotalQtyPerThousand] [float] NOT NULL, 
    [TotalActCostPerThousand] [float] NOT NULL 
) 

源,水槽和數據工廠都在同一地區(北歐)。

根據微軟的'Copy activity performance and tuning guide',對於Azure存儲源和Azure SQL S2接收器,我應該獲得大約0.4 MBps。通過我的計算,這意味着90MB應該在大約一半小時內傳輸(是嗎?)。

enter image description here

出於某種原因,副本70000行速度非常快,然後似乎掛起。使用SQL管理工作室,我可以看到數據庫表中的行數恰好爲70,000,並且在7小時中完全沒有增加。然而,副本任務仍然沒有任何錯誤運行:

enter image description here

任何想法,爲什麼這是掛7萬行?我看不到任何有關第70,001行數據的異常情況,這會導致問題。我試圖強行摧毀數據工廠並重新開始,而且我總是得到相同的行爲。我有一個小表(8000行),在1分鐘內完成另一個複製活動。

回答

9

只是回答我自己的問題的情況下,它可以幫助別人:

的問題是空值。我跑了70,000行的原因是,在我的blob源文件的第76560行,其中一列中有一個空值。我用來生成這個blob文件的HIVE腳本將空值寫爲'\ N'。另外,我的接收器SQL表指定'NOT NULL'作爲列的一部分,並且該列是FLOAT值。

所以我做了兩個變化:增加了以下屬性我BLOB數據集定義:

"nullValue": "\\N" 

,使我的SQL表列可爲空。它現在完全運行,不掛! :)

問題是數據工廠沒有錯誤,它只是卡住了 - 如果作業失敗並顯示有用的錯誤消息,並告訴我哪一行數據是問題,那將會很不錯。我認爲因爲默認情況下寫入批量大小爲10,000,這就是爲什麼它停留在70,000而不是76560.

+0

這是偉大的,但你究竟是如何解決這個問題的? – m1nkeh

+2

我不得不從70,000行手動掃描我的數據文件尋找任何問題!幸運的是,空值/空值顯示出來了:p我後來研究出可以更改批量大小,例如到100,這意味着它將掛起一行號碼,該號碼距離問題最多100行 –