发现数据

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

概览

对于启用了发现功能的每个 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 数据,如果您停用类型推理,则所有列都会注册为其基元类型(字符串、数字或布尔值)。

发布元数据

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

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

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

查看发现的表和文件集

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

打开 Google 搜索

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

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

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

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

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

Dataplex 元数据条目在 Data Catalog 中直接可见且可搜索。如需了解详情,请参阅 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

缺少数据

操作包括:

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

解决发现操作

后续的发现扫描会检查包含操作的数据。当触发相应操作的问题得到解决后,系统会在下一次按计划进行的发现扫描中自动解决该操作。

其他操作

除了上述发现操作之外,Dataplex 中还有三种与资源状态和安全政策传播相关的操作。

  • 缺少资源:未找到底层存储桶或数据集 现有素材资源的相应属性

  • 未经授权的资源: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 检测到的表分组过于精细,我该怎么办?

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

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

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

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

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

  • 通过将排除模式配置作为区域/资产配置或元数据 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。

后续步骤