以编程方式提交具有代码隐藏的U-SQL作业

时间:2018-03-30 03:35:15

标签: python azure azure-data-lake u-sql

我目前通过Python库提交我的U-SQL作业,我想在C#或Python代码隐藏文件中添加其他代码。是否支持代码隐藏文件,无论是在python中还是在我可以轻松实现自动化的基于CLI的方法中?

理想情况下,我想使用Azure CLI或Python库,因此可以在Linux和Windows上运行(即不依赖于Visual Studio)。我已经检查了PowerShell和Python的文档,但是我没有看到有关如何使用代码隐藏逻辑提交作业的任何说明。

这是我的python代码:

from azure.mgmt.datalake.analytics.job import DataLakeAnalyticsJobManagementClient

adlaJobClient = get_client_from_cli_profile(
    DataLakeAnalyticsJobManagementClient,
    adla_job_dns_suffix='azuredatalakeanalytics.net')

def submit_usql_job(script):
    job_id = str(uuid.uuid4())
    job_result = adlaJobClient.job.create(
        ADLA_ACCOUNT_NAME,
        job_id,
        JobInformation(
            name='Sample Job',
            type='USql',
            properties=USqlJobProperties(script=script)
        )
    )
    print("Submitted job ID '{}'".format(job_id))
    return job_id

2 个答案:

答案 0 :(得分:1)

您可能需要自己管理创建和注册程序集,这是您工作中的一个额外步骤。然后像往常一样参考装配。如果您需要一个示例,请提交Visual Studio中的作业,查询具有附带代码隐藏文件的查询,并查看它为您生成的脚本。您将看到它正在为您透明地添加上述步骤。现在,您可以尝试在自己的代码中应用相同的方法/模式。

要么将代码隐藏逻辑移动到专用库,您可以一次性上传和注册,然后通过python提交的作业将其引用到您心中。

答案 1 :(得分:0)

编译完成后,代码隐藏的DLL文件可以序列化为十六进制字符串,然后通过一些额外的代码行内联导入。这样就无需单独上传和注册DLL。

CREATE ASSEMBLY [__TMP_inline_dll] FROM 0x4D5A900003000...;
WITH ADDITIONAL_FILES = (0x2A543C... AS "__TMP_inline_dll.pdb");
REFERENCE ASSEMBLY [__TMP_inline_dll];

/* Your USQL Code Here... */

DROP ASSEMBLY [__TMP_inline_dll];

使用此Python代码可以将文件序列化为十六进制:

import binascii

def get_file_hex_string(filepath: str):
    """Open file in binary mode and return as a hex string."""
    with open(filepath, 'rb') as f:
        hexdata = binascii.hexlify(f.read())
    return hexdata.upper()

注意:

  • 以上假设您已经编译了dll。
  • 此样板代码包含一个pdb文件,标记为"附加"这应该是可选的。
  • 最后需要DROP ASSEMBLY语句"清理"之后的过程,虽然我已经被告知在USQL的未来版本中这将不再是必要的。
  • 我通过VS Code USQL加载项非常有用的支持团队收到了这种方法。