arrow_back

使用 Cloud Run functions 加载 BigQuery

登录 加入
访问 700 多个实验和课程

使用 Cloud Run functions 加载 BigQuery

实验 45 分钟 universal_currency_alt 5 个积分 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
访问 700 多个实验和课程

概览

Cloud Run 函数是为了响应事件(如 HTTP 请求、通讯服务消息或文件上传)而运行的代码段。云端事件是指在云端环境中发生的事件,这些事件可能包括更改数据库中的数据,将文件添加到存储系统,或正在创建新的虚拟机实例等。

Cloud Run 函数由事件驱动,因而在事件发生时才会运行。这类函数非常适合执行需要快速完成或不需要一直运行的任务。

本实操实验将向您介绍如何使用 Google Cloud SDK 创建、部署和测试将会加载 BigQuery 表的 Cloud Run 函数。

您将执行的操作

  • 创建 Cloud Run 函数
  • 部署和测试该 Cloud Run 函数
  • 查看 BigQuery 中的数据和 Cloud Run 函数日志

设置和要求

对于每个实验,您都会免费获得一个新的 Google Cloud 项目及一组资源,它们都有固定的使用时限。

  1. 点击开始实验按钮。如果该实验需要付费,系统会打开一个弹出式窗口供您选择付款方式。左侧是实验详细信息面板,其中包含以下各项:

    • 打开 Google Cloud 控制台按钮
    • 剩余时间
    • 进行该实验时必须使用的临时凭据
    • 帮助您逐步完成本实验所需的其他信息(如果需要)
  2. 点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。

    该实验会启动资源并打开另一个标签页,显示登录页面。

    提示:将这些标签页安排在不同的窗口中,并排显示。

    注意:如果您看见选择账号对话框,请点击使用其他账号
  3. 如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。

    {{{user_0.username | "<用户名>"}}}

    您也可以在实验详细信息面板中找到用户名

  4. 点击下一步

  5. 复制下面的密码,然后将其粘贴到欢迎对话框中。

    {{{user_0.password | "<密码>"}}}

    您也可以在实验详细信息面板中找到密码

  6. 点击下一步

    重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。 注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
  7. 继续在后续页面中点击以完成相应操作:

    • 接受条款及条件。
    • 由于这是临时账号,请勿添加账号恢复选项或双重验证。
    • 请勿注册免费试用。

片刻之后,系统会在此标签页中打开 Google Cloud 控制台。

注意:如需查看列有 Google Cloud 产品和服务的菜单,请点击左上角的导航菜单,或在搜索字段中输入服务或产品的名称。 “导航菜单”图标

激活 Google Cloud Shell

Google Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。

Google Cloud Shell 提供了可用于访问您的 Google Cloud 资源的命令行工具。

  1. 在 Cloud 控制台右上角的工具栏中,点击“打开 Cloud Shell”按钮。

    突出显示的 Cloud Shell 图标

  2. 点击继续

预配并连接到环境需要一些时间。如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 PROJECT_ID。例如:

在 Cloud Shell 终端中突出显示的项目 ID

gcloud 是 Google Cloud 的命令行工具。它会预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。

  • 您可以通过以下命令列出有效的账号名称:
gcloud auth list

输出:

Credentialed accounts: - @.com (active)

输出示例

Credentialed accounts: - google1623327_student@qwiklabs.net
  • 您可以通过以下命令列出项目 ID:
gcloud config list project

输出:

[core] project =

输出示例

[core] project = qwiklabs-gcp-44776a13dea667a6 注意:有关 gcloud 的完整文档,请参阅 gcloud CLI 概览指南

任务 1. 启用 API

在此任务中,您需要先启用相关 API,然后再创建 Cloud Run 函数。

  1. 在 Cloud Shell 中运行以下命令,以设置项目 ID 变量:
export PROJECT_ID=$(gcloud config get-value project)
  1. 运行以下命令来设置区域变量:
export REGION={{{project_0.default_region | "REGION"}}} gcloud config set compute/region $REGION
  1. 运行以下命令来设置配置变量:
gcloud config set run/region $REGION gcloud config set run/platform managed gcloud config set eventarc/location $REGION
  1. 运行以下命令来启用所有必要的服务:
gcloud services enable \ artifactregistry.googleapis.com \ cloudfunctions.googleapis.com \ cloudbuild.googleapis.com \ eventarc.googleapis.com \ run.googleapis.com \ logging.googleapis.com \ pubsub.googleapis.com 注意:对于 Eventarc,可能需要几分钟才能将所有权限传播到服务代理

任务 2. 设置所需权限

在此任务中,您将向默认 Compute Engine 服务账号授予接收 Eventarc 事件的权限,并向 Cloud Storage 服务代理授予向 Pub/Sub 主题发布消息的权限,从而启用事件驱动型工作流和存储触发的操作。

  1. 在 Cloud Shell 中运行以下命令,以设置 PROJECT_NUMBER 变量:
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
  1. 运行以下命令,为项目内的默认 Compute Engine 服务账号授予接收 Eventarc 事件的必要权限:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/eventarc.eventReceiver"
  1. 运行以下命令,以检索项目的 Cloud Storage 服务代理,并向其授予将消息发布到 Pub/Sub 主题的权限:
SERVICE_ACCOUNT="$(gcloud storage service-agent --project=$PROJECT_ID)" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:${SERVICE_ACCOUNT}" \ --role='roles/pubsub.publisher'

任务 3. 创建函数

在此任务中,您将创建一个名为 loadBigQueryFromAvro 的简单函数。该函数会读取上传到 Cloud Storage 的 Avro 文件,然后在 BigQuery 中创建并加载表。

  1. 在 Cloud Shell 中运行以下命令,创建并打开名为 index.js 的文件:
nano index.js
  1. 将以下 Cloud Functions 函数代码复制到 index.js 文件中:
/** * index.js Cloud Function - Avro on GCS to BQ */ const {Storage} = require('@google-cloud/storage'); const {BigQuery} = require('@google-cloud/bigquery'); const storage = new Storage(); const bigquery = new BigQuery(); exports.loadBigQueryFromAvro = async (event, context) => { try { // Check for valid event data and extract bucket name if (!event || !event.bucket) { throw new Error('Invalid event data. Missing bucket information.'); } const bucketName = event.bucket; const fileName = event.name; // BigQuery configuration const datasetId = 'loadavro'; const tableId = fileName.replace('.avro', ''); const options = { sourceFormat: 'AVRO', autodetect: true, createDisposition: 'CREATE_IF_NEEDED', writeDisposition: 'WRITE_TRUNCATE', }; // Load job configuration const loadJob = bigquery .dataset(datasetId) .table(tableId) .load(storage.bucket(bucketName).file(fileName), options); await loadJob; console.log(`Job ${loadJob.id} completed. Created table ${tableId}.`); } catch (error) { console.error('Error loading data into BigQuery:', error); throw error; } };
  1. 在 nano 中,按 (Ctrl+x),然后按 (Y),再按 Enter 保存文件。
创建函数。

任务 4. 创建 Cloud Storage 存储桶和 BigQuery 数据集

在此任务中,您将设置后台基础设施来存储用于调用 Cloud Run 函数的资产(Cloud Storage 存储桶),并在完成后将输出存储在 BigQuery 中。

  1. 在 Cloud Shell 中运行以下命令,创建一个新的 Cloud Storage 存储桶作为暂存位置:
gcloud storage buckets create gs://$PROJECT_ID --location=$REGION
  1. 运行以下命令,创建 BQ 数据集以存储数据:
bq mk -d loadavro 创建 Cloud Storage 存储桶和 BigQuery 数据集。

任务 5. 部署函数

在此任务中,您将部署新的 Cloud Run 函数并触发该函数,以便将数据加载到 BigQuery 中。

  1. 在 Cloud Shell 中运行以下命令,安装两个 JavaScript 库,以便从 Cloud Storage 读取数据并将输出存储在 BigQuery 中:
npm install @google-cloud/storage @google-cloud/bigquery
  1. 运行以下命令以部署函数:
gcloud functions deploy loadBigQueryFromAvro \ --gen2 \ --runtime nodejs20 \ --source . \ --region $REGION \ --trigger-resource gs://$PROJECT_ID \ --trigger-event google.storage.object.finalize \ --memory=512Mi \ --timeout=540s \ --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com 注意:如果您看到与 Eventarc 服务代理传播相关的错误消息,请等待几分钟,然后再次尝试运行该命令。
  1. 运行以下命令以确认触发器是否已成功创建。输出将如下所示:
gcloud eventarc triggers list --location=$REGION NAME: loadbigqueryfromavro-177311 TYPE: google.cloud.storage.object.v1.finalized DESTINATION: Cloud Functions: loadBigQueryFromAvro ACTIVE: Yes LOCATION: europe-west1
  1. 运行以下命令,下载 Avro 文件。该文件将由 Cloud Run 函数处理,以便存储在 BigQuery 中:
wget https://storage.googleapis.com/cloud-training/dataengineering/lab_assets/idegc/campaigns.avro
  1. 运行以下命令,将 Avro 文件移动到之前创建的用于暂存的 Cloud Storage 存储桶中。此操作将触发 Cloud Run 函数:
gcloud storage cp campaigns.avro gs://{{{project_0.project_id |PROJECT_ID}}} 部署函数。

任务 6. 确认数据已加载到 BigQuery 中

在此任务中,您将使用 bq 命令查询 loadavro.campaigns 表,确认由 Cloud Run 函数处理的数据已成功加载到 BigQuery 中

  1. 在 Cloud Shell 中运行以下命令,使用 bq 命令查看 BigQuery 新表中的数据:
bq query \ --use_legacy_sql=false \ 'SELECT * FROM `loadavro.campaigns`;' 注意:Cloud Run 函数通常很快就会运行完毕,但针对 BigQuery 运行的查询有可能不会返回结果。如果发生这种情况,请稍等片刻,然后再次运行查询。

查询应该会返回类似下面这样的结果:

输出示例:

+------------+--------+---------------------+--------+---------------------+----------+-----+ | created_at | period | campaign_name | amount | advertising_channel | bid_type | id | +------------+--------+---------------------+--------+---------------------+----------+-----+ | 2020-09-17 | 90 | NA - Video - Other | 41 | Video | CPC | 81 | | 2021-01-19 | 30 | NA - Video - Promo | 325 | Video | CPC | 137 | | 2021-06-28 | 30 | NA - Video - Promo | 78 | Video | CPC | 214 | | 2021-03-15 | 30 | EU - Search - Brand | 465 | Search | CPC | 170 | | 2022-01-01 | 30 | EU - Search - Brand | 83 | Search | CPC | 276 | | 2020-02-18 | 30 | EU - Search - Brand | 30 | Search | CPC | 25 | | 2021-06-08 | 30 | EU - Search - Brand | 172 | Search | CPC | 201 | | 2020-11-29 | 60 | EU - Search - Other | 83 | Search | CPC | 115 | | 2021-09-11 | 30 | EU - Search - Other | 86 | Search | CPC | 237 | | 2022-02-17 | 30 | EU - Search - Other | 64 | Search | CPC | 296 | +------------+--------+---------------------+--------+---------------------+----------+-----+

任务 7. 查看日志

在此任务中,您将检索与名为 loadBigQueryFromAvro 的服务关联的所有日志条目。

  1. 在 Cloud Shell 中运行以下命令,检查您的 Cloud Run 函数的日志:
gcloud logging read "resource.labels.service_name=loadBigQueryFromAvro"

日志中的消息类似于如下内容:

resource: labels: configuration_name: loadbigqueryfromavro location: europe-west1 project_id: qwiklabs-gcp-04-16fde64676e4 revision_name: loadbigqueryfromavro-00001-wim service_name: loadbigqueryfromavro type: cloud_run_revision spanId: '5804952652695382607' textPayload: | Job undefined completed. Created table campaigns. timestamp: '2025-03-10T17:24:43.560594Z'

恭喜!

您已使用 Google Cloud SDK 创建、部署和测试了用于创建并加载 BigQuery 表的 Cloud Run 函数。

版权所有 2025 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名称和产品名称可能是其各自相关公司的商标。

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

使用无痕浏览模式

  1. 复制系统为实验提供的用户名密码
  2. 在无痕浏览模式下,点击打开控制台

登录控制台

  1. 使用您的实验凭证登录。使用其他凭证可能会导致错误或产生费用。
  2. 接受条款,并跳过恢复资源页面
  3. 除非您已完成此实验或想要重新开始,否则请勿点击结束实验,因为点击后系统会清除您的工作并移除该项目

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

请使用无痕模式或无痕式浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。