查询由 R2 Data Catalog 管理的 Apache Iceberg ↗ 表。可通过 Wrangler 或 HTTP API 进行 R2 SQL 查询。
要使用 R2 SQL 查询数据,您需要关联至您的 catalog 的数据仓库名称。要检索它,您可以运行 r2 bucket catalog get 命令:
npx wrangler r2 bucket catalog get <BUCKET_NAME>或者,您可以在仪表板中找到它:转到 R2 object storage(R2 对象存储) 页面,选择存储桶,切换到 Settings(设置) 选项卡,滚动到 R2 Data Catalog,并找到 Warehouse name(仓库名称)。
首先,安装 npm ↗。然后 安装 Developer Platform CLI:Wrangler。
Wrangler 需要具有访问 R2 Data Catalog、R2 storage 和 R2 SQL 权限的 API 令牌来执行查询。r2 sql query 命令会在 WRANGLER_R2_SQL_AUTH_TOKEN 环境变量中查找该令牌。
设置您的环境:
export WRANGLER_R2_SQL_AUTH_TOKEN=YOUR_API_TOKEN或者创建一个包含以下内容的 .env 文件:
WRANGLER_R2_SQL_AUTH_TOKEN=YOUR_API_TOKEN其中 YOUR_API_TOKEN 是您使用所需权限创建的令牌。有关设置环境变量的更多信息,请参阅 Wrangler system environment variables。
要运行 SQL 查询,请运行 r2 sql query 命令:
npx wrangler r2 sql query <WAREHOUSE> "SELECT * FROM namespace.table_name limit 10;"有关受支持的 SQL 命令的完整列表,请参阅 R2 SQL reference。
以下是使用 REST 端点通过 R2 SQL 查询的示例:
curl -X POST \
"https://api.sql.cloudflarestorage.com/api/v1/accounts/{ACCOUNT_ID}/r2-sql/query/{BUCKET_NAME}" \
-H "Authorization: Bearer ${WRANGLER_R2_SQL_AUTH_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"query": "SELECT * FROM namespace.table_name limit 10;"
}'该 API 要求 Authorization 标头中存在具有适当权限的 API 令牌。有关创建令牌的详细信息,请参阅身份验证。
有关受支持的 SQL 命令的完整列表,请参阅 R2 SQL reference。
要使用 R2 SQL 查询数据,您必须提供具有 R2 SQL、R2 Data Catalog 和 R2 storage 权限的 Cloudflare API 令牌。R2 SQL 需要这些权限来访问目录元数据并读取存储在 R2 中的底层数据文件。
创建具有以下权限的 R2 API token:
- 访问 R2 Data Catalog(只读)
- 访问 R2 storage(Admin read/write)
- 访问 R2 SQL(只读)
当使用 Wrangler 查询时,将该令牌值用于 WRANGLER_R2_SQL_AUTH_TOKEN 环境变量;或在使用 REST API 时用于 Authorization 标头。
要以编程方式创建供 R2 SQL 使用的 API 令牌,您需要在您的 Access Policy 中指定 R2 SQL、R2 Data Catalog 和 R2 storage 权限组。
[
{
"id": "f267e341f3dd4697bd3b9f71dd96247f",
"effect": "allow",
"resources": {
"com.cloudflare.edge.r2.bucket.4793d734c0b8e484dfc37ec392b5fa8a_default_my-bucket": "*",
"com.cloudflare.edge.r2.bucket.4793d734c0b8e484dfc37ec392b5fa8a_eu_my-eu-bucket": "*"
},
"permission_groups": [
{
"id": "f45430d92e2b4a6cb9f94f2594c141b8",
"name": "Workers R2 SQL Read"
},
{
"id": "d229766a2f7f4d299f20eaa8c9b1fde9",
"name": "Workers R2 Data Catalog Write"
},
{
"id": "bf7481a1826f439697cb59a20b22293e",
"name": "Workers R2 Storage Write"
}
]
}
]要了解如何使用 API 创建 R2 SQL 令牌(包括所需的权限组和使用示例),请参阅通过 API 创建 API 令牌文档。