В U-SQL нет курсоров из-за оператора, на который вы ссылаетесь выше.
U-SQL не предоставляет никаких императивных конструкций потока кода, поскольку это препятствует возможности оптимизатора глобально оптимизировать ваш скрипт.
Вы должны думать о подходе к своей проблеме декларативно. Например, если у вас есть список идентификаторов (либо в таблице, либо в SqlArray, либо даже в файле), используйте декларативное соединение. Например, вы хотите добавить 42 к каждому значению, где ключ находится в списке существующих ключей:
// Two options for providing the "looping data"
// Option 1: Array Variable
DECLARE @keys_var = new SqlArray<string>{"k1", "k2", "k3"};
// Option 2: Rowset (eg from an EXTRACT from file, a table or other place)
@keys = SELECT * FROM (VALUES("k1"), ("k2"), ("k3")) AS T(key);
// This is the data you want to iterate over to add 42 to the value column for every matching key
@inputdata = SELECT * FROM (VALUES (1, "k1"), (2, "k1"), (3, "k2"), (6, "k5")) AS T(value, key);
//Option 1:
@res = SELECT value+42 AS newval, key FROM @inputdata WHERE @keys_var.Contains(key);
OUTPUT @res TO "/output/opt1.csv" USING Outputters.Csv();
//Option 2:
@res = SELECT value+42 AS newval, i.key
FROM @inputdata AS i INNER JOIN @keys AS k
ON i.key == k.key;
OUTPUT @res TO "/output/opt2.csv" USING Outputters.Csv();
Теперь в вашем случае вы хотите иметь наборы выходных файлов, управляемые данными. В настоящее время над этой функцией ведется работа (это одно из наших популярные запросы). До тех пор вам нужно будет написать сценарий для создания сценария (я приведу пример по вашему другому вопросу).
person
Michael Rys
schedule
08.03.2017