2017-02-08 9 views
1

を解析することはできません:だから21.63ZADF我々は形式にタイムスタンプが含まれているJSONの持っているのDateTimeOffset

2016-11-03T03:05:21.673Z

2016-11-03T03:05データを解析するための適切なフォーマットはYYYY-MM-DDTHHです:MM:ss.FFF \ Z

は、私はそれを解析する方法をADFに説明するために、これらの変異体の全てを試してみました:

"structure": [ 
    { 
    "name": "data_event_time", 
    "type": "DateTime", 
    "format": "yyyy-MM-ddTHH:mm:ss.FFF\\Z" 
    }, 
    ... 
] 

"structure": [ 
    { 
    "name": "data_event_time", 
    "type": "DateTimeOffset", 
    "format": "yyyy-MM-ddTHH:mm:ss.FFFZ" 
    }, 
    ... 
] 

"structure": [ 
    { 
    "name": "data_event_time", 
    "type": "DateTimeOffset" 
    }, 
    ... 
] 

"structure": [ 
    { 
    "name": "data_event_time", 
    "type": "DateTime" 
    }, 
    ... 
] 
01 ADF上記のこれらのすべての場合において

はエラーで失敗します。私は間違って何をやっている

Copy activity encountered a user error at Sink side: ErrorCode=UserErrorInvalidDataValue,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Column 'data_event_time' contains an invalid value '2016-11-13T00:44:50.573Z'. Cannot convert '2016-11-13T00:44:50.573Z' to type 'DateTimeOffset' with format 'yyyy-MM-dd HH:mm:ss.fffffff zzz'.,Source=Microsoft.DataTransfer.Common,''Type=System.FormatException,Message=String was not recognized as a valid DateTime.,Source=mscorlib,'.

?それを修正するには?

答えて

0

我々は最近、ここでは同様の問題を見て:

What's reformatting my input data before I get to it?

JSONのような日時形式を持っているので、typeformat要素を除外しません。それから、あなたの挑戦は同期です。たとえば、これらの値をAzure SQLデータベースに挿入すると動作します。

"structure": [ 
    { 
    "name": "data_event_time" 
    }, 
    ... 

私はDATETIME SQLデータウェアハウス内の列(またはVM上のSQLデータベースやSQL Serverなど)に挿入する動作するように期待されるエラー・メッセージを見ると、それはDATETIMEデータ、ないDATETIMEOFFSET普通です。 BLOBストレージまたはAzureのデータへ

あなたがターゲットシンクに挿入する問題がある場合は、プロセスのその側面を自分でポリ塩基チェックボックスとコードを使用しないことで回避する必要があり、例えば

  1. コピーRAWファイルは、湖(現在Polybase supports ADLS
  2. また、T-SQLを使用して、適切なDATETIMEに文字列の日時フォーマットを変換する、内部テーブルに日時データをvarcharデータ型
  3. CTASとして設定されているファイルを介して外部のテーブルデータを作成します
+0

Big thanxできます。しかし、目的地レベルでは失敗する。 – churupaha

+0

ターゲット/シンクとは何ですか? – wBob

+0

ターゲットはAzure DWHです。私は、ADFのオプションを使用してPolyBase経由でデータをロードしようとしています。 ので、データフローは以下のようになります。 SourceBlobStorage(JSONs) - > ADF - > StageBlobStorage(CSV) - >ポリ塩基 - > AzureDWH StageBlobStorageは、ADFによって移入されます。 PolyBaseに関連するオブジェクトは、ADFによって自動的に作成されます。 また、終了データのロードはADFによって開始されます。 内部に隠された作業がたくさんあります。 Aは上記のADFマークアップで詳細な説明を投稿しました(私の投稿への回答として) – churupaha

1

前の問題は修正されています。 Thanx wBob。

しかし、私はシンクレベルで新しい問題が発生しました。

私はADF +ポリ塩基を経由してAzureのDWHにAzureブロブストレージからデータをロードしようとしている:

 "sink": { 
     "type": "SqlDWSink", 
     "sqlWriterCleanupScript": "$$Text.Format('DELETE FROM [stage].[events] WHERE data_event_time >= \\'{0:yyyy-MM-dd HH:mm}\\' AND data_event_time < \\'{1:yyyy-MM-dd HH:mm}\\'', WindowStart, WindowEnd)", 
     "writeBatchSize": 6000000, 
     "writeBatchTimeout": "00:15:00", 
     "allowPolyBase": true, 
     "polyBaseSettings": { 
      "rejectType": "percentage", 
      "rejectValue": 10.0, 
      "rejectSampleValue": 100, 
      "useTypeDefault": true 
     } 
     }, 
     "enableStaging": true, 
     "stagingSettings": { 
     "linkedServiceName": "AppInsight-Stage-BlobStorage-LinkedService" 
     }, 
     "translator": { 
     "type": "TabularTranslator", 
     "columnMappings": "..." 
     } 

しかし、プロセスはエラーで失敗します。

Database operation failed. Error message from database execution : ErrorCode=FailedDbOperation,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Error happened when loading data into SQL Data Warehouse.,Source=Microsoft.DataTransfer.ClientLibrary,''Type=System.Data.SqlClient.SqlException,Message=107091;Query aborted-- the maximum reject threshold (10 %) was reached while reading from an external source: 6602 rows rejected out of total 6602 rows processed. Rows were rejected while reading from external source(s). 52168 rows rejected from external table [ADFCopyGeneratedExternalTable_0530887f-f870-4624-af46-249a39472bf3] in plan step 2 of query execution: Location: '/13/2cd1d10f-4f62-4983-a38d-685fc25c40a2_20161102_135850.blob' Column ordinal: 0, Expected data type: DATETIMEOFFSET(7) NOT NULL, Offending value: 2016-11-02T13:56:19.317Z (Column Conversion Error), Error: Conversion failed when converting the NVARCHAR value '2016-11-02T13:56:19.317Z' to data type DATETIMEOFFSET. Location: '/13/2cd1d10f-4f62-4983-a38d-685fc25c40a2_20161102_135850.blob' Column ordinal: 0, Expected ...

私はAzure SQL Data Warehouse loading patterns and strategies

を読みます

If the DATE_FORMAT argument isn’t designated, the following default formats are used:

DateTime: ‘yyyy-MM-dd HH:mm:ss’

SmallDateTime: ‘yyyy-MM-dd HH:mm’

Date: ‘yyyy-MM-dd’

DateTime2: ‘yyyy-MM-dd HH:mm:ss’

DateTimeOffset: ‘yyyy-MM-dd HH:mm:ss’

Time: ‘HH:mm:ss’

私は、ADFレベルでPolyBaseの日時フォーマットを指定する能力がないようです。

誰かが回避策を知っていますか?

+0

回答は回避策で更新されました。 – wBob

+0

私はU-SQLとAzure SQL DWでデータファクトリを使用し始めましたが、この正確な問題がありました。あなたが注意したように、DWは非常に多くの日付/時刻形式を好きではありません。カスタムのDateTime形式を使用するようにU-SQLスクリプトを変更しました。 USING Outputters.Tsv(outputHeader:false、dateTimeFormat: "yyyy-MM-dd HH:mm:ss"); 残念ながら、これはあなたがDateTimeOffsetを役に立たなくするTZ情報を失うことを意味します。 – JZimmerman

+0

うん、ちょっと閉ざされた円。 – churupaha

関連する問題