Не удается выполнить сценарий U-SQL из ADF: ScriptPath не должен иметь значение null

Мы пытаемся запустить сценарий U-SQL из ADFv2, но возникает ошибка, препятствующая выполнению. Учитывая, что документация MS по этой проблеме бесполезна, я снова прошу в SO помощь в устранении этой проблемы.

  1. Первоначальная проблема заключается в том, как развернуть сценарий U-SQL в ADLA. Мы не смогли найти ничего полезного и в итоге просто скопировали и вставили скрипт в ADLA и в хранилище BLOB-объектов Azure в двух форматах: .usql и .txt. (это тоже может быть одной из проблем).

  2. Мы создали ARM в соответствии с Документация MS, но происходит сбой с ошибкой: 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 января 2018 г.

После консультации с MS относительно развертывания usql мы пришли к комбинации команд powershell:

  • мы выполняем скрипт, который загружает .dll, которые находятся в корзине сборки u-sql, в папку на Datalake;
  • затем прокрутите каталог и создайте каждую из сборок отдельно;
  • для сценариев u-sql мы создали их как хранимые процедуры в Datalake Analytics и загрузили простой сценарий u-sql, который выполняет эти процедуры с необходимыми параметрами;

person g_brahimaj    schedule 27.12.2017    source источник


Ответы (1)


Вам не нужен путь сценария в связанной службе.

Служба, связанная с большим двоичным объектом, должна быть следующей:

{
    "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 и создал этот JSON, используя новый пользовательский интерфейс разработчика, поскольку у меня есть частный доступ к предварительному просмотру. Вышеупомянутое было протестировано и работает, поскольку я использовал его в сообщении blob здесь:

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

Надеюсь это поможет.

person Paul Andrew    schedule 02.01.2018
comment
Я изменил путь скрипта с container\\script.txt -> container/script.usql и теперь он работает. Также у меня возникла проблема с определением Blob LS (опубликую более четкий ответ). Можете ли вы указать мне на некоторые учебные пособия о том, как развернуть сценарий u-sql с зависимой .dll (часть 1 вопроса), а также запустить процедуру u-sql, поскольку для нее требуется scriptPath? В каждом образце, который я нашел, его нет. - person g_brahimaj; 02.01.2018