发现数据

本指南介绍了如何启用和使用 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 发现功能会检测并注册两个文件集。对于结构化数据(例如 Avro),发现功能仅在文件位于包含相同数据格式和架构的文件夹中时才会检测文件。

发现的表和文件集已在 Data Catalog 中注册,以便进行搜索和发现。这些表在 Dataproc Metastore 中显示为 Hive 样式的表,在 BigQuery 中显示为外部表,以便自动提供数据以供分析。

发现功能支持以下结构化和半结构化数据格式:

发现功能支持以下压缩格式用于处理结构化和半结构化数据:

  • 以下格式的内部压缩:

    压缩 文件扩展名示例 支持的格式
    gzip .gz.parquet Parquet
    lz4 .lz4.parquet Parquet
    Snappy .snappy.parquet Parquet、ORC、Avro
    lzo .lzo.parquet Parquet、ORC
  • JSON 和 CSV 文件的外部压缩:

    • gzip
    • bzip2

发现配置

创建新区域或资产时,发现功能默认处于启用状态。您可以在区域级层或资产级层停用发现功能。

创建区域或资产时,您可以选择继承区域级层的发现设置,也可以选择替换资产级层的发现设置。

以下是在区域级层和资产级层提供的发现配置选项:

  • 发现开启关闭

  • 发现时间表:此选项可以设置为预定义时间表(例如每小时或每天),也可以设置为以 Cron 格式定义的自定义时间表。添加新资产时,系统会进行扫描。如需了解详情,请参阅配置 Cron 作业时间表。建议:将发现功能安排为每小时运行或不经常运行。

  • 包含或排除模式:通过在包含或排除路径中使用 glob 模式,定义要包含在发现扫描中或从发现扫描中排除的文件。例如,如果您想从发现中排除 gs://test_bucket/foo/..,请输入 **/foo/* 作为排除路径。引号会导致错误。请务必输入 **/foo/*,而不是 "**/foo/*"。此函数仅适用于 Cloud Storage 资产。如果同时存在包含模式和排除模式,系统会首先应用排除模式。

  • JSON 或 CSV 规范:可让您提供有关半结构化数据(例如 CSV 和 JSON)的更多信息,以提高发现结果的准确性。

    • 对于 CSV 文件,您可以提供以下任一项:

      • 分隔符:此字段接受一个字符,\r\n 除外。如果提供了多个字符,则系统仅使用字符串的第一个字符。如果未提供,则发现功能会使用英文逗号作为分隔符。

      • 标题行数:此字段接受值 01。默认值为 0。当值为 0 时,发现功能会执行标题推断;如果检测到标题,则发现功能会从标题中提取列名称,并将值重置为 1

      • 编码:此字段接受字符串编码名称,例如 UTF-8US-ASCIIISO-8859-1。如果未指定任何内容,则默认使用 UTF-8

      • 停用类型推断:此字段接受布尔值。默认情况下,该值设置为 false。对于 CSV 数据,如果您停用类型推断,则所有列都会注册为字符串。

    • 对于 JSON 文件,您可以提供以下任一项:

      • 编码:此字段接受字符串编码名称,例如 UTF-8US-ASCIIISO-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 查看。

发现操作

每当在扫描期间检测到与数据相关的问题时,发现功能都会引发以下管理员操作。

数据格式无效

操作包括:

  • 表中的数据格式不一致。例如,存在具有相同表前缀的不同格式的文件。

  • 精选区域中的数据格式无效(数据不是 Avro、Parquet 或 ORC 格式)。

架构不兼容

操作包括:

  • 发现功能检测到的架构与 Dataproc Metastore 的元数据 API 中的有效表架构不兼容。在以下情况下,架构 A 和架构 B 不兼容:

    • A 和 B 共享名称相同的字段,但这些字段的数据类型不同且不兼容。例如,字符串和整数。

    • A 和 B 没有重叠的字段。

    • A 和 B 至少有一个不可为 null 的字段且在另一个架构中找不到。

  • 在精选区域中,架构与用户管理的架构有所偏移。

分区定义无效

操作包括:

  • 分区命名不一致。例如,gs://sales_data/year=2020/month=10/day=01gs://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 管理的存储桶或数据集

  • 安全政策传播问题:为给定的数据湖、区域或资产指定的安全政策无法成功地传播到底层存储桶或数据集。虽然所有其他操作都在资产级层执行,但这种类型的操作可能在数据湖、区域和资产级层引起。

当底层资源或安全配置问题得到修正后,这些类型的操作会自动解决。

常见问题解答

如果发现功能推断出的架构不正确,该怎么办?

如果推断出的架构与给定表的预期架构不同,您可以使用元数据 API 更新元数据,以替换推断出的架构。请务必将 userManaged 设置为 true,以免您的修改内容在后续的发现扫描中被覆盖。

如何从发现扫描中排除文件?

默认情况下,发现功能会从扫描中排除某些类型的文件,包括以下文件:

  • _SUCCESS
  • _started
  • _committed
  • _metadata_METADATA_Metadata
  • _COMMON_METADATA_common_metadata
  • READMEreadme 开头的文件
  • base_delta_delete_delta_bucket_ 开头,后跟数字的目录
  • . 开头的目录

您可以使用区域级层或资产级层的发现配置,或者使用元数据 API 来指定其他包含或排除模式。

如果发现功能检测到的表分组过于细化,该怎么办?

如果发现功能检测到的表比表根路径更精细(例如,每个单独的分区都注册为表),则可能存在以下几种原因:

  • 预期表根路径中存在格式差异(例如 Avro 和 Parquet 文件组合),这会将表拆分为更小的分组。

  • 预期表根路径中存在不同类型的架构不兼容问题,这些问题会将表拆分为更小的分组。

您可以通过以下任一方式来解决此问题:

  • 修正格式或架构差异,使同一表根路径中的所有文件具有一致的格式和兼容的架构。

  • 通过使用排除模式配置(作为区域/资产配置或元数据 API 的一部分)来排除异构文件。

采取其中一项修正措施后,在下一次发现扫描中,会发生以下���况:

  • 现有的较低级层表会自动从 Dataplex API、BigQuery、Dataproc Metastore 和 Data Catalog 中移除。
  • 系统会改为创建一个具有预期表根路径的较高级层新表。

如何指定表名称?

您可以使用元数据 API 指定表名称。

如果我在 Dataproc Metastore 或 BigQuery 中手动创建表,会发生什么情况?

为给定资产启用发现功能后,您无需在 Dataproc Metastore 或 BigQuery 中手动注册条目。

您可以在关闭 Dataplex Universal Catalog 发现功能的同时,手动定义表名称、架构和分区定义。或者,您也可以执行以下操作:

  1. 仅指定必需的信息(例如表根路径)来创建表
  2. 使用 Dataplex Universal Catalog 发现功能填充其余的元数据,例如架构和分区定义。
  3. 让元数据保持最新状态。

如果我的表未在 BigQuery 中显示,该怎么办?

虽然 Dataplex Universal Catalog 元数据都在元数据 API 中集中注册,但只有与 BigQuery 兼容的 Cloud Storage 表才会作为外部表发布到 BigQuery。在元数据 API 的表条目详细信息中,您可以找到 BigQuery 兼容性标记,用于指明哪些实体已发布到 BigQuery 以及原因。

限制

后续步骤