选择要从USQL中的CSV文件中提取的行

时间:2018-02-21 17:25:05

标签: azure-data-lake u-sql

我试图从CSV文件中提取几个列。 此文件每天都会替换,并且可以将列添加到文件中。 我的问题是,每次更改列数我需要更新USQL代码...任何帮助?

@billing =
    EXTRACT 
            id string, 
            company string
    FROM @companydatafile
    USING Extractors.Csv(skipFirstNRows : 1);

适用于CSV文件:

1, company1
2, company2

但是如果将文件更新为

1, company1, address1
2, company2, address1

这将返回错误。

非常感谢!

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

David是正确的 - 如果您希望为变量列运行相同的作业而不更改脚本,则应创建自定义提取器。您还可以使用ADL Tools for VS(blog here)从文件中自动创建EXTRACT语句,这意味着您可以避免每次遍历文件以获取新列。

您还可以投票或创建新功能请求here,以帮助提高开发此功能的优先级。希望这会有所帮助,如果您有其他问题,请告诉我。

答案 2 :(得分:1)

另一个提示,如果您不想使用自定义提取器但想使用内置提取器:

如果您知道随着时间的推移逐步发展CSV架构,请使用一种方法来区分路径名中的不同版本。然后您可以使用以下模式:

@s1 = EXTRACT ... FROM "/data/v1/{*}.csv" USING Extractors.Csv();
@s2 = EXTRACT ... FROM "/data/v2/{*}.csv" USING Extractors.Csv();
....
@data = SELECT * FROM @s1 OUTER UNION ALL BY NAME(*) SELECT * FROM @s2 ...;

您还可以将其包装到表值函数中以对其进行抽象。因此,您只需更新函数定义,使用脚本将自动获取最新版本。