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 一个错误。
非常感谢!
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函数来抽象它。所以你只需要更新函数定义,使用脚本会自动获取最新版本。
我正在尝试从 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 一个错误。
非常感谢!
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函数来抽象它。所以你只需要更新函数定义,使用脚本会自动获取最新版本。