2016-03-22 4 views
0

BCPを使用してSQL Serverから抽出したデータがASCII CSVファイルです。
日付は2016-03-03T23:00:00形式です。BCP CSVファイルからのU-SQLエラーの抽出

エキスを実行している場合は、私が得る

追加情報:

{ "diagnosticCode":195887127、 "重要度": "エラー"、 "コンポーネント": "RUNTIME"、 "ソース": "、" errorId ":" E_RUNTIME_USER_EXTRACT_COLUMN_CONVERSION_INVALID_ERROR "、" message ":"カラムデータを変換しようとしたときに 文字が無効です "、" description ":" HEX: "223022 \"入力レコードを変換する際に、 nPosition: 行1、列21 "、"解像度 ":"入力にエラーがないかチェックするか、 \ "静かな\" swi tchは、 入力のオーバー(アンダー)サイズの行を無視します。\ "無効な行"を無視するとジョブ の結果に影響を与える可能性があり、そのタイプをNULLにすると変換エラーが無視され、 は無視されます。 "、" helpLink " : ""、 "details": "================================= ========================================== = \ nHEX:5432333B35313B34362D323031362E30332E30335432333B30303B30302D302D352D323031362E30332E30335432333B35313B34392F3536372D302D323031362E30332E3033 \ N ^ \ NTEXT:T23:51:00:46,2016-03-03T23 00,0,5,2016-03-03T23:51:49.567,0,2016-03-03 \ n

抽出時に日付を正しく処理するにはどうすればよいですか?なぜ私はそれが日時列の真ん中で分裂しているのかはわかりません。

サンプル列が

50CA2FBB-95C3-4216-A729-999BE2DB491A、2016-03-03T23ようになります。51:49.567,1001464881,1001464795,1001464795,00000000-0000-0000-0000-000000000000,00000000 50206-03-03T23:00:00,2016-03-03T23:51:0000-0000-0000-000000000000,100,100,12643、bCAwvRnNVwrKDXKxZkVed2Z1zHY =、o2lsnhueDApmvSbm31mh3aetYnc =、2016-03-03T23:50:46,2016-03-03T23:00: 46,2016-03-03T23:00:00,0,5,2016-03-03T23:51:49.567,0,2016-03-03T00:00:00,2016-03-03T23:59:59,00000000- 0000-0000-0000-000000000000

Extract Statement is 
@res = 
EXTRACT 
     LicenseId Guid, 
     EntryDate DateTime, 
     UltimateId long, 
     SiteId string, 
     VirtualId string, 
     ProjectId Guid, 
     DocumentId Guid, 
     MasterId string, 
     ProductId string, 
     FeatureString string, 
     VersionId long, 
     ComputerSid string, 
     UserSid string, 
     AppStartTime DateTime, 
     StartHour DateTime, 
     AppStopTime DateTime, 
     StopHour DateTime, 
     GmtDelta int, 
     RecordedGmtDelta int, 
     LastUpdated DateTime, 
     Processed bool, 
     StartDate DateTime, 
     EndDate DateTime, 
     ImsId Guid 
FROM @dataFile 
USING Extractors.Csv(); 
+0

興味深いことに、BCPファイルに日付のうち2つを除くすべてをドロップし、それに応じて抽出ステートメントを変更すると...機能します。 –

答えて

0

組み込みエクストラクタのデフォルトのエンコーディングはEncoding.UTF-8です。だから、おそらく、あなたが見ている3バイトのシーケンスはUTF-8であり、ASCIIではないと解釈されています。

あなたのBCP出力は本当に唯一のASCIIの範囲(0〜127)でコードポイントが含まれています(8ビット文字をANSIない)場合は、(予約済みのキーワードルールからそれらを逃れるためにASCII周り[]に注意してください)Extractors.Csv(encoding:Encoding.[ASCII])を指定することができます。

ただし、データにANSIの範囲文字が含まれている場合は、BCPがUTF-16(BCPがUTF-8をサポートしているとは思わない)またはBCPの結果をUTF-8に変換する必要があります。

ファイルが250MBより大きい場合、ファイルがUTF-16エンコーディングである場合は、ファイルをアップロードする際にレコード境界検出に関するバグが発生しています。このバグが修正されるまで、その場合はUTF-8エンコーディングでファイルをアップロードすることをお勧めします。

また、完全なANSIコードページが必要な場合は、https://feedback.azure.com/forums/327234-data-lake/suggestions/13077555-add-ansi-code-page-support-for-built-in-extractorsというユーザー音声項目のサポートに投票し、サポートが必要なコードページ(Windows-1254またはISO-Latin-1など) 。

関連する問題