У меня есть файл tsv в лазурном канале данных, который имеет поля ниже.
paperId, language_code
Мне нужно создать файл с полями ниже
language_id, language_code
где language_id - уникальный идентификатор, сгенерированный для каждого кода языка.
Для этого я написал UDO.Я следовал за статьей https://docs.microsoft.com/en-us/azure/data-lake-analytics/data-lake-analytics-u-sql-develop-user-defined-operators.
using Microsoft.Analytics.Interfaces;
using System.Collections.Generic;
namespace USQL_UDO
{
public class LanguageCode : IProcessor
{
private static IDictionary<string, string> languageCodeID = new Dictionary<string, string>
public override IRow Process(IRow input, IUpdatableRow output)
{
string UserID = input.Get<long>("PaperId");
string LanguageCode = input.Get<string>("LanguageCode");
string Language_id = "";
if (languageCodeID.Keys.Contains(LanguageCode))
{
Language_id = languageCodeID[LanguageCode];
}else
{
Language_id = GetTimestamp(DateTime.Now);
languageCodeID[LanguageCode] = Language_id;
}
output.Set<string>(0, Language_id);
output.Set<string>(1, LanguageCode);
return output.AsReadOnly();
}
public static String GetTimestamp(this DateTime value)
{
return value.ToString("yyyyMMddHHmmssfff");
}
}
}
Но я не могу найти способ отсылать это в своем сценарии usql.Я не могу использовать Visual Studio, так как я работаю в среде Linux.Есть ли способ ссылаться на пользовательский класс в запросе usql.
Я очень плохо знаком с usql и лазурью.Я мог бы делать это совершенно бессмысленным способом.
Мой сценарий usql такой.
@inputA =
EXTRACT
PaperId long,
LanguageCode string
FROM "/graph/2018-04-13/PaperLanguages.txt"
USING Extractors.Tsv(quoting : false);
@parsed_language =
PROCESS @inputA
PRODUCE Language_id string,
LanguageCode string
USING new USQL_UDO.LanguageCode();
OUTPUT @parsed_language
TO "/output/parsedData/mag2__language.csv"
USING Outputters.Text(outputHeader : true, quoting : false, delimiter: '~');