2016-12-01 1 views
0

Не удается передать параметр «in» в U-SQL, чтобы использовать все файлы в папке.Как запустить U-SQL для всех файлов в папке с использованием параметров из ADF?

в моем ADF трубопроводе, у меня есть следующие параметры настройки:

"parameters": { 
    "in": "$$Text.Format('stag/input/{0:yyyy}/{0:MM}/{0:dd}/*.csv', SliceStart)", 
    "out": "$$Text.Format('stag/output/{0:yyyy}/{0:MM}/{0:dd}/summary.csv" 
} 

а также U-SQL скрипт пробует извлечь из:

@couponlog = 
    EXTRACT 
    Id int, 
    [Other columns here] 
FROM @in 
USING Extractors.Csv(skipFirstNRows:1); 

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

ответ

1

Уверен, что существует множество способов решения проблемы, но я обнаружил, что вместо передачи параметра из конвейера ADF проще использовать виртуальные столбцы. в моем случае v_date

@couponlog = 
    EXTRACT 
    Id int, 
    [Other columns here], 
    v_date DateTime 
FROM "stag/input/{v_date:yyyy}/{v_date:MM}/{v_date:dd}/{*}.csv" 
USING Extractors.Csv(skipFirstNRows:1); 

С этим U-SQL сумы найдены все файлы

+0

Это правильный способ параметризации вашего набора файлов. И вы можете добавить следующее предложение WHERE, чтобы добавить дополнительные параметры и ограничения в столбец 'v_date', который можно использовать для ограничения извлечения. –

+1

Использование * в именах виртуальных столбцов теперь устарело. Теперь просто используйте ваши фигурные скобки, но с именем для столбца. Например {FileName}. Без *. –

0

Я использую даты, введенные ADF без проблем. Я прохожу в только дата части, а затем отформатировать его в USQL:

"parameters": { 
    "in": "$$Text.Format('{0:yyyy}/{0:MM}/{0:dd}/', SliceStart)" 
} 

Тогда в USQL:

DECLARE @inputPath = "path/to/file/" + @in + "{*}.csv"; 
DECLARE @outputPath = "path/to/file/" + @in + "output.csv"; 

Эти переменные затем привыкают в сценарии по мере необходимости.

0

Я использую этот параметр ввода в АПДЕ, чтобы прочитать все файлы из папки с виртуальной колонкой (файл), чтобы получить имя файла

"parameters": { 
    "in": "$$Text.Format('storage/folder/{0:yyyy}-{0:MM}/{1}.csv', SliceStart, '{file:*}')", 
    "out": "$$Text.Format('otherFolder/{0:yyyy}-{0:MM}/result.txt', SliceStart)" 
} 

соответстующий U-SQL

@sales = 
    EXTRACT column1 string, 
      column2 decimal, 
      file string 
    FROM @in 
    USING Extractors.Csv(silent : true); 
Смежные вопросы