发现和编目 Cloud Storage 数据

本文档介绍了如何使用 Dataplex 自动发现功能。该功能是 BigQuery 的一项功能,可让您扫描 Cloud Storage 存储分区中的数据,以提取元数据并将其编入目录。在发现扫描过程中,自动发现功能会为结构化数据创建 BigLake 或外部表,并为非结构化数据创建对象表。这种集中式表格数据有助于轻松实现 AI 赋能的分析洞见、数据安全和治理。

如需自动发现 Cloud Storage 数据,您可以创建并运行发现扫描。

发现扫描概览

发现扫描会执行以下操作:

  • 扫描 Cloud Storage 存储桶或路径中的数据。
  • 将结构化数据和半结构化数据分组到表中。
  • 收集元数据,例如表名称、架构和分区定义。
  • 使用架构和分区定义在 BigQuery 中创建和更新 BigLake、外部表或对象表。

对于非结构化数据(例如图片和视频),发现扫描会检测并注册与 BigLake 对象表共享相同媒体类型的文件组。例如,如果 gs://images/group1 包含 GIF 图片,而 gs://images/group2 包含 JPEG 图片,则发现扫描会检测并注册两个文件集。

对于结构化数据(例如 Avro),发现扫描会将文件组注册为 BigLake 外部表,并且仅在文件位于包含相同数据格式和兼容架构的文件夹中时才会检测文件。

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

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

  • 以下格式的内部压缩:

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

    • gzip
    • bzip2

如需查看发现扫描支持的表数量上限,请参阅配额和限制

发现的表会在 BigQuery 中注册为 BigLake 外部表、BigLake 对象表或外部表。这样一来,您就可以在 BigQuery 中分析这些数据。还启用了 BigLake 表和对象表的元数据缓存。所有 BigLake 表都将自动提取到 BigQuery 通用目录中,以便进行搜索和发现。

准备工作

Enable the Dataplex API.

Enable the API

Dataplex 服务账号所需的角色

在开始之前,请向项目中的 Dataplex 服务账号分配 IAM 权限。

  service-PROJECT_NUMBER@gcp-sa-dataplex.iam.gserviceaccount.com
  

PROJECT_NUMBER 替换为已启用 Dataplex API 的项目。

如需确保 Dataplex 服务账号拥有创建和运行发现扫描所需的权限,请让您的管理员为 Dataplex 服务账号授予以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

这些预定义角色包含创建和运行发现扫描所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需创建和运行发现扫描,需要具备以下权限:

  • 针对数据源项目的 bigquery.datasets.create
  • 针对数据源存储桶的 storage.buckets.get
  • 针对数据源存储桶的 storage.objects.get
  • 针对数据源存储桶的 storage.objects.list
  • 针对数据源项目的 bigquery.datasets.get
  • 提供连接:
    • bigquery.connections.delegate 针对 BigQuery 连接
    • bigquery.connections.use 针对 BigQuery 连接

您的管理员也可以使用自定义角色或其他预定义角色为 Dataplex 服务账号授予这些权限。

BigQuery 连接服务账号所需的角色

如需确保 BigQuery Connection 服务账号拥有创建发现扫描所需的权限,请让您的管理员为 BigQuery Connection 服务账号授予 Cloud Storage 存储分区的 Dataplex Discovery Service Agent (roles/dataplex.discoveryServiceAgent) IAM 角色。

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含创建发现扫描所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需创建发现扫描,需要具备以下权限:

  • 针对数据源项目的 bigquery.datasets.create
  • 针对数据源存储桶的 storage.buckets.get
  • 针对数据源存储桶的 storage.objects.get
  • 针对数据源存储桶的 storage.objects.list
  • 针对数据源项目的 bigquery.datasets.get
  • 提供连接:
    • bigquery.connections.delegate 针对 BigQuery 连接
    • bigquery.connections.use 针对 BigQuery 连接

您的管理员也可以使用自定义角色或其他预定义角色为 BigQuery 连接服务账号授予这些权限。

最终用户所需的角色

如需获得创建和管理数据发现扫描所需的权限,请让管理员向您授予 Cloud Storage 存储分区的以下 IAM 角色:

  • 对 DataScan 资源拥有完全访问权限: Dataplex DataScan Administrator (roles/dataplex.dataScanAdmin) - 您的项目
  • 对 DataScan 资源的写入权限: Dataplex DataScan Editor (roles/dataplex.dataScanEditor) - 您的项目
  • 对 DataScan 资源(不包括结果)的读取权限: Dataplex DataScan Viewer (roles/dataplex.dataScanViewer) - 您的项目
  • 对 DataScan 资源(包括结果)的读取访问权限: Dataplex DataScan DataViewer (roles/dataplex.dataScanDataViewer) - 您的项目

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

这些预定义角色包含创建和管理数据发现扫描所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需创建和管理数据发现扫描,需要具备以下权限:

  • 创建 DataScan: 针对项目的 dataplex.datascans.create
  • 删除 DataScan:针对项目或 DataScan 资源的 dataplex.datascans.delete
  • 查看 DataScan 详细信息,不包括结果: 针对项目或 DataScan 资源的 dataplex.datascans.get
  • 查看 DataScan 详细信息,包括结果: 针对项目或 DataScan 资源的 dataplex.datascans.getData
  • 列出 DataScan: 针对项目或 DataScan 资源的 dataplex.datascans.list
  • 运行 DataScan:针对项目或 DataScan 资源的 dataplex.datascans.run
  • 更新 DataScan 的说明: 针对项目或 DataScan 资源的 dataplex.datascans.update
  • 查看 DataScan 的 IAM 权限:针对项目或 DataScan 资源的 dataplex.datascans.getIamPolicy
  • 为 DataScan 设置 IAM 权限:针对项目或 DataScan 资源的 dataplex.datascans.setIamPolicy

您也可以使用自定义角色或其他预定义角色来获取这些权限。

创建发现扫描

如需发现数据,您必须创建并运行发现扫描。您可以为扫描设置时间表,也可以按需运行扫描。

运行发现扫描时,系统会在 BigQuery 中创建一个与扫描的 Cloud Storage 存储桶对应的新数据集。BigQuery 数据集名称与 Cloud Storage 存储桶名称相同。存储桶名称中的无效字符会替换为下划线。如果数据集名称不可用,系统会附加后缀(例如 _discovered_001)。该数据集包含通过发现扫描创建的 BigLake 外部表或非 BigLake 外部表,以便进一步分析。

控制台

  1. 在 Google Cloud 控制台中,前往目录管理页面。

    前往目录管理

  2. Cloud Storage 发现标签页中,点击创建

  3. 创建发现扫描窗格中,配置要扫描的数据的详细信息。

  4. 为扫描任务输入一个名称。

  5. 扫描 ID 字段中,输入一个遵循 Google Cloud中的资源命名规范的唯一 ID。如果您未提供 ID,则发现扫描会生成扫描 ID。

  6. 可选:提供扫描的说明。

  7. 如需指定包含要扫描的文件的 Cloud Storage 存储桶,请在存储桶字段中浏览并选择相应存储桶。

  8. 可选:通过提供用于文件过滤的 glob 模式列表,定义要从发现扫描中包含或排除的数据。

    • 包含:如果只应扫描部分数据,请提供与要包含的对象匹配的通配符模式列表。
    • 排除:提供与要排除的对象匹配的通配符模式列表。

    例如,如果您想从发现扫描中排除 gs://test_bucket/foo/..,请输入 **/foo/** 作为排除路径。引号会导致错误。请务必输入 **/foo/**,而不是 "**/foo/**"

    如果您同时提供了包含模式和排除模式,系统会首先应用排除模式。

  9. 对于位置类型,请选择区域多区域(以可用者为准)。

  10. 如需根据扫描的数据创建 BigLake 表,请在连接 ID 字段中提供您的 Google Cloud 资源连接 ID。如需了解详情,请参阅 BigQuery 中的Google Cloud 资源关联

    您可以在与 BigQuery 数据集位置相同的位置创建新的连接 ID,该位置与 Cloud Storage 存储分区位置兼容

    如果您不提供资源连接 ID,发现扫描会创建非 BigLake 外部表

  11. 发现频率部分中,配置您希望发现扫描何时运行:

    • 重复:扫描按预定义的时间表运行。提供开始时间、运行扫描的天数以及频率(例如每小时)。

    • 按需:扫描按需运行。

  12. 可选:在 JSON 或 CSV 规范部分中,指定扫描应如何处理 JSON 和 CSV 文件。点击 JSON 或 CSV 规范

    1. 如需配置 JSON 选项,请选择启用 JSON 解析选项
      • 停用类型推断:发现扫描是否应在扫描数据时推断数据类型。如果您为 JSON 数据停用类型推断,所有列都会注册为其原始类型,例如字符串、数字或布尔值。
      • 编码格式:数据的字符编码,例如 UTF-8、US-ASCII 或 ISO-8859-1。如果您未指定值,则系统会使用 UTF-8 作为默认值。
    2. 如需配置 CSV 选项,请勾选启用 CSV 解析选项
      • 停用类型推断:发现扫描是否应在扫描数据时推断数据类型。如果您为 CSV 数据停用类型推断,则所有列都会注册为字符串。
      • 标题行:标题行数,可以是 01。如果您指定值 0,发现扫描会推断标题并从文件中提取列名称。默认值为 0
      • 列分隔符:用于分隔值的字符。提供单个字符 \r(回车)或 \n(换行)。默认为英文逗号 (,)。
      • 编码格式:数据的字符编码,例如 UTF-8US-ASCIIISO-8859-1。如果您未指定值,则系统会使用 UTF-8 作为默认值。
  13. 完成发现扫描的配置后,点击创建(对于定期扫描)或立即运行(对于按需扫描)。

    系统会按照您设置的时间表运行定期扫描。

    按需扫描在创建时会立即运行一次,您可以随时运行扫描。发现扫描可能需要几分钟才能运行完毕。

gcloud

gcloud alpha dataplex datascans create data-discovery --location=LOCATION
--data-source-resource=BUCKET_PATH

替换以下内容:

  • LOCATION:您要创建发现扫描的位置
  • BUCKET_PATH:要扫描的存储桶的 Cloud Storage 路径

REST

如需创建发现扫描,请使用 dataScans.create 方法

查询已发布的 BigLake 表

运行发现扫描后,BigLake 表会发布到 BigQuery 中的一个新数据集中。然后,您就可以在 BigQuery 中使用 SQL 或在 Dataproc 中使用 Apache Spark 或 HiveQL 对这些表进行分析。

SQL

您可以在 BigQuery 中查看或查询表。如需详细了解如何在 BigQuery 中运行查询,请参阅运行查询

Apache Spark

如需在 Dataproc 无服务器作业中使用 Spark SQL 查询 BigLake 表,请按以下步骤操作:

  1. 创建一个类似于以下示例脚本的 PySpark 脚本:

    from pyspark.sql import SparkSession
    session = (
      SparkSession.builder.appName("testing")
        .config("viewsEnabled","true")
        .config("materializationDataset", "DATASET_ID")
        .config("spark.hive.metastore.bigquery.project.id", "PROJECT_ID")
        .config("spark.hive.metastore.client.factory.class", "com.google.cloud.bigquery.metastore.client.BigQueryMetastoreClientFactory")
        .enableHiveSupport()
        .getOrCreate()
    )
    
    session.sql("show databases").show()
    session.sql("use TABLE_NAME").show()
    session.sql("show tables").show()
    
    sql = "SELECT * FROM DATASET_ID.TABLE_ID LIMIT 10"
    df = session.read.format("bigquery").option("dataset", "DATASET_ID").load(sql)
    df.show()

    替换以下内容:

    • DATASET_ID:用户具有创建权限的数据集的 ID
    • PROJECT_ID:包含 BigLake 表的项目的 ID
    • TABLE_NAME:BigLake 表的名称
    • TABLE_ID:BigLake 表的 ID
  2. 提交批量作业

管理已发布的 BigLake 表

已发布的 BigLake 表由发现扫描在 BigQuery 中创建和管理。默认情况下,每次运行预定或按需扫描时,发现扫描都会处理新数据发现、架构推断和架构演变。为了表明元数据由扫描进行管理,扫描会将标签 metadata-managed-mode 设置为 discovery-managed 来发布表。

如果您想自行管理架构和其他元数据(例如 CSV 或 JSON 选项),请将 metadata-managed-mode 标签设置为 user_managed。这样,下次运行发现扫描时,架构将保持不变。如果发现扫描推断出的架构不正确或与给定表的预期架构不同,此方法会非常有用。将 metadata-managed-mode 标签设置为 user_managed 时,可以降低费用。

如需更新标签,您可以将标签键 metadata-managed-mode 的值修改为 user_managed(而非 discovery-managed)。在这种情况下,只要表附加了 user_managed 标签,发现扫描就不会更新表的架构。

更新已发布的 BigLake 表

对于使用默认配置的发现扫描作业发布的 BigLake 表,架构和其他元数据会在每项发现扫描作业按预定频率运行时自动更新。

如需更新已发布的 BigLake 表,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 更新一个或多个表格属性

  3. 探索器窗格中,展开您的项目和数据集,然后选择表。

  4. 详细信息标签页的标签部分,确保 metadata-managed-mode 标签设置为 user_managed。如果设置为其他值,请按以下步骤操作:

    1. 点击 编辑详细信息

    2. metadata-managed-mode 键旁边的 value 字段中,输入 user_managed

删除已发布的 BigLake 表

如需删除已发布的 BigLake 表,请按以下步骤操作:

  1. 在 Cloud Storage 存储分区中删除该表的数据文件

  2. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  3. 探索器窗格中,展开您的项目和数据集,然后选择表。

  4. 详细信息窗格中的标签部分,确保 metadata-managed-mode 标签未设置为 user_managed。如果已设置为 user_managed,请按以下步骤操作:

    1. 点击编辑详细信息

    2. metadata-managed-mode 键旁边的 value 字段中,输入 discovery-managed

  5. 点击运行。发现扫描是按需运行的。

运行发现扫描后,BigLake 表会在 BigQuery 中删除,并且无法通过 Spark 列出或查询。

按需运行发现扫描

如需按需运行发现扫描,请选择以下任一选项。

控制台

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 在导航菜单中,依次点击治理 > 目录管理

  3. Cloud Storage 发现窗格中,点击要运行的发现扫描。

  4. 点击立即运行

gcloud

如需运行发现扫描,请使用 gcloud dataplex datascans run 命令

gcloud dataplex datascans run DATASCAN \
  --location=LOCATION

执行以下变量替换操作:

  • LOCATION:创建发现扫描的 Google Cloud 区域。
  • DATASCAN:发现扫描的名称。

REST

如需按需运行发现扫描,请使用 Dataplex API 中的 dataScans.run 方法

列出发现扫描

如需列出发现扫描,请选择以下选项之一。

控制台

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 在导航菜单中,依次点击治理 > 目录管理

  3. Cloud Storage 发现窗格中,列出了在项目中创建的发现扫描。

gcloud

gcloud dataplex datascans list --location=LOCATION --project=PROJECT_ID

替换以下内容:

  • LOCATION:项目的位置
  • PROJECT_ID:您的 Google Cloud 项目 ID

REST

如需检索项目中的发现扫描列表,请使用 Dataplex API 中的 dataScans.list 方法

查看发现扫描

如需查看发现扫描,请选择以下选项之一。

控制台

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 在导航菜单中,依次点击治理 > 目录管理

  3. Cloud Storage 发现窗格中,点击要查看其详情的发现扫描。

    • 扫描详情部分显示了发现扫描的详细信息。
    • 扫描状态部分会显示最新扫描作业的发现结果。

gcloud

gcloud dataplex datascans jobs describe JOB \
    --location=LOCATION \
    --datascan=DATASCAN \
    --view=FULL

替换以下内容:

  • JOB:发现扫描作业的作业 ID。
  • LOCATION:创建发现扫描的 Google Cloud 区域。
  • DATASCAN:作业所属的发现扫描的名称。
  • --view=FULL:查看发现扫描作业结果。

REST

如需查看数据发现扫描的结果,请使用 Dataplex API 中的 dataScans.get 方法

查看历史发现扫描结果

如需查看历史发现扫描结果,请选择以下选项之一。

控制台

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 在导航菜单中,依次点击治理 > 目录管理

  3. Cloud Storage 发现窗格中,点击要查看其详情的发现扫描。

  4. 点击扫描记录窗格。扫描历史记录窗格提供有关过往作业的相关信息,包括每个作业扫描的记录数、每个作业的状态以及作业的运行时间。

  5. 如需查看作业的详细信息,请在作业 ID 列中点击相应作业。

gcloud

gcloud dataplex datascans jobs list \
    --location=LOCATION \
    --datascan=DATASCAN

替换以下内容:

  • LOCATION:创建发现扫描的 Google Cloud 区域。
  • DATASCAN:作业所属的发现扫描的名称。

REST

如需查看发现扫描的所有作业,请使用 Dataplex API 中的 dataScans.job/list 方法

更新发现扫描

如需更改发现扫描的时间表(例如,将时间表从按需更改为定期),您需要更新发现扫描。

控制台

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 在导航菜单中,依次点击治理 > 目录管理

  3. Cloud Storage 发现窗格中,针对要更新的发现扫描,依次点击操作 > 修改

  4. 修改值。

  5. 点击保存

gcloud

gcloud alpha dataplex datascans update data-discovery SCAN_ID --location=LOCATION

替换以下内容:

  • SCAN_ID:您要更新的发现扫描的 ID
  • LOCATION:要更新的发现扫描的位置

REST

如需更新发现扫描,请使用 Dataplex API 中的 dataScans.patch 方法

删除发现扫描

如需删除发现扫描,请选择以下选项之一。

控制台

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 在导航菜单中,依次点击治理 > 目录管理

  3. Cloud Storage 发现窗格中,针对要删除的发现扫描,依次点击操作 > 删除

  4. 点击删除

gcloud

gcloud dataplex datascans delete SCAN_ID --location=LOCATION --async

替换以下内容:

  • SCAN_ID:要删除的发现扫描的 ID。
  • LOCATION:要删除的发现扫描的位置。

REST

如需删除发现扫描,请使用 Dataplex API 中的 dataScans.delete 方法