发现和编目 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: dataplex.datascans.delete - 针对项目或 DataScan 资源
  • 查看不包括结果的数据扫描详细信息: dataplex.datascans.get 在投影仪上,找到数据扫描资源
  • 查看 DataScan 详细信息(包括结果): dataplex.datascans.getData 在项目或 DataScan 资源上
  • 列出 DataScan: dataplex.datascans.list - 针对项目或 DataScan 资源
  • 运行 DataScan: dataplex.datascans.run对您的项目或 DataScan 资源执行此操作
  • 更新 DataScan 的说明: dataplex.datascans.update 在投影仪上创建 DataScan 资源
  • 查看 DataScan 的 IAM 权限: dataplex.datascans.getIamPolicy对您的项目或 DataScan 资源的权限
  • 为 DataScan 设置 IAM 权限: dataplex.datascans.setIamPolicy对项目或 DataScan 资源设置 IAM 权限

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

创建发现扫描

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

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

控制台

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

    转到 BigQuery

  2. 浏览器中,点击 添加

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

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

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

      • Include:如果只应扫描数据的一部分,请提供与要包含的对象匹配的 glob 模式列表。
      • 排除:提供与要排除的对象匹配的 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. 配置完数据发现扫描后,点击创建(对于定期扫描)或立即运行(对于按需扫描)。

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

    按需扫描会在您创建时首次运行一次,之后您可以随时运行扫描。扫描可能需要几分钟时间才能运行完毕。

REST

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

监控发现扫描

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

控制台

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

    转到日志浏览器

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

  3. 点击资源菜单。

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

  5. 点击日志名称菜单。

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

  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. 点击运行查询

REST

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

查询已发布的 BigLake 表

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

使用 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 表。每次运行预定的或按需的数据扫描时,发现扫描都会处理新数据发现、架构推理和架构演变。

更新已发布的 BigLake 表

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

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

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

    转到 BigQuery

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

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

  4. 详细信息窗格中的标签部分,确保元数据管理模式设置为 user_managed。如果已将其设置为其他值,请按以下步骤操作:

    1. 点击 修改详细信息

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

更新架构的表可供 SQL 和 Spark 查询使用。运行下一次发现扫描时,表元数据将保持不变。

删除已发布的 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 方法

列出发现扫描

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

更新发现扫描

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

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

删除发现扫描

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