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

无边界 Lakehouse 托管通过 Apache Iceberg REST Catalog 提供的优质公共数据集,并作为 Google Cloud 公共数据集计划的一部分向公众提供这些数据集。

这些数据集可供您以只读方式访问,您可以使用 Apache Spark、Trino、Flink 或 BigQuery 访问这些数据集并将其集成到您的应用中。Google 会支付这些数据集的存储费用,并通过 Lakehouse 提供对数据的公开访问权限。您只需为对数据执行的查询付费。

这些公共数据集旨在降低 Iceberg 的入门门槛。您无需管理基础架构即可学习 Iceberg,只需连接即可。 您可以使用这些数据集来:

  • 使用 BigQuery(通过 Lakehouse)直接使用 SQL 查询这些表,并将其与您的私有数据相结合。
  • 针对实时 REST 目录测试您的 OSS 引擎(例如 Spark、Trino 或 Flink)配置。

准备工作

  1. 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

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

  3. 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 相关的文章的每月 Wikipedia 浏览次数:

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 出租车数据集可在 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,并回溯查看数据集随时间增长的情况。

如需了解详情,请参阅将 Iceberg REST 目录与 Cloud Storage 搭配使用。

可用的数据集

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 中列出的前 40 万个代码库中 HEAD 处文件的抽样文件元数据。
sample_repos 按星标数排名的前 40 万个 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 用于分类任务的人口普查成人收入数据集,可预测收入是否超过每年 5 万美元。
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 命名空间包含维基媒体网页浏览统计数据和 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 与演员相关的维基百科文章的网页浏览次数。
table_alumni 有关校友的文章的 Wikipedia 网页浏览次数。
table_artists 与音乐人相关的文章的 Wikipedia 网页浏览次数。
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) 行程记录数据。

后续步骤