如何查询不同结构的文件?
how to query differently-structured files?
是否可以针对具有不同架构的文件执行查询?
我在同一目录中有 2 组文件。第二种类型有一个额外的字段。
类型 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();
CSV 输出器无法解决您的问题。
您将需要一个自定义提取器来解决这个问题。
我推荐你使用 Flexible Extractor
检查这个:
https://github.com/Azure/usql/tree/master/Examples/FlexibleSchemaExtractor
另一种解决方案是分别提取具有不同架构的数据
既然你说这两个类型实际上在同一个文件中,假设它们是这样的:
您只需将其与所有列一起提取并将引号设置为 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你需要的字段并输出它们:
//Select the fields
@finalData = SELECT id, first FROM @extractedData;
//Output the data
OUTPUT @finalData
TO "/Desired Result.csv"
USING Outputters.Csv(quoting: false);
想要的结果:
如何使用您知道数据中不存在的定界符将列作为一个列导入,然后使用字符串 class 的 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);
是否可以针对具有不同架构的文件执行查询?
我在同一目录中有 2 组文件。第二种类型有一个额外的字段。
类型 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();
CSV 输出器无法解决您的问题。 您将需要一个自定义提取器来解决这个问题。 我推荐你使用 Flexible Extractor
检查这个:
https://github.com/Azure/usql/tree/master/Examples/FlexibleSchemaExtractor
另一种解决方案是分别提取具有不同架构的数据
既然你说这两个类型实际上在同一个文件中,假设它们是这样的:
您只需将其与所有列一起提取并将引号设置为 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你需要的字段并输出它们:
//Select the fields
@finalData = SELECT id, first FROM @extractedData;
//Output the data
OUTPUT @finalData
TO "/Desired Result.csv"
USING Outputters.Csv(quoting: false);
想要的结果:
如何使用您知道数据中不存在的定界符将列作为一个列导入,然后使用字符串 class 的 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);