Как автоматизировать создание набора данных в .NET SDK для фабрики данных Azure?

Я использую Microsoft Azure Data Factory .NET SDK для автоматизации создания наборов данных для большого количества таблиц.

Метод в моем консольном приложении .NET дает мне возможность создавать наборы данных ввода и вывода на основе указанного имени таблицы:

createInputDataSet(string table_Name, DataFactoryManagementClient client) {
    client.Datasets.CreateOrUpdate(resourceGroupName, dataFactoryName,
        new DatasetCreateOrUpdateParameters()
        {
            Dataset = new Dataset()
            {
                Properties = new DatasetProperties()
                {
                    Structure = new List<DataElement>()
                    {
                        //TODO: Autogenerate columns and types
                        new DataElement() {Name = "name", Type = "String" },
                        new DataElement() {Name = "date", Type = "Datetime" }
                    }
            }...

В настоящее время создание набора данных выполняется с помощью хранимой процедуры либо на исходном сервере SQL, либо в целевом хранилище данных SQL. Хранимая процедура указывает имя таблицы, а затем просматривает INFORMATION_SCHEMA, чтобы сгенерировать допустимые столбцы и типы для каждого набора данных ADF. Затем мы вручную копируем результат на portal.azure.com.

У нас более 600 наборов данных, поэтому необходимо использовать .NET SDK для автоматического копирования в ADF.

Как создать наборы данных автоматически, учитывая, что структура каждого набора данных (то есть столбцы и типы) будет отличаться?


person Dean K.    schedule 12.09.2016    source источник


Ответы (1)


Единственный способ, которым я смог добиться этого, - это написать хранимую процедуру для генерации имен и типов столбцов как для исходного , так и целевого объекта. Такая хранимая процедура должна вызывать INFORMATION_SCHEMA и INFORMATION_SCHEMA.COLUMNS для создания каждого столбца и типа для введенной таблицы.

После того, как процедура правильно выведет два столбца (имя, тип), программно вызовите процедуру и сохраните ее следующим образом:

List<DataElement> InputParams = new List<DataElement>();

SqlConnection connect = new SqlConnection(<connection_string>);
SqlCommand cmd = new SqlCommand("pUtil_GenDFAutomate", connect);

cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@TableName", <table_name>));
using (var reader = cmd.ExecuteReader())
{
    if (reader.HasRows)
    {
        while (reader.Read())
        {
            var name = reader.GetString(0);
            var type = reader.GetString(1);

            InputParams.Add(new DataElement
            {
                Name = name,
                Type = type
            });
        }
        reader.Close();
    }
}

Затем, после создания набора данных ввода / вывода, просто используйте переменную InputParams следующим образом:

new DatasetCreateOrUpdateParameters()
{
    Dataset = new Dataset()
    {
        Properties = new DatasetProperties()
        {
            Structure = InputParams 
//Etc.
person Dean K.    schedule 12.09.2016