本指南介绍了如何启用和使用 Dataplex Universal Catalog 发现功能。发现功能会扫描数据湖中的数据并从中提取元数据,然后将元数据注册到 Dataproc Metastore、BigQuery 和 Data Catalog(已弃用)以供分析、搜索和探索。
如需详细了解如何使用自动发现功能来提取未附加到数据湖的 Cloud Storage 数据,然后对其进行编目,请参阅发现和编目 Cloud Storage 数据。
概览
对于每个启用了“发现”功能的 Dataplex Universal Catalog 资产,Dataplex Universal Catalog 会执行以下操作:
- 扫描与资产关联的数据。
- 将结构化文件和半结构化文件分组到表中。
- 收集技术元数据,例如表名称、架构和分区定义。
对于非结构化数据(例如图片和视频),Dataplex Universal Catalog 发现功能会自动检测并注册共享相同媒体类型的文件组(即文件集)。例如,如果 gs://images/group1
包含 GIF 图片,而 gs://images/group2
包含 JPEG 图片,则 Dataplex Universal Catalog Discovery 会检测并注册两个文件集。对于结构化数据(例如 Avro),发现功能仅在文件位于包含相同数据格式和架构的文件夹中时才会检测文件。
发现的表和文件集已在 Data Catalog 中注册,以便进行搜索和发现。这些表在 Dataproc Metastore 中显示为 Hive 样式的表,在 BigQuery 中显示为外部表,以便自动提供数据以供分析。
Discovery 支持以下结构化和半结构化数据格式:
- Parquet
- Avro
- ORC
- JSON(仅限以换行符分隔的格式)
- CSV(不支持包含注释行的 CSV 文件)
Discovery 支持以下压缩格式,用于处理结构化和半结构化数据:
以下格式的内部压缩:
压缩 文件扩展名示例 支持的格式 gzip .gz.parquet Parquet lz4 .lz4.parquet Parquet Snappy .snappy.parquet Parquet、ORC、Avro lzo .lzo.parquet Parquet、ORC JSON 和 CSV 文件的外部压缩:
- gzip
- bzip2
发现配置
创建新区域或资产时,系统会默认启用发现功能。您可以在区域级或资产级停用 Discovery。
创建可用区或资产时,您可以选择继承可用区级别的探索设置,也可以选择替换资产级别的探索设置。
以下是可在区域级和资产级使用的 Discovery 配置选项:
开启和关闭“发现”功能
发现时间表:此选项可以设置为预定义的时间表(例如每小时或每天),也可以设置为以 cron 格式定义的自定义时间表。添加新资产时,系统会扫描这些资产。如需了解详情,请参阅配置 Cron 时间表。建议:将 Discovery 安排为每小时或更频繁地运行。
包含或排除模式:通过在包含或排除路径中使用 glob 模式,定义要包含在探索扫描中或从探索扫描中排除的文件。例如,如果您想从发现中排除
gs://test_bucket/foo/..
,请输入**/foo/*
作为排除路径。引号会导致错误。请务必输入**/foo/*
,而不是"**/foo/*"
。) 此函数仅适用于 Cloud Storage 资源。如果同时存在包含模式和排除模式,则系统会首先应用排除模式。JSON 或 CSV 规范:可让您提供有关半结构化数据(例如 CSV 和 JSON)的其他信息,以提高 Discovery 结果的准确性。
对于 CSV 文件,您可以提供以下任一内容:
分隔符:此字段接受一个字符,但
\r
和\n
除外。如果提供了多个字符,则仅使用字符串的第一个字符。如果未提供,Discovery 会使用英文逗号作为分隔符。标题行数:此字段接受值
0
或1
。默认值为0
。如果值为0
,Discovery 会执行标题推断,如果检测到标题,Discovery 会从标题中提取列名称,并将值重置为1
。编码:此字段接受字符串编码名称,例如
UTF-8
、US-ASCII
或ISO-8859-1
。如果未指定任何内容,则默认使用UTF-8
。停用类型推断:此字段接受布尔值。默认情况下,它设置为
false
。对于 CSV 数据,如果您停用类型推断,则所有列都会注册为字符串。
对于 JSON 文件,您可以提供以下任一内容:
编码:此字段接受字符串编码名称,例如
UTF-8
、US-ASCII
或ISO-8859-1
。如果未指定任何内容,则默认使用UTF-8
。停用数据类型推断:此字段接受布尔值。默认情况下,它设置为
false
。对于 JSON 数据,如果您停用类型推断,所有列都会注册为其原始类型(字符串、数字或布尔值)。
发布元数据
在 Dataplex Universal Catalog 数据湖中创建数据区域时,Dataplex Universal Catalog 会在包含该数据湖的项目中创建一个 BigQuery 数据集。对于在添加到数据可用区的 Cloud Storage 存储分区中发现的表,Dataplex Universal Catalog 会将这些表发布到相应的数据集中。相应的数据集称为与可用区对应的元数据发布数据集。
每个 Dataplex Universal Catalog 数据区都会映射到 BigQuery 中的数据集或 Dataproc Metastore 中的数据库,其中会自动提供元数据信息。
您可以使用 Dataplex API 修改自动发现的元数据,例如表名称或架构。
查看发现的表和文件集
您可以在 Google Cloud 控制台中的 Dataplex Universal Catalog 搜索视图中搜索已发现的表和文件集。
为了获得更准确的搜索结果,请使用 Dataplex Universal Catalog 专用过滤条件,例如数据湖和数据区域名称。过滤条件列表中会显示每个构面的前 50 个项。您可以使用搜索框查找任何其他商品。
每个条目都包含详细的技术元数据和操作元数据。
在条目详情页面中,您可以在 BigQuery 中查询该表,并查看相应的 Dataproc Metastore 注册详细信息。
如果 Cloud Storage 表可以作为外部表发布到 BigQuery 中,那么您可以在其条目详情视图中看到以下内容:
- BigQuery 外部表引用
- 用于在 BigQuery 中打开以开始分析 BigQuery 中的数据的按钮
Dataplex Universal Catalog 元数据条目可直接在 Data Catalog 中查看和搜索。如需了解详情,请参阅 Data Catalog 搜索参考文档。
所有发现的条目都可以通过 Dataplex API 查看。
探索操作
在扫描期间检测到与数据相关的问题时,Discovery 会触发以下管理员操作。
数据格式无效
操作包括以下内容:
表格中的数据格式不一致。例如,存在具有相同表格前缀的不同格式的文件。
精选区域中的数据格式无效(数据不是 Avro、Parquet 或 ORC 格式)。
架构不兼容
操作包括以下内容:
Google 探索检测到的架构与 Dataproc Metastore 中元数据 API 中的有效表架构不兼容。在以下情况下,架构 A 和架构 B 不兼容:
A 和 B 共享名称相同的字段,但这些字段的数据类型不同且不兼容。例如,字符串和整数。
A 和 B 没有重叠的字段。
A 和 B 至少有一个非 null 字段未在另一个架构中找到。
在精选区中,架构与用户管理的架构有所偏移。
分区定义无效
操作包括以下内容:
分区命名不一致。例如,
gs://sales_data/year=2020/month=10/day=01
和gs://sales_data/year=2020/region=us
。精选数据区中的非 Hive 样式分区命名。例如,使用
gs://sales_data/2020/10/01
而不是gs://sales_data/year=2020/month=10/day=01
。
缺少数据
操作包括以下内容:
- 在精选数据区中,已注册的表或文件集的基础数据不再存在。换句话说,系统发现并注册了精选区域表或文件集,但后来其底层数据被删除。您可以通过补充数据或删除元数据条目来解决此问题。
解决发现广告操作
后续的发现扫描会检查包含操作的数据。触发操作的问题修复后,系统会在下一次预定的发现扫描中自动解决相应操作。
其他发现操作
除了上述发现操作之外,Dataplex Universal Catalog 中还有三种与资源状态和安全政策传播相关的其他操作。
缺少资源:找不到与现有资产对应的底层存储桶或数据集。
未经授权的资源:Dataplex Universal Catalog 没有足够的权限来执行发现操作,或者将安全政策应用于由 Dataplex Universal Catalog 管理的存储桶或数据集
安全政策传播问题:为指定的数据湖、可用区或资产指定了安全政策,但这些政策未能成功传播到下层存储分区或数据集。虽然所有其他操作都在资产级,但这种类型的操作可以在数据湖、区域和资产级提出。
当底层资源或安全配置问题得到修正后,这些类型的操作会自动解决。
常见问题解答
如果 Discovery 推断出的架构不正确,该怎么办?
如果推断出的架构与给定表的预期架构不同,您可以使用元数据 API 更新元数据,以替换推断出的架构。
请务必将 userManaged
设置为 true
,以免您的编辑内容在后续的 Discovery 扫描中被覆盖。
如何从 Discovery 扫描中排除文件?
默认情况下,Discovery 会从扫描中排除某些类型的文件,包括以下文件:
_SUCCESS
_started
_committed
_metadata
、_METADATA
、_Metadata
_common_metadata
,_COMMON_METADATA
- 以
README
或readme
开头的文件 - 以
base_
、delta_
、delete_delta_
、bucket_
开头,后跟数字的目录 - 以
.
开头的目录
您可以使用区域级或资产级的发现配置,或者使用元数据 API 来指定其他包含或排除模式。
如果 Discovery 检测到的表格分组过于细化,我该怎么办?
如果 Discovery 检测到的表比表根路径更精细(例如,每个单独的分区都注册为表),则可能存在以下几种原因:
预期表根路径中存在格式差异(例如 Avro 和 Parquet 文件混杂),这会将表拆分为更小的分组。
预期表根路径中存在不同类型的架构不兼容问题,这些问题会将表拆分为更小的分组。
您可以通过以下任一方式来解决此问题:
修正格式或架构差异,使同一表根路径中的所有文件具有一致的格式和兼容的架构。
通过使用排除模式配置(作为区域 / 素材资源配置或元数据 API 的一部分)来排除异构文件。
采取其中一项修正措施后,在下一次发现扫描中,系统会执行以下操作:
- 现有的较低级别表会自动从 Dataplex API、BigQuery、Dataproc Metastore 和 Data Catalog 中移除。
- 而是创建了一个具有预期表根路径的新高级别表。
如何指定表名?
您可以使用元数据 API 指定表名称。
如果我在 Dataproc Metastore 或 BigQuery 中手动创建表,会发生什么情况?
为给定资产启用发现功能后,您无需在 Dataproc Metastore 或 BigQuery 中手动注册条目。
您可以手动定义表名称、架构和分区定义,同时关闭 Dataplex Universal Catalog 发现功能。或者,您也可以执行以下操作:
- 仅指定必需的信息(例如表根路径)即可创建表。
- 使用 Dataplex Universal Catalog 发现功能填充其余元数据,例如架构和分区定义。
- 让元数据保持最新状态。
如果我的表未显示在 BigQuery 中,我该怎么办?
虽然 Dataplex Universal Catalog 元数据全部集中注册在元数据 API 中,但只有与 BigQuery 兼容的 Cloud Storage 表才会作为外部表发布到 BigQuery。在元数据 API 的表格条目详细信息中,您可以找到一个 BigQuery 兼容性标记,用于指明哪些实体已发布到 BigQuery 以及原因。
限制
- Discovery 不支持外部表(包括 BigLake 外部表)。不过,外部表会自动提取到 Dataplex Universal Catalog 中,您可以在 Dataplex Universal Catalog 中搜索这些表。
后续步骤
- 了解如何使用元数据。