Select 行要从 USQL 中的 CSV 文件中提取

Select rows to extract from a CSV file in USQL

我正在尝试从 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

那会 return 一个错误。

非常感谢!

你见过How to deal with files containing rows with different column counts in U-SQL: Introducing a Flexible Schema Extractor吗?

David 是正确的 - 如果您想 运行 在不更改脚本的情况下为变量列执行相同的作业,您应该创建一个自定义提取器。您还可以使用 ADL Tools for VS (blog here) 从文件自动创建 EXTRACT 语句,这意味着您可以避免每次都深入研究文件以获取新列。

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

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

如果您知道您的 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 ...;

你也可以把它包装成一个table-valued函数来抽象它。所以你只需要更新函数定义,使用脚本会自动获取最新版本。