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行 –

相关问题