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

Posted

技术标签:

【中文标题】以编程方式提交带有代码隐藏的 U-SQL 作业【英文标题】:Programmatically submit a U-SQL job with code-behind 【发布时间】:2018-03-30 03:35:15 【问题描述】:

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

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

这是我的python代码:

从 azure.mgmt.datalake.analytics.job 导入 DataLakeAnalyticsJobManagementClient adlaJobClient = get_client_from_cli_profile( DataLakeAnalyticsJobManagementClient, adla_job_dns_suffix='azuredatalakeanalytics.net') def submit_usql_job(脚本): job_id = str(uuid.uuid4()) job_result = adlaJobClient.job.create( ADLA_ACCOUNT_NAME, 工作编号, 工作信息( name='示例作业', 类型='USql', 属性=USqlJobProperties(脚本=脚本) ) ) print("提交的作业 ID ''".format(job_id)) 返回job_id

【问题讨论】:

【参考方案1】:

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

要么这样做,要么将您的代码隐藏逻辑移动到一个专用库,您可以一次性单独上传和注册,然后将其引用到您从 python 提交的作业中的核心内容。

【讨论】:

【参考方案2】:

编译后,您的代码后面的 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 插件支持团队收到了这个方法。

【讨论】:

我仍在寻找将 C# 代码文件 (*.cs) 转换为 dll 的自动化(希望是跨平台)方法。

以上是关于以编程方式提交带有代码隐藏的 U-SQL 作业的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式隐藏应用程序

Android以编程方式隐藏/取消隐藏应用程序图标

当它隐藏在另一个片段中时,以编程方式在 CoordinatorLayout 中显示 BottomNavigationView

AngularJS 不发送隐藏字段值

隐藏以编程方式为标签创建的 UIButton

以编程方式将用户重定向到 Paypal 站点以及来自代码隐藏的数据