U-SQL提取语句 - 使用数百列

时间:2016-12-22 16:18:06

标签: azure u-sql

U-SQL提取语句中是否有任何方法只指定我关心的输入列?我正在使用遗留数据库,该数据库将多个表导出到具有大约200列的csv。我只关心其中的10个领域。我希望能做到这样的事情:

EXTRACT CustomerID:0   string,
    StoreNumber:5    double,
    ReceiptNumber:20   double,
    Timestamp:125   int
FROM "somefile.csv"
USING Extractors.Csv();

因此,我们的想法是指定一个与数据来自哪一列相对应的索引。

在作品中有类似的东西吗?或者我是否总是需要定义所有200列?我也对其他解决方案持开放态度。谢谢!

2 个答案:

答案 0 :(得分:2)

您可以编写自定义提取器代码。使用https://github.com/Azure/usql/tree/master/Examples/DataFormats/Microsoft.Analytics.Samples.Formats处的样本提取器作为指导。

答案 1 :(得分:1)

根据您的描述,没有一种简单的方法可以做到这一点,但脚本不会花费很长时间。例如,我经常使用Excel来帮助编写脚本,例如粘贴200列csv的已知元数据,然后将其映射到U-SQL数据类型,例如

Excel U-SQL helper

您可以使用上述方法创建包含所有列的初始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 Studio Find and Replace with RegEx来做类似的事情。