首页 文章

从BCP CSV文件中提取U-SQL错误

提问于
浏览
0

我有使用BCP从SQL Server中提取的数据,该文件是ASCII CSV .
日期为2016-03-03T23:00:00格式 .

当我运行提取物时

附加信息:

{“diagnosticCode”:195887127,“severity”:“错误”,“组件”:“RUNTIME”,“source”:“User”,“errorId”:“E_RUNTIME_USER_EXTRACT_COLUMN_CONVERSION_INVALID_ERROR”,“message”:“尝试时无效字符转换列数据 . “,”description“:”HEX:\“223022 \”转换输入记录时字符无效 . \ n位置:第1行,第21列 . “,”分辨率“:”检查输入是否有错误或使用\“ silent \“切换到忽略输入中的over(under)-sized行 . \ n忽略”无效“行可能会影响作业结果,并且必须可以为类型转换错误而忽略类型 . ”,“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-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();

1 回答

  • 0

    内置提取器的默认编码是Encoding.UTF-8 . 所以很有可能,你看到的三字节序列被解释为UTF-8而不是ASCII .

    如果您的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) .

相关问题