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

如何通过Java互操作在Clojure中从Google BigQuery查询数据?

在Clojure中通过Java互操作查询Google BigQuery数据的示例

首先确保你的项目中已添加以下依赖(以Leiningen为例):

[com.google.cloud/google-cloud-bigquery "2.16.0"]

完整示例代码

(ns bigquery-demo.core
  (:import (com.google.cloud.bigquery BigQuery BigQueryException BigQueryOptions QueryJobConfiguration TableResult)))

(defn query-bigquery [query]
  (try
    ;; 初始化BigQuery客户端,建议全局复用而非每次查询创建
    (let [bigquery (.getService (BigQueryOptions/getDefaultInstance))
          query-config (.build (QueryJobConfiguration/newBuilder query))
          results (.query bigquery query-config)]
      ;; 遍历查询结果并打印
      (.forEach (.iterateAll results)
                (fn [row]
                  (.forEach row
                            (fn [val]
                              (printf "%s," (.toString val))))))
      (println "\n查询执行成功。"))
    (catch BigQueryException e
      (println "查询执行失败:\n" (.toString e)))
    (catch InterruptedException e
      (println "查询被中断:\n" (.toString e)))))

(defn -main []
  ;; 替换为你的项目、数据集和表名
  (let [project-id "MY_PROJECT_ID"
        dataset-name "MY_DATASET_NAME"
        table-name "MY_TABLE_NAME"
        query (str "SELECT name, SUM(number) as total_people\n"
                   " FROM `" project-id "." dataset-name "." table-name "`\n"
                   " WHERE state = 'TX'\n"
                   " GROUP BY name, state\n"
                   " ORDER BY total_people DESC\n"
                   " LIMIT 20")]
    (query-bigquery query)))

代码说明

  • 客户端初始化:BigQueryOptions/getDefaultInstance会自动读取环境变量、本地密钥文件等配置创建客户端,建议全局复用该实例以提升性能。
  • 查询配置:通过QueryJobConfiguration/newBuilder构建查询任务配置,还可按需设置超时、目标数据集等额外参数。
  • 结果处理:TableResult的iterateAll方法返回所有查询结果行,通过嵌套的forEach遍历每行的字段值。
  • 异常处理:捕获BigQueryException处理BigQuery服务端错误,捕获InterruptedException处理查询过程中的中断异常。

内容的提问来源于stack exchange,提问作者Edward J. Stembler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:45:43