错误 Python API GCP 数据目录 - Google Cloud Platform

问题描述

我在尝试使用此链接代码时遇到错误Data Catalog Example。在第 4 步,只需复制粘贴提供的所有代码,验证到我的 GCP 项目中并对其进行测试。

一切正常,直到它开始创建标签模板字段...

tag_template = datacatalog_v1.types.TagTemplate()
tag_template.display_name = 'On-premises Tag Template'

tag_template.fields['source'].display_name = 'Source of the data asset'
tag_template.fields['source'].type.primitive_type = \
    datacatalog_v1.FieldType.PrimitiveType.STRING.value

它总是以相同的错误崩溃。

Error Image

tag_template <proto.marshal.collections.maps.MapComposite object at 0x10fe23310>
Traceback (most recent call last):
  File "/Users/ac/Documents/DataCatalog/python_datacatalog/application/sample.py",line 149,in <module>
    tag_template.fields['source'].display_name = 'Source of the data asset'
  File "/Users/ac/Documents/DataCatalog/python_datacatalog/venv/lib/python3.8/site-packages/proto/marshal/collections/maps.py",line 56,in __getitem__
    raise KeyError(key)
KeyError: 'source'

有人可以帮我分享替代方法吗?

解决方法

Data Catalog Example 上的示例代码已过时。从第 4 步开始对代码进行了一些更改(您当前遇到的问题)。我在下一行遇到了另一个关于原始类型的错误。

# -------------------------------
# 4. Create a Tag Template.
# -------------------------------
tag_template = datacatalog_v1.types.TagTemplate()
tag_template.display_name = 'On-premises Tag Template'

tag_template.fields['source'] = datacatalog_v1.types.TagTemplateField() #creates key 'source'
tag_template.fields['source'].display_name = 'Source of the data asset'
tag_template.fields['source'].type_.primitive_type = datacatalog_v1.types.FieldType.PrimitiveType.STRING #from type -> type_,syntax for primitive type string
  • 修复是通过添加 tag_template.fields['source'] = datacatalog_v1.types.TagTemplateField()
  • 为 TagTemplateField 创建键“源”
  • 更新了 "tag_template.type" 的语法并分配了 primitive string value

如果您继续执行第 5 步,则会弹出错误 KeyError: 'source'。如果您没有遇到这种情况,那么一切都很好。但是,如果您遇到它,这里是解决该问题的代码。

# -------------------------------
# 5. Attach a Tag to the custom Entry.
# -------------------------------
tag = datacatalog_v1.types.Tag()
tag.template = tag_template.name
tag.fields['source'] = datacatalog_v1.types.TagField() #creates key 'source'
tag.fields['source'].string_value = 'On-premises system name'

tag = datacatalog.create_tag(parent=entry.name,tag=tag)
print('Created tag: {}'.format(tag.name))
  • 修复类似于第 4 步,这次通过添加 tag.fields['source'] = datacatalog_v1.types.TagField() #creates key 'source'
  • 为 TagField 创建键“源”

我运行了从第 1 步到第 5 步的整个脚本。

脚本输出: enter image description here

创建的标签模板: enter image description here

创建的标签: enter image description here