首页 文章

[U-SQL]] [FlexExtractor]我无法加入 . 表达式必须都是列

提问于
浏览
1

我正在使用Cortana Analytics Suite . 目前正在使用包含数百列的文件的visual studio数据湖分析项目分析Data Lake商店的数据 . 在阅读了u-sql文档后,我发现了一个flex提取器来帮助解决这个问题(百列) . flex flexctor与一张 table 完美配合 . 问题从加入表开始,我在编译时收到此错误:

“错误E_CSC_USER_JOINCOLUMNSEXPECTEDONEACHSIDEOFCONDITION:比较每一侧的表达式map [0]和map_2 [0]都必须是列 . ”

我有两个像这样的提取器:

@data = EXTRACT map SqlMap<Int32,string>
    FROM @input
    USING new USQLFlexExtractor.FlexExtractor();

@data_2 = EXTRACT map_2 SqlMap<Int32,string>
    FROM @input_2
    USING new USQLFlexExtractor.FlexExtractor();

@output =  SELECT map[0], map[2], map_2[1]
FROM @data AS data
LEFT JOIN @data_2 AS data_2 ON map[0] == map_2[0]

我正在关注这个例子(usql脚本和c#代码背后):https://github.com/Azure/usql/tree/master/Examples/FlexibleSchemaExtractor/FlexibleSchemaExtractor

我甚至尝试过使用Combine表达式的不同方法,但我得到了同样的错误 .

有什么想法吗?

问候

1 回答

  • 3

    U-Sql不支持连接条件中的派生列 . 您可以尝试使用如下的中间结果集:

    @dataExtract = EXTRACT map SqlMap<Int32,string>
        FROM @input
        USING new USQLFlexExtractor.FlexExtractor();
    
    @dataExtract_2 = EXTRACT map_2 SqlMap<Int32,string>
        FROM @input_2
        USING new USQLFlexExtractor.FlexExtractor();
    
    @data =
        SELECT map[0] AS map0,
               map[2] AS map2
    FROM @dataExtract;
    
    @data_2 =
        SELECT map[0] AS map2_0,
               map[1] AS map2_1
    FROM @dataExtract_2;
    
    @output =  SELECT map0, map2, map21
    FROM @data AS data
    LEFT JOIN @data_2 AS data_2 ON map0 == map2_0;
    

相关问题