0

我们正在尝试从 ADFv2 运行 U-SQL 脚本,但出现阻止执行的错误。考虑到有关此问题的 MS 文档没有帮助,我再次向 SO 寻求一些帮助来解决此问题。

  1. 最初的问题是如何将 U-SQL 脚本部署到 ADLA。我们找不到任何有用的东西,最后只是将脚本复制粘贴到 ADLA 和 Azure Blob 存储上,有 2 种格式:.usql 和 .txt。(这也可能是问题之一)。

  2. 我们根据MS 文档创建了 ARM ,但它失败并出现错误:ScriptPath should not be null这很奇怪,因为即使在链接服务和活动上也已经指定了该值。

以下是我们创建的 LS 和活动:

链接服务:

{
    "type": "linkedservices",
    "name": "LinkedServiceofAzureBlobStorageforscriptPath",
    "dependsOn": ["[parameters('dataFactoryName')]"],
    "apiVersion": "[variables('apiVersion')]",
    "properties": {
        "type": "AzureStorage",
        "typeProperties": {
            "connectionString": {
                "type": "SecureString",
                "value": "DefaultEndpointsProtocol=https;AccountName=<account>;AccountKey=<key>;EndpointSuffix=core.windows.net"
            }
            "scriptPath": "container\\script.txt"
            //"scriptPath": "https://storage.blob.core.windows.net/container/script.txt"//"wasb://container@storage/script.txt",
        }
    }
}

活动:

{
            "type": "DataLakeAnalyticsU-SQL",
            "typeProperties": {
                //"script": "master.dbo.sp_test()",
                "scriptPath": "container\\script.txt"//"scriptPath": "https://storage.blob.core.windows.net/container/script.txt"//"wasb://container@storage/script.txt",
                "scriptLinkedService": {
                    "referenceName": "LinkedServiceofAzureBlobStorageforscriptPath",
                    "type": "LinkedServiceReference"
                },
                "degreeOfParallelism": 3,
                "priority": 100
            },
            "name": "CopyFromAzureBlobToAzureSQL",
            "description": "Copy data frm Azure blob to Azure SQL",
            "linkedServiceName": {
                "referenceName": "AzureDataLakeAnalyticsLinkedService",
                "type": "LinkedServiceReference"
            }
        }

也尝试过这种方法,但仍然没有成功。

这是我们正在测试的虚拟脚本:

@a =
    SELECT *
    FROM(
        VALUES
        (
            "Contoso",
            1500.0
        ),
        (
            "Woodgrove",
            2700.0
        ),
        (
            "Contoso",
            1500.0
        ),
        (
            "Woodgrove",
            2700.0
        ),
        (
            "Contoso",
            1500.0
        ),
        (
            "Woodgrove",
            2700.0
        ),
        (
            "Contoso",
            1500.0
        ),
        (
            "Woodgrove",
            2700.0
        ),
        (
            "Contoso",
            1500.0
        ),
        (
            "Woodgrove",
            2700.0
        ),
        (
            "Contoso",
            1500.0
        ),
        (
            "Woodgrove",
            2700.0
        )
        ) AS 
              D( customer, amount );
OUTPUT @a
TO "/data"+DateTime.Now.ToString("yyyyMMddHHmmss")+".csv"
USING Outputters.Csv();

但是,如果您可以指出一些更复杂的示例,并且脚本中包含一些代码,那就太好了。

谢谢!

更新 26.01.2018

在与 MS 就 usql 的部署进行协商后,我们提供了 powershell 命令的组合:

  • 我们执行一个脚本,上传位于 Datalake 文件夹中 u-sql 程序集的 bin 中的 .dll;
  • 然后遍历目录并分别创建每个程序集;
  • 对于 u-sql 脚本,我们已将它们创建为 Datalake Analytics 上的存储过程,并上传一个简单的 u-sql 脚本,该脚本使用所需参数执行这些过程;
4

1 回答 1

1

您不需要链接服务中的脚本路径。

Blob 链接服务应该是:

{
    "name": "Blob Name",
    "properties": {
        "type": "AzureStorage",
        "typeProperties": {
            "connectionString": {
                "type": "SecureString",
                "value": "DefaultEndpointsProtocol=https;AccountName=etc"
            }
        },
        "connectVia": {
            "referenceName": "Your IR Ref",
            "type": "IntegrationRuntimeReference"
        }
    }
}

然后在活动中使用容器和文件名引用脚本,如下所示,并带有链接服务的引用名称。

    "activities": [
        {
            "name": "U-SQL1",
            "type": "DataLakeAnalyticsU-SQL",
            "policy": {
                "timeout": "7.00:00:00",
                "retry": 0,
                "retryIntervalInSeconds": 20
            },
            "typeProperties": {
                "scriptPath": "u-sql1/Test",
                "degreeOfParallelism": {
                    "value": "5",
                    "type": "Expression"
                },
                "priority": 1,
                "compilationMode": "Full",
                "scriptLinkedService": {
                    "referenceName": "Your Blob Ref",
                    "type": "LinkedServiceReference"
                }
            },
            "linkedServiceName": {
                "referenceName": "Your ADLa Ref",
                "type": "LinkedServiceReference"
            }
        },

对于信息,我忽略了 MS 文档并使用新的开发 UI 创建了这个 JSON,因为我有私人预览访问权限。上面的内容已经过测试并且可以正常工作,因为我在此处的 blob 帖子中使用了它:

https://mrpaulandrew.com/2017/12/20/controlling-u-sql-job-aus-with-azure-data-factory-v2-pipeline-parameters/

希望这可以帮助。

于 2018-01-02T08:36:43.937 回答