【问题标题】:U-SQL Text ExtractorU-SQL 文本提取器
【发布时间】:2016-02-15 18:05:31
【问题描述】:

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

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

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

Android Tablet 10" blah blah

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

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

【问题讨论】:

    标签: u-sql


    【解决方案1】:

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

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

    【讨论】:

    • 我们最终通过在默认的反射器上使用反射器编写了自己的..然后我们不得不使用正则表达式来拆分数据 - 到目前为止似乎还可以;)
    【解决方案2】:

    每个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);
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 嗨@ShaunRyan,你能在这里添加一些细节或代码示例来说明你是如何实现的吗?然后这可能会成为有用的答案并吸引一些赞成票。从你的描述中不是很清楚。谢谢!
      猜你喜欢
      • 2019-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多