Оператор извлечения U-SQL — работа с сотнями столбцов

Есть ли способ в операторе извлечения U-SQL указать только те входные столбцы, которые мне нужны? Я работаю с устаревшей базой данных, которая экспортирует несколько таблиц в csv, содержащую около 200 столбцов. Меня волнуют только 10 из этих полей. Я надеялся сделать что-то вроде:

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

Таким образом, идея состоит в том, чтобы указать индекс, соответствующий столбцу, из которого поступают данные.

Есть ли что-то подобное в работе? Или мне всегда нужно определять все 200 столбцов? Я открыт и для других решений. Спасибо!


person Dan    schedule 22.12.2016    source источник


Ответы (2)


Вы можете написать свой собственный код экстрактора. Используйте образцы экстракторов по адресу https://github.com/Azure/usql/tree/master/Examples/DataFormats/Microsoft.Analytics.Samples.Formats в качестве руководства.

person Alexandre Gattiker    schedule 22.12.2016
comment
Хотя невозможно сделать то, что я описал выше, это достаточно просто с помощью пользовательского экстрактора, как вы предложили. Спасибо! - person Dan; 27.12.2016
comment
Разве решение до сих пор не представлено в U-SQL как встроенная функция вместо пользовательского экстрактора? - person Vikash Pareek; 04.10.2018

Нет простого способа сделать это, как вы описываете, но сценарий не займет много времени. Например, я часто использую Excel, чтобы помочь со сценариями, например, вставить известные метаданные для 200 столбцов csv, а затем сопоставить их с типами данных U-SQL, например

Помощник Excel U-SQL

Вы можете создать исходное представление U-SQL, в котором есть все столбцы, используя описанный выше метод, затем создайте другое представление на основе исходного представления для нужных столбцов:

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 для Найти и заменить с помощью RegEx. вещи.

person wBob    schedule 24.12.2016