[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が表示され、エラーが解消されたことが確認できます。