如何在 Azure 数据工厂的 .NET SDK 中自动创建数据集?

How do you automate the creation of a dataset within the .NET SDK for Azure Data Factory?

我正在使用 Microsoft Azure Data Factory .NET SDK 来自动创建大量 table 的数据集。

我的 .NET 控制台应用程序中的一种方法使我能够根据指定的 table 名称创建输入和输出数据集:

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 数据仓库上的存储过程完成的。存储过程指定 table 名称,然后查看 INFORMATION_SCHEMA 以便为每个 ADF 数据集生成有效的列和类型。然后我们手动将结果复制到 portal.azure.com.

我们有 600 多个数据集,因此需要利用 .NET SDK 自动复制到 ADF。

如何在考虑到每个数据集的结构(即列和类型)不同的情况下自动创建数据集?

我能够完成此任务的唯一方法是编写存储过程以在源 目标上生成列名和类型。这样的存储过程应该调用 INFORMATION_SCHEMAINFORMATION_SCHEMA.COLUMNS 以便为输入的 table 生成每个列和类型。

一旦该过程充分输出两列(名称、类型),以编程方式调用该过程并保存如下:

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();
    }
}

然后,在创建 input/output 数据集后,只需按如下方式使用变量 InputParams

new DatasetCreateOrUpdateParameters()
{
    Dataset = new Dataset()
    {
        Properties = new DatasetProperties()
        {
            Structure = InputParams 
//Etc.