U-SQL 提取语句 - 使用数百列
U-SQL Extract Statement - working with hundreds of columns
U-SQL extract 语句中有什么方法可以只指定我关心的输入列吗?我正在使用一个遗留数据库,该数据库将多个表导出到具有大约 200 列的 csv。我只关心其中的 10 个字段。我希望做这样的事情:
EXTRACT CustomerID:0 string,
StoreNumber:5 double,
ReceiptNumber:20 double,
Timestamp:125 int
FROM "somefile.csv"
USING Extractors.Csv();
所以我们的想法是指定一个索引,该索引对应于数据来自哪一列。
作品中有类似的东西吗?还是我总是需要定义所有 200 列?我也对其他解决方案持开放态度。谢谢!
您可以编写自定义提取器代码。使用 https://github.com/Azure/usql/tree/master/Examples/DataFormats/Microsoft.Analytics.Samples.Formats 中的样本提取器作为指导。
没有一种简单的方法可以像您描述的那样执行此操作,但编写脚本不会花费很长时间。例如,我经常使用 Excel 来帮助编写脚本,例如粘贴 200 列 csv 的已知元数据,然后将其映射到 U-SQL 数据类型,例如
您可以使用上述方法创建一个包含所有列的初始 U-SQL view,然后根据初始视图为您想要的列创建另一个视图:
CREATE VIEW IF NOT EXISTS dbo.view1
AS
EXTRACT col1 int,
col2 string,
col3 string,
col4 string,
col5 string
FROM "/input/input44.txt"
USING Extractors.Csv();
CREATE VIEW IF NOT EXISTS dbo.view2
AS
SELECT col1,
col2
FROM dbo.view1;
@input =
SELECT *
FROM dbo.view2;
我有时也会用Visual StudioFind and Replace with RegEx做类似的事情。
U-SQL extract 语句中有什么方法可以只指定我关心的输入列吗?我正在使用一个遗留数据库,该数据库将多个表导出到具有大约 200 列的 csv。我只关心其中的 10 个字段。我希望做这样的事情:
EXTRACT CustomerID:0 string,
StoreNumber:5 double,
ReceiptNumber:20 double,
Timestamp:125 int
FROM "somefile.csv"
USING Extractors.Csv();
所以我们的想法是指定一个索引,该索引对应于数据来自哪一列。
作品中有类似的东西吗?还是我总是需要定义所有 200 列?我也对其他解决方案持开放态度。谢谢!
您可以编写自定义提取器代码。使用 https://github.com/Azure/usql/tree/master/Examples/DataFormats/Microsoft.Analytics.Samples.Formats 中的样本提取器作为指导。
没有一种简单的方法可以像您描述的那样执行此操作,但编写脚本不会花费很长时间。例如,我经常使用 Excel 来帮助编写脚本,例如粘贴 200 列 csv 的已知元数据,然后将其映射到 U-SQL 数据类型,例如
您可以使用上述方法创建一个包含所有列的初始 U-SQL view,然后根据初始视图为您想要的列创建另一个视图:
CREATE VIEW IF NOT EXISTS dbo.view1
AS
EXTRACT col1 int,
col2 string,
col3 string,
col4 string,
col5 string
FROM "/input/input44.txt"
USING Extractors.Csv();
CREATE VIEW IF NOT EXISTS dbo.view2
AS
SELECT col1,
col2
FROM dbo.view1;
@input =
SELECT *
FROM dbo.view2;
我有时也会用Visual StudioFind and Replace with RegEx做类似的事情。