0

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

抽出を実行すると、取得します

追加情報:

{"diagnosticCode":195887127,"severity":"Error","component":"RUNTIME","source":"User","errorId":"E_RUNTIME_USER_EXTRACT_COLUMN_CONVERSION_INVALID_ERROR","message":"変換しようとすると無効な文字ですcolumn data.","description":"HEX: \"223022\" 入力レコードの変換時に無効な文字です。\n位置: 1 行目、21 列目。","解決":"入力にエラーがないか確認するか、\"silent を使用してください\" 入力内のオーバー (アンダー) サイズの行を無視するように切り替えます。\n\"無効な\" 行を無視するとジョブの結果に影響を与える可能性があり、変換エラーを無視するには型が null 可能である必要があることを考慮してください。","helpLink": ""、"詳細":"================================================== ==========================================\nHEX:5432333B35313B34362D323031362E30332E30335432333B30303B30302D302D352D323031362E30332E30335432333B35313B34392F3536372D302D323031362E30332E3033\n ^\ nTEXT:T23:51:46,2016-03-03T23:00: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-0000-0000-0000-000000000000,100 ,100 , ,12643,bCAwvRnNVwrKDXKxZkVed2Z1zHY=,o2lsnhueDApmvSbm31mh3aetYnc=,2016-03-03T23:50:46,2016-03-03T23:00:00,2016-03-03T23:51:46,2016-03-03T20,: ,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();
4

1 に答える 1

0

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

BCP 出力に実際に ASCII 範囲 (0 ~ 127) のコード ポイントしか含まれていない (ANSI 8 ビット文字ではない) 場合は、指定できます(予約済みのキーワード ルールからそれらをエスケープするために前後にExtractors.Csv(encoding:Encoding.[ASCII])注意してください)。[]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)。

于 2016-03-23T01:38:13.640 に答える