发现和编目 Cloud Storage 数据

本文档介绍如何使用自动发现 Cloud Storage 数据。

Dataplex 自动发现是 BigQuery 的一项功能,可让您扫描 Cloud Storage 存储桶中的数据,以提取元数据并将其编入目录。在扫描过程中,自动发现功能会为结构化数据创建 BigLake 或外部表,并为非结构化数据创建对象表,然后您可以将这些表用于分析和 AI 处理。这些表会自动编入 Dataplex Catalog 目录,您可以搜索或浏览该目录。

如需自动发现 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 表都将自动提取到 Dataplex Catalog 中,以便进行搜索和发现。

准备工作

确保您拥有必要的 Identity and Access Management (IAM) 权限,以便执行本文档中的任务。

服务账号所需的角色

在开始之前,请向项目中的 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.connections.use

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

最终用户所需的角色

为确保您拥有使用 DataScan API 所需的权限,请让您的管理员为您授予以下 IAM 角色:

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

这些预定义角色包含使用 DataScan API 所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需使用 DataScan API,需要以下权限:

  • 创建 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

您的管理员也可以使用自定义角色或其他预定义角色向您授予这些权限。

创建发现扫描

如需发现数据,您必须创建并运行发现扫描。您可以为扫描设置时间表,也可以按需运行扫描。如需创建和运行发现扫描,您必须拥有 dataplex.datascans.create 权限。

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

控制台

  1. 在 Google Cloud 控制台中,转到 BigQuery 页面。

    转到 BigQuery

  2. 探索器中,点击 添加

  3. 热门数据源部分的添加窗格中,点击自动根据 GCS 中的数据源创建外部表和 BigLake 表

  4. 来源部分的创建表格窗格中,配置要扫描的数据的以下详细信息:

    1. 为扫描任务输入一个名称。
    2. 扫描 ID 字段中,输入一个遵循资源命名规范的唯一 ID。如果您未提供 ID,则发现扫描会生成扫描 ID。
    3. 可选:提供扫描的说明。
    4. 如需指定包含要扫描的文件的 Cloud Storage 存储桶,请在存储桶字段中浏览并选择相应存储桶。
    5. 可选:通过提供 glob 模式列表,定义要从发现扫描中包含或排除的数据。

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

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

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

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

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

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

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

    • 按需:扫描按需运行。

  6. 可选:在 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 作为默认值。
  7. 完成数据发现扫描的配置后,点击创建(对于定期扫描)或立即运行(对于按需扫描)。

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

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

gcloud

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

替换以下内容:

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

REST

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

监控发现扫描

如需监控发现扫描的结果,您可以查询扫描运行时创建的日志。

控制台

  1. 在 Google Cloud 控制台中,转到日志浏览器页面。

    转到日志浏览器

  2. Logs Explorer 视图中,找到查询标签页。

  3. 点击资源菜单。

  4. 选择 Cloud Dataplex DataScan。点击应用

  5. 点击日志名称菜单。

  6. 搜索日志名称字段中,输入 dataplex.googleapis.com%2Fdata_scan。选择 data_scan,然后点击应用

  7. 可选:在日志查询中添加以下过滤条件,将日志过滤到特定数据扫描 ID 或位置:

    resource.type="dataplex.googleapis.com/DataScan"
    AND resource.labels.resource_container="projects/PROJECT_ID"
    AND resource.labels.datascan_id="DATA_SCAN_ID"
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目 ID
    • DATA_SCAN_ID:DataScan ID
  8. 点击运行查询

gcloud

gcloud alpha dataplex datascans describe test-datascan --project=PROJECT_ID --location=LOCATION

替换以下内容:

  • PROJECT_ID:您的 Google Cloud 项目 ID
  • LOCATION:要监控的发现扫描的位置

REST

如需监控发现扫描,请使用 dataScans.get 方法

查询已发布的 BigLake 表

运行发现扫描后,BigLake 表会发布到 BigQuery 中的一个新数据集中,并可在 BigQuery 中使用 SQL 进行分析,或在 Dataproc 中使用 Apache Spark 或 Dataproc 或 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 标签设置为 user_managed,否则发现扫描会管理已发布的 BigLake 表。每次运行预定或按需 DataScan 时,发现扫描都会处理新数据发现、架构推断和架构演变。

更新已发布的 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 字段中,输入一个不是 user_managed 的值。

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

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

按需运行发现扫描

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

列出发现扫描

gcloud

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

替换以下内容:

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

REST

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

更新发现扫描

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

gcloud

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

替换以下内容:

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

REST

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

删除发现扫描

gcloud

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

替换以下内容:

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

REST

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

价格

在预览版中,自动发现扫描功能免费提供。此价格在正式版发布后可能会发生变化。正式版发布后,价格将按照此处所述的新定价模式进行。