我试图从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
这将返回错误。
非常感谢!
答案 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 ...;
您还可以将其包装到表值函数中以对其进行抽象。因此,您只需更新函数定义,使用脚本将自动获取最新版本。