作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 U-SQL 脚本,需要在其中处理一些数据。数据存储在 blob 中,此文件夹结构中每天约有 100 个文件:/{year}/{month}/{day}/{hour}/filenames.tsv
获取一天的数据很容易,只需在末尾添加通配符,它就会挑选出当天所有时间的所有文件。
但是,在我的脚本中,我想读出当天和前一天的最后 2 小时。最简单的方法是使用 3 个 extract 语句,如下所示:
DECLARE @input1 = @"/data/2017/10/08/22/{*}.tsv";
DECLARE @input2 = @"/data/2017/10/08/23/{*}.tsv";
DECLARE @input3 = @"/data/2017/10/09/{*}.tsv";
@x1 = EXTRACT .... FROM @input1 USING Extractors.Tsv();
@x2 = EXTRACT .... FROM @input2 USING Extractors.Tsv();
@x3 = EXTRACT .... FROM @input3 USING Extractors.Tsv();
但就我而言,使用 AvroExtractor 时每个提取行都非常长且复杂(约 50 列),因此我真的更愿意只指定列和提取器一次而不是 3 次。此外,通过 3 个输入,调用方无法决定应读取前几天的几个小时。
我的问题是如何以一种方便的方式定义它,最好只使用一个提取语句?
最佳答案
您可以将逻辑包装到 U-SQL 存储过程中,以便将其封装。然后你只需要对这个过程进行几次调用。一个简单的例子:
CREATE PROCEDURE IF NOT EXISTS main.getContent(@inputPath string, @outputPath string)
AS
BEGIN;
@output =
EXTRACT
...
FROM @inputPath
USING Extractors.Tsv();
OUTPUT @output
TO @outputPath
USING Outputters.Tsv();
END;
然后调用它(未经测试):
main.getContent (
@"/data/2017/10/08/22/{*}.tsv",
@"/output/output1.tsv"
)
main.getContent (
@"/data/2017/10/08/23/{*}.tsv",
@"/output/output2.tsv"
)
main.getContent (
@"/data/2017/10/09/{*}.tsv",
@"/output/output3.tsv"
)
这可能是一种解决方法?
关于azure - 如何在 USQL 中定义多个输入文件模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46852631/
我是一名优秀的程序员,十分优秀!