是否可以对具有不同架构的文件执行查询?
我在同一目录中有两组文件。第二种类型有一个额外的字段。
类型1
id, first, last
1, liza, smith
类型2
id, first, last, state
4, alex, gordon, CT
所需结果
1, liza
4, alex
我们如何查询具有不同架构的文件,但要在哪里使用相同的输出字段?
这就是我所拥有的:
SELECT id, first
FROM "/one 1300/{files}.csv"
USING Extractors.Csv();
@interestingRows = SELECT id, first FROM @interestingRows;
OUTPUT @interestingRows
TO @uriPrefix + "/one 1300/output/output.csv"
USING Outputters.Csv();
答案 0 :(得分:2)
CSV输出器无法解决您的问题。 您将需要一个自定义提取器来解决此问题。 我建议您使用弹性提取器
检查此:
https://github.com/Azure/usql/tree/master/Examples/FlexibleSchemaExtractor
其他解决方案是分别提取具有不同架构的数据
答案 1 :(得分:1)
由于您说过这两种类型实际上在同一文件中,所以假设它们是这样的:
您只需将所有列都提取出来,并将引号设置为false:
//Extract the data
@extractedData =
EXTRACT id int,
first string,
last string,
state string
FROM "data.csv"
USING Extractors.Csv(skipFirstNRows : 1, quoting: false);
然后,您只需选择所需的字段并输出即可:
//Select the fields
@finalData = SELECT id, first FROM @extractedData;
//Output the data
OUTPUT @finalData
TO "/Desired Result.csv"
USING Outputters.Csv(quoting: false);
所需结果:
答案 2 :(得分:1)
如何使用已知的分隔符将列导入为数据中不存在的列,然后使用字符串类的Split
方法对其进行拆分呢?像这样:
@working =
EXTRACT wholeRow string
FROM "/one 1300/{*}.csv"
USING Extractors.Text(delimiter:'|');
@working =
SELECT
wholeRow.Split(',')[0] AS id,
wholeRow.Split(',')[1] AS first,
wholeRow.Split(',')[2] AS last
FROM @working;
OUTPUT @working
TO "/output/output.csv"
USING Outputters.Csv(quoting:false);