无边界湖仓一体公开数据集

Borderless Lakehouse 允许您查询通过 Apache Iceberg REST 目录端点提供的只读公共数据集,这些数据集是 Google Cloud 公共数据集计划的一部分。您可以连接 BigQuery、Managed Service for Apache Spark、Trino 或 Apache Flink,将这些表与您的私有数据合并,或针对实时 Apache Iceberg REST 目录端点测试开源引擎配置,而无需管理存储基础架构。

Google 会支付这些数据集的存储费用,并通过 Lakehouse 提供对数据的公开访问权限。您只需为对数据运行的查询付费。

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud新手,请 创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Lakehouse API, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Lakehouse API, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

在连接到 Apache Spark 之前,您必须满足以下条件:

公共数据集位置

每个公共数据集都存储在一个特定位置,例如 US 或 EU。Lakehouse 公共数据集存储在 US 多区域位置。查询公共数据集时,请确保您的处理位置与数据集位置兼容。

使用 Apache Spark 访问公共数据集

由于 Lakehouse 公共数据集是通过 Iceberg REST Catalog 提供的,因此您可以从 Apache Spark 和其他兼容引擎访问这些数据集。您可以使用任何标准 Spark 环境(例如本地、Managed Service for Apache Spark 或其他云供应商)连接到公共数据集。

连接到 Apache Spark

启动 Spark SQL 会话时,请使用以下配置标志。 这些标志会配置一个名为 lakehouse-sample 的目录,该目录指向公共 REST 端点:

spark-sql \
  --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.10.0,org.apache.iceberg:iceberg-gcp-bundle:1.10.0 \
  --conf spark.hadoop.hive.cli.print.header=true \
  --conf spark.sql.catalog.bqms=org.apache.iceberg.spark.SparkCatalog \
  --conf spark.sql.catalog.bqms.type=rest \
  --conf spark.sql.catalog.bqms.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog \
  --conf spark.sql.catalog.bqms.warehouse=gs://CATALOG_NAME \
  --conf spark.sql.catalog.bqms.header.x-goog-user-project=PROJECT_ID \
  --conf spark.sql.catalog.bqms.rest.auth.type=google \
  --conf spark.sql.catalog.bqms.io-impl=org.apache.iceberg.gcp.gcs.GCSFileIO \
  --conf spark.sql.catalog.bqms.header.X-Iceberg-Access-Delegation=vended-credentials \
  --conf spark.sql.defaultCatalog=lakehouse-sample

替换以下内容:

  • CATALOG_NAME:公共数据集目录名称,例如 lakehouse-public-data 或 biglake-public-nyc-taxi-iceberg。
  • PROJECT_ID:您的 Google Cloud 项目 ID。

使用 PySpark 和 Managed Service for Apache Spark 进行连接

您还可以在 Managed Service for Apache Spark 中使用托管式无服务器 Spark 笔记本查询表,而无需创建或管理集群:

from google.cloud.dataproc_v1 import Session
from google.cloud.dataproc_spark_connect import DataprocSparkSession

PROJECT_ID = "PROJECT_ID"
spark_catalog = "CATALOG_NAME"

session = Session()
session.runtime_config.properties = {
  "spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",
  f"spark.sql.catalog.{spark_catalog}": "org.apache.iceberg.spark.SparkCatalog",
  f"spark.sql.catalog.{spark_catalog}.type": "rest",
  f"spark.sql.catalog.{spark_catalog}.uri": "https://biglake.googleapis.com/iceberg/v1/restcatalog",
  f"spark.sql.catalog.{spark_catalog}.rest.auth.type": "org.apache.iceberg.gcp.auth.GoogleAuthManager",
  f"spark.sql.catalog.{spark_catalog}.io-impl": "org.apache.iceberg.gcp.gcs.GCSFileIO",
  f"spark.sql.catalog.{spark_catalog}.header.X-Iceberg-Access-Delegation": "vended-credentials",
  f"spark.sql.catalog.{spark_catalog}.warehouse": f"gs://{spark_catalog}",
  f"spark.sql.catalog.{spark_catalog}.header.x-goog-user-project": PROJECT_ID,
}

spark = (
   DataprocSparkSession.builder
     .appName("Lakehouse Public Data Demo")
     .dataprocSessionConfig(session)
     .getOrCreate()
)
spark.conf.set("spark.sql.defaultCatalog", spark_catalog)

替换以下内容:

  • PROJECT_ID:您的 Google Cloud 项目 ID。
  • CATALOG_NAME:公共数据集目录名称,例如 lakehouse-public-data 或 biglake-public-nyc-taxi-iceberg。

示例查询

连接后,您便拥有对数据集的完整 SQL 访问权限。

查询维基百科页面浏览量和 GitHub 提交

在 PySpark 会话中连接到 lakehouse-public-data 目录后,您可以查询 BigQuery 相关文章的每月维基百科浏览量:

df1 = spark.sql("""
SELECT
  title,
  wiki,
  SUM(views) AS total_views
FROM wikipedia.pageviews_2026
WHERE datehour >= TIMESTAMP '2026-01-01 00:00:00'
  AND datehour <  TIMESTAMP '2026-02-01 00:00:00'
  AND LOWER(title) LIKE '%bigquery%'
GROUP BY title, wiki
ORDER BY total_views DESC
LIMIT 20
""")
df1.show(10)

您还可以检索引用 Iceberg 的近期 GitHub 提交:

df2 = spark.sql("""
SELECT
  commits.commit,
  commits.subject,
  commits.message,
  commits.author.name AS author_name,
  timestamp_seconds(commits.committer.date.seconds) AS commit_time,
  repo_name
FROM github_repos.commits AS commits
WHERE LOWER(commits.subject) LIKE '%iceberg%'
   OR LOWER(commits.message) LIKE '%iceberg%'
ORDER BY commit_time DESC
LIMIT 50
""")
df2.show(10)

查询纽约市出租车数据集

NYC Taxi 数据集可在 biglake-public-nyc-taxi-iceberg 目录中找到,该数据集被建模为 Iceberg 表,用于演示分区和元数据功能。

以下查询会汇总数百万条记录,以按乘客人数查找平均车费和行程距离。它演示了 Iceberg 如何通过分区修剪高效扫描数据文件,而无需列出目录:

SELECT
    passenger_count,
    COUNT(1) AS num_trips,
    ROUND(AVG(total_amount), 2) AS avg_fare,
    ROUND(AVG(trip_distance), 2) AS avg_distance
FROM
    lakehouse-sample.public_data.nyc_taxicab
WHERE
    data_file_year = 2021
    AND passenger_count > 0
GROUP BY
    passenger_count
ORDER BY
    num_trips DESC;

Iceberg 最强大的功能之一是时间旅行。您可以查询过去某个特定时间点的表。通过以下查询,您可以比较当前版本与特定快照的行数,从而审核更改:

-- Compare the row count of the current version vs. a specific snapshot
SELECT
    'Current State' AS version,
    COUNT(*) AS count
FROM lakehouse-sample.public_data.nyc_taxicab
UNION ALL
SELECT
    'Past State' AS version,
    COUNT(*) AS count
FROM lakehouse-sample.public_data.nyc_taxicab VERSION AS OF 2943559336503196801Q;

通过查询历史记录元数据表(例如 SELECT * FROM lakehouse-sample.public_data.nyc_taxicab.history),您可以找到快照 ID 并回溯查看数据集随时间推移的增长情况。

如需了解详情,请参阅使用 Lakehouse 查询 Apache Iceberg 表。

可用数据集

Lakehouse 提供了公共数据集和示例表,您可以在两个公共目录(lakehouse-public-data 和 biglake-public-nyc-taxi-iceberg)中以 Apache Iceberg 表的形式查询这些数据集和表。

lakehouse-public-data 个目录

lakehouse-public-data 目录 (gs://lakehouse-public-data) 包含以下 Apache Iceberg 格式的命名空间和表。

austin_bikeshare

austin_bikeshare 命名空间包含以下表:

名称 说明
bikeshare_trips 奥斯汀共享单车行程记录,包括行程时长、开始和结束时间戳以及车站详情。

bls

bls 命名空间包含美国劳工统计局提供的经济统计信息:

名称 说明
cpi_u 所有城市居民消费价格指数 (CPI-U) 系列数据。
unemployment_cps 当前人口调查 (CPS) 失业统计数据。

census_bureau_acs

census_bureau_acs 命名空间包含以下表:

名称 说明
state_2020_5yr 美国人口普查局美国社区调查 (ACS) 2020 年 5 年期州级估算值。

chicago_taxi_trips

chicago_taxi_trips 命名空间包含以下表:

名称 说明
taxi_trips 芝加哥出租车行程记录,包括行程时间戳、距离、车费以及上车和下车地点。

crypto_ethereum

crypto_ethereum 命名空间包含以下表:

名称 说明
transactions 以太坊区块链交易记录,包括发送方和接收方地址、价值和 gas 指标。

ga4_obfuscated_sample_ecommerce

ga4_obfuscated_sample_ecommerce 命名空间包含以下表:

名称 说明
events_20210131 2021 年 1 月 31 日模拟网站电子商务实现的经过混淆处理的 Google Analytics 4 事件数据。

geo_openstreetmap

geo_openstreetmap 命名空间包含以下表:

名称 说明
planet_features OpenStreetMap 全球地貌,包括特征类型、标签和几何图形。

geo_us_boundaries

geo_us_boundaries 命名空间包含以下表:

名称 说明
zip_codes 美国邮政编码边界,包括城市、县、州 FIPS 代码和地理几何图形。

github_repos

github_repos 命名空间包含来自 GitHub 上具有开源许可的公共代码库的数据:

名称 说明
commits GitHub 上开源代码库中的唯一 Git 提交,按代码库分组。
contents HEAD 分支上大小不超过 1 MiB 的文本文件的唯一文件内容。
languages GitHub API 报告的按代码库划分的编程语言。
licenses 每个代码库的开源许可 SPDX 代码。
sample_commits commits 表中的提交示例。
sample_contents 从 contents 表中随机抽样的 10% 文本文件内容子集。
sample_files sample_repos 中列出的前 400,000 个代码库中 HEAD 处文件的采样文件元数据。
sample_repos 按星标数量排名前 400,000 的 GitHub 代码库。

google_trends 命名空间包含以下表:

名称 说明
top_terms 美国每日排名前 25 的搜索字词,以及它们的得分、排名、时间和特定媒体市场区域 (DMA)。

imdb

imdb 命名空间包含以下表:

名称 说明
title_basics IMDb 影片元数据,包括影片类型、主要和原始影片、上映年份、时长和类型。
title_ratings IMDb 用户平均评分和影片投票数。

iowa_liquor_sales

iowa_liquor_sales 命名空间包含以下表:

名称 说明
sales 自 2012 年以来,爱荷华州零售商向个人销售酒类的批发购买记录。

ml_datasets

ml_datasets 命名空间包含机器学习基准表:

名称 说明
census_adult_income 人口普查成人收入数据集,用于预测年收入是否超过 50,000 美元的分类任务。
penguins 帕尔默群岛企鹅测量数据,包括物种、岛屿、喙尺寸、鳍状肢长度和体重。
ulb_fraud_detection 2013 年 9 月欧洲持卡人的匿名信用卡交易,用于欺诈检测基准测试。

new_york_citibike

new_york_citibike 命名空间包含以下表:

名称 说明
citibike_trips 纽约市花旗单车行程记录,包括行程时长、时间戳、站点位置和骑行者受众特征。

new_york_taxi_trips

new_york_taxi_trips 命名空间包含以下表:

名称 说明
taxi_zone_geom 纽约市出租车和豪华轿车委员会 (TLC) 出租车区域 ID、名称、行政区和边界几何图形。
tlc_green_trips_2022 2022 年纽约市 TLC 绿色出租车行程记录。
tlc_yellow_trips_2022 2022 年纽约市 TLC 黄色出租车行程记录。

noaa_gsod

noaa_gsod 命名空间包含来自美国国家海洋和大气管理局 (NOAA) 的全球每日地面总结 (GSOD) 天气数据:

名称 说明
gsod2023 2023 年每日全球地表天气摘要观测数据。
stations NOAA 气象站元数据,包括气象站标识符、名称、国家/地区、州和坐标。

sec_quarterly_financials

sec_quarterly_financials 命名空间包含以下表:

名称 说明
numbers 从美国证券交易委员会 (SEC) 季度申报文件中提取的数字财务报表数据。

stackoverflow

stackoverflow 命名空间包含以下表:

名称 说明
posts_answers Stack Overflow 回答帖子,包括正文、分数、创建日期和作者详细信息。
posts_questions Stack Overflow 问题帖子,包括标题、正文、标签、浏览量和采纳的答案 ID。
users Stack Overflow 用户画像,包括显示名称、声誉值、创建日期和徽章数量。

tpc_ds_1g

tpc_ds_1g 命名空间包含 TPC-DS 1 GB 基准表:

名称 说明
date_dim TPC-DS 日期维度表,用于将日历日期映射到会计期间、季度和节假日。
store_sales TPC-DS 实体店销售事实表,用于记录零售店交易。

wikipedia

wikipedia 命名空间包含 Wikimedia 网页浏览量统计信息和 Wikidata 实体:

名称 说明
pageviews_2015 2015 年每小时维基百科网页浏览量,按日期分区。
pageviews_2016 2016 年每小时维基百科网页浏览量,按日期分区。
pageviews_2017 2017 年维基百科每小时网页浏览量统计信息,按日期分区。
pageviews_2018 2018 年每小时维基百科网页浏览量,按日期分区。
pageviews_2019 2019 年每小时维基百科网页浏览量,按日期分区。
pageviews_2020 2020 年每小时维基百科网页浏览量,按日期分区。
pageviews_2021 2021 年维基百科网页浏览量(按小时统计),按日期分区。
pageviews_2022 2022 年维基百科每小时网页浏览量,按日期分区。
pageviews_2023 2023 年维基百科每小时网页浏览量,按日期分区。
pageviews_2024 2024 年维基百科每小时网页浏览量统计,按日期分区。
pageviews_2025 2025 年维基百科每小时网页浏览量统计数据,按日期分区。
pageviews_2026 2026 年每小时维基百科网页浏览量统计信息,按日期分区。
table_activists 有关活动家的文章的维基百科页面浏览量。
table_actors 关于演员的文章的 Wikipedia 网页浏览量。
table_alumni 校友相关文章的维基百科页面浏览量。
table_artists 关于音乐人的维基百科文章的页面浏览量。
table_athlete 运动员相关文章的维基百科页面浏览量。
table_bands 维基百科上有关乐队的文章的网页浏览量。
table_born 按出生年份分类的文章的维基百科页面浏览量。
table_businesspeople 有关商界人士的文章的维基百科页面浏览量。
table_comedians 维基百科上有关喜剧演员的文章的页面浏览量。
table_composers 维基百科上关于作曲家的文章的页面浏览量。
table_inventors 有关发明家的维基百科文章的页面浏览量。
table_politicians 政治人物相关文章的维基百科页面浏览量。
table_scientists 有关科学家的维基百科文章的页面浏览量。
table_singers 歌手相关维基百科文章的页面浏览量。
table_writers 作家相关维基百科文章的页面浏览量。
wikidata 结构化 Wikidata 知识库实体,包括多语言标签、说明、站内链接和声明。

world_bank_health_population

world_bank_health_population 命名空间包含世界银行健康、营养和人口统计数据:

名称 说明
country_series_definitions 将国家/地区代码和指标系列代码关联起来的定义和元数据。
country_summary 国家/地区元数据,包括简称和全称、ISO 代码、货币单位和区域。
health_nutrition_population 按国家/地区划分的年度健康、营养和人口指标值。
series_summary 健康和人口指标的元数据,包括定义、度量单位和周期。
series_times 按指标序列代码和年份划分的时序元数据和说明。

world_bank_wdi

world_bank_wdi 命名空间包含世界银行世界发展指标 (WDI) 数据:

名称 说明
country_summary 国家/地区元数据,包括简称和全称、ISO 代码、货币单位和收入组。
indicators_data 按国家/地区和指标代码划分的年度世界发展指标值。
series_summary 世界发展指标系列的定义、主题和计量单位。

biglake-public-nyc-taxi-iceberg 个目录

biglake-public-nyc-taxi-iceberg 目录 (gs://biglake-public-nyc-taxi-iceberg) 在 public_data 命名空间中包含以下 Apache Iceberg 格式的表:

名称 说明
nyc_taxicab 纽约市出租车和豪华轿车委员会 (TLC) 行程记录数据。
nyc_taxicab_2021 2021 年纽约市出租车和豪华轿车委员会 (TLC) 行程记录数据。

后续步骤