有没有办法在不使用提取物的情况下编写U-SQL查询



我有一个元数据活动输出,这是我的容器中的斑点。我想将这些名称输入我的foreach活动,其中按文件名在斑点上执行一些U-SQL查询。有可能吗?

您需要包括SELECTEXTRACT。由于您要从文件中拉出,因此您将要使用EXTRACT

如果我正确理解您的问题,您想根据文件名运行不同的u-SQL脚本。

有几种方法可以做到这一点:

1(如果在数据工厂中使用条件,请根据文件名调用不同的U-SQL脚本。嵌套if语句将使您拥有两个以上的选项。有几个字符串操作功能可以帮助您解决此问题。说一条路是@item.Contains('a')

{
    "name": "<Name of the activity>",
    "type": "IfCondition",
    "typeProperties": {
            "expression":  {
                 "value":  "@item() == <file name>", 
                 "type": "Expression"
             }
            "ifTrueActivities": [
            {
                "<U-SQL script = 1>"
            }
        ],
        "ifFalseActivities": [
            {
                "<U-SQL script 2>"
            }
            ]
    }
}

2(第二个选项是使用单个U-SQL脚本,然后从那里进行拆分。同样,字符串操纵功能可以通过模式匹配来帮助。就组织而言,这有一些优势,您可以将唯一的脚本存储在存储过程中,并且U-SQL脚本只需检查传递的文件名并调用相关存储的Proc。

//This would be added by data factory
DECLARE @fileName = "/Samples/Data/SearchLog.tsv";
IF @fileName == "/Samples/Data/SearchLog.tsv"
THEN
    @searchlog =
        EXTRACT UserId int,
                Start DateTime,
                Region string,
                Query string,
                Duration int?,
                Urls string,
                ClickedUrls string
        FROM "/Samples/Data/SearchLog.tsv"
        USING Extractors.Tsv();
    OUTPUT @searchlog
    TO @fileName
    USING Outputters.Csv();
ELSE
    @searchlog =
        EXTRACT UserId int,
                Start DateTime,
                Region string,
                Query string,
                Duration int?,
                Urls string,
                ClickedUrls string
        FROM @fileName
        USING Extractors.Tsv();
    OUTPUT @searchlog
    TO "/output/SearchLogResult1.csv"
    USING Outputters.Csv();
END;

要考虑的事情是,如果您可以将多个文件组合到一个语句中,那么数据湖分析将更加有效。您可以具有多个EXTRACTOUTPUT语句。我鼓励您探索您是否可以在EXTRACT语句中使用模式匹配来拆分U-SQL处理,而无需数据工厂中的foreach循环。

相关内容

  • 没有找到相关文章

最新更新