发现数据

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

概览

对于启用了发现功能的每个 Dataplex 资产,Dataplex 都会执行以下操作:

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

对于图片和视频等非结构化数据,Dataplex Discovery 会自动检测并将共享媒体类型的文件组注册为文件集。例如,如果 gs://images/group1 包含 GIF 图片,而 gs://images/group2 包含 JPEG 图片,Dataplex Discovery 会检测并注册两个文件集。对于 Avro 等结构化数据,只有当文件位于包含相同数据格式和架构的文件夹中时,发现功能才会检测到这些文件。

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

Discovery 支持以下结构化和半结构化数据格式:

Discovery 支持以下结构化和半结构化数据压缩格式:

  • 以下格式的内部压缩:

    压缩 文件扩展名示例 支持的格式
    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 除外。如果提供了多个字符,则系统仅使用字符串的第一个字符。如果未提供,Discovery 会使用英文逗号作为分隔符。

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

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

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

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

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

      • 停用数据类型推理:此字段接受布尔值。它默认设置为 false。对于 JSON 数据,如果您停用类型推理,则所有列都会注册为其基元类型(字符串、数字或布尔值)。

发布元数据

在 Dataplex 数据湖中创建数据区域时,Dataplex 会在包含该数据湖的项目中创建一个 BigQuery 数据集。对于添加为数据区域资产的 Cloud Storage 存储分区中发现的表,Dataplex 会将这些表发布到该数据集。该数据集称为与相应区域对应的元数据发布数据集

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

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

查看发现的表和文件集

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

打开搜索

如需获得更准确的搜索结果,请使用 Dataplex 专用过滤条件,例如数据湖和数据区域名称。过滤条件列表中会显示每个维度前 50 个商品。您可以使用搜索框查找任何其他内容。

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

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

如果 Cloud Storage 表可以作为外部表发布到 BigQuery,您可以在其条目详情视图中看到以下内容:

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

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

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

发现操作

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

数据格式无效

操作包括:

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

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

架构不兼容

操作包括:

  • Discovery 检测到的架构与 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 中还有三种与资源状态和安全政策传播相关的操作。

  • 缺少资源:未找到与现有资产对应的底层存储桶或数据集。

  • 未经授权的资源:Dataplex 没有足够的权限来执行发现操作,也无法对 Dataplex 管理的存储桶或数据集应用安全政策

  • 安全政策传播方面的问题:为给定数据湖、可用区或资产指定的安全政策无法成功传播到底层存储分区或数据集。虽然所有其他操作都是在资产级别执行,但此类操作可以在数据湖、数据区域和资产级别执行。

当更正基础资源或安全配置问题后,系统会自动解决此类操作。

常见问题解答

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

如果推断出的架构与给定表的预期架构不同,您可以使用元数据 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 Discovery。或者,您也可以执行以下操作:

  1. 只需指定所需信息(例如表根路径),即可创建表
  2. 使用 Dataplex Discovery 填充其余元数据,例如架构和分区定义。
  3. 让元数据保持最新状态。

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

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

限制

后续步骤