Freigeben über


[ADF] Azure SQL DataWarehouseにデータをコピーする際に発生するエラーについて

松本 奈紗

Support Engineer

 

皆さん、こんにちは。 BI Data Platform サポートチームの松本奈紗です。
今回の投稿では、Azure Data Factoryを利用してAzure SQL DataWarehouse にデータをコピーする際に発生するエラーのうち、メッセージから判断がつきにくいものがありますので、エラーの原因を見つけるために確認すべき点をご紹介いたします。
また、今回はイメージがつきやすいように、以下のようなサンプルを用いて、エラーの対処策をご紹介いたします。

 

[ サンプルの前提]

Azure Data Factoryを利用して、CSVファイルをSQL Server Management Studio(SSMS) に接続されたAzure DataWarehouse へコピーします。

 

Test.csv

Number, Word, Letter
1, test1, A
2, test2, B

Azure SQL Data Warehouse

SSMSでのテーブル定義

CREATE TABLE dbo.TestTable(
Number int NULL
,Word char(1) NULL
,Letter char(1) NULL
);

 

[ テスト]
上記のような前提でAzure Data Factory (V2)からデータをSQL Data Warehouseにロードしてみると、同じエラーが確認できるかと思います。

 

■エラーの確認方法
Azure Data Factory (V2)を利用して発生したエラーを確認する場合、パイプラインのモニター画面を確認ください。

 

  • ADFのモニター画面からエラーの詳細画面を開きます。

 

  • 以下のエラーの出力を確認できます。

Error Message

Activity Copy_5ua failed: ErrorCode=FailedDbOperation、'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=次のエラーにより、データベースの操作が失敗しました: 'PdwManagedToNativeInteropException ErrorNumber: 46724, MajorCode: 467, MinorCode: 24, Severity: 20, State: 2, Exception of type 'Microsoft.SqlServer.DataWarehouse.Tds.PdwManagedToNativeInteropException' was thrown.',Source=,''Type=System.Data.SqlClient.SqlException,Message=PdwManagedToNativeInteropException ErrorNumber: 46724, MajorCode: 467, MinorCode: 24, Severity: 20, State: 2, Exception of type 'Microsoft.SqlServer.DataWarehouse.Tds.PdwManagedToNativeInteropException' was thrown.,Source=.Net SqlClient Data Provider,SqlErrorNumber=100000,Class=16,ErrorCode=-2146232060,State=1,Errors=[{Class=16,Number=100000,State=1,Message=PdwManagedToNativeInteropException ErrorNumber: 46724, MajorCode: 467, MinorCode: 24, Severity: 20, State: 2, Exception of type 'Microsoft.SqlServer.DataWarehouse.Tds.PdwManagedToNativeInteropException' was thrown.,},],'

 

■上記エラーメッセージが発生する可能性と対処策

上記のようなエラーが発生した場合、出力先であるSQL Data Warehouseのテーブルのデータ長が、Azure Data Factory(V2) から受け渡されるデータと合わない(受け側のサイズが不足している)可能性がないかを確認してみてください。

この場合、SQL Data Warehouseのテーブルのデータ長とAzure Data Factory(V2) から受け渡されるデータ長を確認し、これらのデータ長を合わせることで、エラーに対処できます。

 

今回のサンプルの場合、ADF側では、以下のようにSSMSを使用してSQL Data Warehouseのテーブルのデータ長を確認し、データ長を修正することでエラーに対処できます。

 

  • SSMSにおいて、SQL Data WarehouseのTestTableのWordカラムがchar(1)となっていることを確認できます。

char(1)は1バイトの文字を格納することを想定した型であり、Azure Data Factory(V2) から受け渡されるCSVファイルのWordカラムのデータは”test1”,”test2”のように1バイトではないため、データサイズが不足していることが確認できます。

 

  • ここで、次のクエリを実行し、SSMSに再接続すると、以下のようにTestTableのWordカラムがchar(255)となっていることが確認できます。

“ALTER TABLE dbo.TestTable ALTER COLUMN Word char(255) NULL ;”

char(255)型は255バイト分の文字コードを格納できますので、CSVファイルのWordカラムのデータは”test1”,”test2”と255バイト以内であるため、データ長は足りていることが確認できます。

 

  • Data Factoryのパイプラインをもう一度実行すると、モニター画面のStatus欄にSucceedが表示され、エラーが解消されたことが確認できます。