2

我有一个在 U-SQL 中使用的 Web 日志文件,其查询类似于:

@x =
    EXTRACT Col1 string, UserAgent string, Col2 string
    FROM "/file"
    USING Extractors.Text(delimiter : ' ');

但有时,UserAgent 包含以下内容:-

Android Tablet 10" blah blah

这总是意味着脚本认为该行有四列而不是三列..

任何人都有任何好主意我该如何处理这个问题..我不确定是否有可能逃脱该字符或在提取时以某种方式忽略它?

4

3 回答 3

3

要么您必须使用文本中没有出现的分隔符,要么确保分隔符被转义,或者您使用引号。

如果这些都不起作用,您可以将整行放入一行然后处理该行,或者编写一个自定义提取器,将多余的数据移动到溢出列中。

于 2016-02-16T06:29:14.817 回答
0

根据https://msdn.microsoft.com/en-us/library/azure/mt764098.aspx,我会尝试

@x =
    EXTRACT Col1 string, UserAgent string, Col2 string
    FROM "/file"
    USING Extractors.Text(delimiter : ' ', quoting:false);
于 2016-09-13T15:17:29.253 回答
0

使用数据工厂准备数据副本并插入转义字符(简单的 Jason 设置)。这将很容易地将转义字符解析到您的数据中。然后,您可以使用 escapeCharacter 参数。选择什么并不重要,因为转义字符会自行转义,但最好选择一些晦涩难懂的东西。

您必须以某种方式预先解析您的数据以插入转义字符或使用“转义引号。我个人更喜欢转义字符,并且使用数据工厂非常容易做到这一点。

于 2016-12-27T22:04:05.920 回答