发现数据

本指南介绍了如何启用和使用 Dataplex 发现。Discovery 扫描和提取 从数据湖中的数据中检索元数据,并将其注册到 Dataproc Metastore、BigQuery 和 Data Catalog 分析、搜索和探索。

概览

对于启用了 Discovery 的每项 Dataplex 资产, Dataplex 会执行以下操作:

  • 扫描与资产关联的数据。
  • 将结构化和半结构化文件分组到表中。
  • 收集技术元数据,例如表名称、架构和分区定义。

对于图片和视频等非结构化数据,Dataplex Discovery 会自动检测并注册文件组 以文件集的形式共享媒体类型。例如,如果 gs://images/group1 包含 GIF 图片,gs://images/group2 包含 JPEG 图片, Dataplex Discovery 检测到并注册了两个 文件集。对于结构化数据(例如 Avro),仅当文件位于数据格式和架构相同的文件夹中时,Discovery 才会检测文件。

发现的表和文件集会在 Data Catalog 中注册 搜索和发现。这些表将显示在 Dataproc Metastore 中 将 BigQuery 中的表视为 Hive 样式的表 会自动纳入分析范围

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 可用区或素材资源一级

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

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

  • 开启关闭发现功能。

  • 发现时间表:此选项可设置为预定义的 时间表 - 例如每小时或每天,或由 cron 定义的自定义时间表 格式。系统会在添加新资产时对其进行扫描。有关 相关信息,请参阅配置 Cron 时间表。 建议:安排发现广告系列每小时运行一次或更短时间 。

  • 包含或排除格式:定义要包含或排除哪些文件 通过在 include 或 排除路径。例如,如果您想将gs://test_bucket/foo/..从 发现,输入 **/foo/* 作为排除路径。引号 会导致错误。请务必输入 **/foo/*,而不是 "**/foo/*"。) 此函数仅适用于 Cloud Storage 资产。如果 “包含”和“排除”模式同时存在,排除模式 。

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

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

      • 分隔符:此字段接受一个字符,但 \r\n 除外。如果 系统会提供多个字符,但只有 字符串。如果未提供, Discovery 会使用英文逗号 作为分隔符。

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

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

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

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

      • 编码:此字段接受字符串编码名称,例如 UTF-8US-ASCIIISO-8859-1。如果未指定,则系统会使用 UTF-8 作为默认值

      • 停用数据类型推断功能:此字段接受布尔值。时间是 默认设置为 false。对于 JSON 数据,如果您停用类型推断, 所有列都注册为其基本类型(字符串、数字或 boolean).

发布元数据

在 Dataplex 数据湖中创建数据区域时, Dataplex 在项目中创建 BigQuery 数据集 包含该数据湖Dataplex 将表发布到该数据集中 (针对在 Cloud Storage 存储分区中发现的表, 作为资源数据集称为元数据 与区域相对应的发布数据集

每个 Dataplex 数据区域都会映射到 BigQuery 或 Dataproc Metastore 中的数据库, 其中元数据信息会自动提供

您可以修改自动发现的元数据, 例如表名称或架构。

查看发现的表和文件集

您可以在 Dataplex 中搜索发现的表和文件集 Google Cloud 控制台中的搜索视图。

打开 Google 搜索

如需获得更准确的搜索结果,请使用特定于 Dataplex 的过滤条件, 例如数据湖和数据区域名称每个分面排在前 50 位的项是 会显示在过滤器列表中您可以使用 搜索框。

每个条目都包含详细的技术和操作元数据。

在条目详情页面中,您可以在 BigQuery 中查询该表 并查看相应的 Dataproc Metastore 注册详细信息。

如果 Cloud Storage 表可以发布到 BigQuery 作为外部表,那么您可以在条目详细信息视图中查看以下内容:

  • BigQuery 外部表引用
  • 在 BigQuery 中打开按钮,用于开始分析 BigQuery 中的数据。

Dataplex 元数据条目是直接可见的, 。 如需了解详情,请参阅 Data Catalog 搜索参考文档

您可以通过 Dataplex metadata API 查看发现的所有条目。

发现操作

只要发现问题,就会引发以下管理员操作: 系统会在扫描期间检测与数据相关的问题。

数据格式无效

操作包括:

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

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

架构不兼容

操作包括:

  • Discovery 检测到的架构与 Dataproc Metastore 中的 metadata 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.

缺少数据

操作包括:

  • 在精选数据可用区中,已注册表的底层数据或 文件集不存在。换言之,预收录的可用区表或文件集 但之后其底层数据被删除了。您可以 您可以通过补充数据 删除元数据条目

解决发现操作

后续 Discovery 扫描会检查包含操作的数据。 触发操作的问题得到解决后,操作也会随之解决 自动扫描。

其他操作

除了前面介绍的发现操作之外,还有三项 与资源状态和安全政策相关的其他类型的操作 在 Dataplex 中实现快速传播。

  • 缺少资源:未找到底层存储桶或数据集 现有素材资源的 ID。

  • 未经授权的资源:Dataplex 没有足够的资源 拥有执行发现或应用安全政策的权限 到由 Dataplex 管理的存储桶或数据集

  • 安全政策传播方面的问题:为以下对象指定的安全政策: 无法成功将给定的数据湖、区域或资产传播到 存储分区或数据集。所有其他操作都是针对素材资源执行的 可以在数据湖、区域和资产级别引发这种类型的操作。

当底层资源或 并更正了安全配置问题

常见问题解答

如果 Discovery 推断的架构不正确,该怎么办?

如果推断的架构与给定表的预期架构不同,您可以 可以使用 metadata API。 请务必将 userManaged 更改为 true,这样您的修改操作在后续阶段不会被覆盖 发现扫描。

如何从 Discovery 扫描中排除文件?

默认情况下,“发现”功能会从 扫描功能,包括:

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

您可以使用 可用区级或资产级的发现配置,或使用 元数据 API。

如果 Discovery 检测到的表分组过于精细,我该怎么办?

如果 Discovery 检测到的表更精细 与表根路径进行比较,例如,每个单独的 分区注册为表,可能有以下几种原因:

  • 但这两种环境之间 预期的表根路径,将表拆分为多个较小的分组。

  • 预期的表中有不同类型的架构不兼容 根路径,该路径将表拆分为更小的分组。

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

  • 修复格式或架构差异,以便同一表根目录中的所有文件 具有一致的格式和兼容的架构。

  • 使用排除模式配置来排除异构文件 区域 / 资产配置或元数据 API 的存在。

完成其中一个纠正步骤后, 发现扫描时,会发生以下情况:

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

如何指定表名称?

您可以使用 metadata API 指定表名称。

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

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

您可以手动定义表名称、架构和分区定义,同时 关闭 Dataplex Discovery。或者 您需要执行以下操作:

  1. 创建表 方法是仅指定所需信息(例如表根路径)。
  2. 使用 Dataplex Discovery 填充其余部分 元数据,例如架构和分区定义。
  3. 确保元数据处于最新状态。

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

虽然 Dataplex 元数据都集中注册在 元数据 API,则只能使用 BigQuery 作为外部资源发布到 BigQuery 表格。作为表条目详细信息的一部分, metadata API, 您可以找到一个 BigQuery 兼容性标记 将哪些实体发布到 BigQuery 以及为什么要发布到 BigQuery。

后续步骤