导出到 Azure 表
重要
对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习。
从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。
ML 工作室(经典)文档即将停用,将来可能不会更新。
本文介绍如何使用机器学习 Studio (经典) 的 "导出数据" 模块中的 "导出到 Azure " 选项。
如果要将数据从机器学习试验导出到 Azure 表,此选项很有用。 Azure 表服务是 Azure 中的一项数据管理服务,可以存储大量的结构化非关系型数据。 它是一种 NoSQL 数据存储,可接受来自 Azure 内部和外部的经过身份验证的呼叫。
如何将数据导出到 Azure 表
将其连接到生成要导出到 Azure 表存储的数据的模块。
通过设置 " 身份验证类型 " 选项,指定是要将数据导出到公共共享资源还是需要登录凭据的专用存储帐户。
公用 (SAS url) :如果帐户支持通过 SAS url进行访问,请选择此选项。 在 " 表 SAS URI " 字段中,键入或粘贴定义帐户和公共 blob 的完整 URI。
SAS URL 是时间绑定访问 URL,你可以使用 Azure 存储实用工具生成此 URL。 在通过 SAS URL 访问的页面中,只能使用以下格式存储数据: CSV、TSV 和 ARFF。
帐户:如果你的数据位于 专用 帐户,请选择此选项。 还必须提供凭据,包括帐户名和密钥。
如果要将数据导出到受保护的私有存储,请提供访问该帐户所需的凭据:
表帐户名称:键入或粘贴包含要访问的 blob 的帐户名称。 例如,如果存储帐户的完整 URL 为
https://myshared.table.core.windows.net
,则键入myshared
。表帐户密钥:粘贴与存储帐户关联的访问密钥。
表名称:键入要读取的特定表的名称。
使用列属性指定要保存到表存储中的列以及要在定义表架构时使用的列。
分区键:选择应该用于对 Azure 存储中表的已保存数据集进行分区的列。 将对 Azure 中的表进行分区以支持跨存储节点的负载平衡。 所有表实体都按分区进行组织;因此,所有表操作都需要 PartitionKey 属性。
Azure 表行键:选择应该用于 RowKey 属性的列。 RowKey 属性是表中每个实体所需的系统属性。 除了 PartitionKey 属性,它还构成了表中每一行的唯一索引。
注意
对于 RowKey 和 PartitionKey,必须使用不同的列。 请确保为 RowKey 或 PartitionKey 选择的任何列也包含在目标列列表中,否则会引发错误。
- Azure 表源列:从数据集中选择要保存到 Azure 表的任何其他列。 还必须包含为 PartitionKey 和 RowKey选择的列。
有关 Azure 存储中的表的详细信息,请参阅了解表服务数据模型。
指定要写入表的列的名称。
重要
您必须为输出到表中的每一列提供列名,其中包括 RowKey、 PartitionKey和所有源列。
如果您提供的列名数与输出列数不匹配,则会引发错误。
如果键入新的列名称,则必须按源列的列索引顺序提供这些名称。
Azure 表写入模式:指示在 Azure 表中已有数据时 导出数据 的行为方式。
Insert:该
Insert Entity
操作插入具有唯一主键的新实体,它由 PartitionKey 和 RowKey 属性的组合构成。合并:
Merge Entity
操作通过更新实体的属性来更新现有实体。 此操作不会替换现有实体。Replace:
Update Entity
操作替换表中给定实体的内容。InsertOrReplace:如果实体不存在,操作将
InsertOrReplace Entity
插入该实体。 如果该实体存在,它将替换现有实体。InsertOrMerge:如果实体不存在,操作将
InsertOrMerge Entity
插入该实体。 如果该实体存在,它会将提供的实体属性与现有属性进行合并。
使用缓存的结果:指示是否要在每次运行实验时刷新数据。
如果选择此选项,则在第一次运行实验时, 导出数据 模块将数据保存到指定的表,随后不执行写入,除非存在上游更改。
如果取消选择此选项,则每次运行实验时都会将数据写入目标,而不管数据是否相同。
运行试验。
技术说明
本部分包含实现详情、使用技巧和常见问题解答。
常见问题
为什么在写入现有表时出现错误
检查表的架构,确保列名称和数据类型相同。 例如,在 Azure 表存储中,ID 列应为字符串。
如果收到错误,则 错误0027:传递的对象的大小不一致,验证表是否存在于指定的容器中。 当前,Azure ML 只能写入现有表。
为什么无法找到现有列的错误
如果尚未运行试验, 导出数据有时将不会检测到上游列。 如果在实验中进行任何上游更改,则可能需要删除 导出数据 模块,然后添加并重新配置它。
如何避免不必要地重新编写相同的数据
如果试验中的数据出于任何原因而发生更改,则 导出数据 模块将始终写入新数据。
但是,如果您正在使用不会影响结果的其他更改运行试验,请将 " 使用缓存的结果 " 选项设置为 TRUE。 该模块将检查是否已使用相同的选项运行了实验,如果找到了之前的结果,则不会将数据写入 Azure 表。
能否将数据导出到不同的地理区域
是的。 但是,如果存储帐户与用于机器学习试验的计算节点位于不同的区域,则数据访问速度可能较慢。 此外,还需要对订阅上的数据入口和出口收费。
示例
有关如何使用这些机器学习模块的示例,请参阅 Azure AI 库。
模块参数
公共或 SAS-公共选项
名称 | 范围 | 类型 | 默认 | 说明 |
---|---|---|---|---|
表 SAS URI | any | String |
帐户-专用帐户选项
名称 | 范围 | 类型 | 默认 | 说明 |
---|---|---|---|---|
表帐户名 | ||||
表帐户密钥 | any | SecureString |
存储选项
名称 | 范围 | 类型 | 默认 | 说明 |
---|---|---|---|---|
表名 | String | 无 | ||
分区键 | any | SecureString | 无 | 在对表进行分区时,请选择要用作键的列。 如果未选择任何列,则列名称将作为所有条目的分区键 |
Azure 表行键 | any | ColumnPicker | 无 | 选择包含表行的唯一标识符的列。 默认为基于 GUID 的行键 |
Azure 表源列 | any | ColumnPicker | 无 | 按名称或按列索引指定要包括在表中的列 |
Azure 表目标列 | any | String | 无 | 键入要在目标表中使用的列的名称 |
Azure 表写入模式 | List: Insert、Merge、Replace、InsertOrReplace、InsertOrMerge | 枚举 | 无 | |
使用缓存的结果 | TRUE/FALSE | 布尔 | FALSE | 仅当有效缓存不存在时才执行模块;否则,请使用以前执行的缓存数据。 |
例外
异常 | 描述 |
---|---|
错误 0027 | 如果两个对象必须具有相同的大小,但其大小却不相同,则会发生异常。 |
错误 0003 | 如果一个或多个输入为 null 或为空,则会发生异常。 |
错误 0029 | 如果传递的 URI 无效,则会发生异常。 |
错误 0030 | 如果无法下载文件,则会发生异常。 |
错误 0002 | 如果一个或多个参数无法分析或者无法从指定的类型转换成目标方法所需的类型,则会发生异常。 |
错误 0009 | 如果错误地指定了 Azure 存储帐户名或容器名,则会发生异常。 |
错误 0048 | 如果无法打开文件,则会发生异常。 |
错误 0046 | 如果无法在指定的路径中创建目录,则会发生异常。 |
错误 0049 | 如果无法分析文件,则会发生异常。 |
有关特定于 Studio (经典) 模块的错误列表,请参阅机器学习错误代码。
有关 API 异常的列表,请参阅机器学习 REST API 错误代码。