You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过服务账号JSON密钥在C++中连接GCP BigQuery并执行SQL查询

C++连接GCP BigQuery并执行SQL查询示例(VS + VCPKG环境)

前置操作

  1. 用vcpkg安装BigQuery C++ SDK:vcpkg install google-cloud-cpp-bigquery:x64-windows(根据你的开发平台调整架构参数)
  2. 确保VS项目已完成vcpkg集成(执行vcpkg integrate install后新建的项目会自动生效)
  3. 将你的服务账号.json密钥文件放在项目输出目录,或记下文件的完整路径

完整示例代码

#include <google/cloud/bigquery/client.h>
#include <google/cloud/bigquery/query_results.h>
#include <iostream>
#include <string>
#include <fstream>
#include <iterator>

int main() {
    // 方式1:通过环境变量指定密钥文件路径
    setenv("GOOGLE_APPLICATION_CREDENTIALS", "path/to/your/service-account-key.json", 1);

    // 初始化BigQuery客户端
    auto client = google::cloud::bigquery::MakeBigQueryClient();
    if (!client) {
        std::cerr << "创建BigQuery客户端失败: " << client.status() << "\n";
        return 1;
    }

    // 替换为你要执行的SQL语句
    std::string sql = R"(
        SELECT name, age FROM `your-project-id.your-dataset-id.your-table-id` LIMIT 10
    )";

    // 提交查询请求
    auto query_result = client->Query(sql);
    if (!query_result) {
        std::cerr << "查询执行失败: " << query_result.status() << "\n";
        return 1;
    }

    // 遍历并打印查询结果
    std::cout << "查询结果:\n";
    for (auto const& row : *query_result) {
        if (!row) {
            std::cerr << "行数据读取错误: " << row.status() << "\n";
            continue;
        }
        // 根据表结构调整字段名和类型
        std::string name = row->get<std::string>("name").value_or("");
        std::int64_t age = row->get<std::int64_t>("age").value_or(0);
        std::cout << "姓名: " << name << ", 年龄: " << age << "\n";
    }

    return 0;
}

补充说明

  • 直接加载密钥内容:如果不想用环境变量,可直接读取密钥文件初始化客户端,示例代码如下:
    std::ifstream key_file("path/to/your/service-account-key.json");
    std::string key_content((std::istreambuf_iterator<char>(key_file)), {});
    auto credentials = google::cloud::MakeServiceAccountCredentials(key_content);
    auto client = google::cloud::bigquery::MakeBigQueryClient(credentials);
    
  • 字段类型匹配:row->get<T>(field_name)中的模板参数T需与表字段类型对应,比如字符串用std::string,数值型用std::int64_t/double等
  • 错误处理:SDK返回的StatusOr类型必须先检查有效性,避免空指针或无效值访问

内容的提问来源于stack exchange,提问作者Chris S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 22:32:38