
ToolJet 连接 Google BigQuery 数据源完整指南服务账号认证、查询与操作详解【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 项目地址: https://gitcode.com/GitHub_Trending/to/ToolJetToolJet 提供了开箱即用的BigQuery数据源插件允许你在可视化应用编辑器中直接连接 Google Cloud 的 BigQuery 数据仓库执行标准 SQL 查询以及数据集、表、记录与视图的管理操作。本文以官方 BigQuery 数据源文档为主体结合仓库内 BigQuery 插件源码 与 operations 配置 展开带你掌握从创建数据源、配置服务账号密钥到执行各类操作的完整流程并理解底层实现的调用原理。连接 BigQuery 数据源在 ToolJet 中新建一个 BigQuery 数据源有两种入口点击查询面板上的 Add new Data source按钮从 ToolJet 仪表盘进入Data Sources页面选择BigQuery。连接 BigQuery 所需的核心凭证为Private key私钥即 Google Cloud 服务账号的 JSON 密钥文件内容。获取服务账号私钥按照以下步骤在 Google Cloud Console 中生成密钥启用 BigQuery API在 Google Cloud Console 中为你的项目启用 BigQuery API详见 Google Cloud 官方文档 BigQuery Web UI 指南。创建服务账号在 IAM 与管理页面创建服务账号详见 Google Cloud 官方文档创建和管理服务账号并为其授予访问 BigQuery 所需的角色例如 BigQuery Data Viewer、BigQuery Job User 等。生成密钥选中刚创建的服务账号进入Keys标签页点击Add Key → Create new key密钥类型选择JSON下载得到一个 JSON 文件。填入私钥在 ToolJet 的 BigQuery 数据源表单中将下载的 JSON 文件内容完整复制粘贴到Private key字段中。下载的 JSON 文件内容大致如下示例中为 ToolJet 测试服务账号字段结构即标准 Google Cloud 服务账号密钥{ type: service_account, project_id: long-sonar-324407, private_key_id: 63f4415e600bd7879bc14fd1157a4aabe227c204, private_key: -----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDRGgDmfwYcKp4q\n3ce4DkrKv0vTn/Jn2Z2vEHpoOz5ebZqmE3v56c6YIvtVRblANILPrOsB5ZvkF5f\n...\n-----END PRIVATE KEY-----\n, client_email: tooljettestlong-sonar-324407.iam.gserviceaccount.com, client_id: 103664451567222591066, auth_uri: https://accounts.google.com/o/oauth2/auth, token_uri: https://oauth2.googleapis.com/token, auth_provider_x509_cert_url: https://www.googleapis.com/oauth2/v1/certs, client_x509_cert_url: https://www.googleapis.com/robot/v1/metadata/x509/tooljettest%40long-sonar-324407.iam.gserviceaccount.com, universe_domain: googleapis.com }其中对连接起到关键作用的字段包括project_id目标 GCP 项目 ID插件在创建 BigQuery 客户端时会以此为默认项目private_keyPEM 格式的私钥含换行转义用于签名请求client_email服务账号邮箱用于标识身份。在插件源码 plugins/packages/bigquery/lib/index.ts 中getServiceAccountConnection方法会解析该 JSON并用project_id、client_email、private_key构造google-cloud/bigquery客户端同时支持按需附加自定义Scope与Regionlocationreturn new BigQuery({ projectId: privateKey?.project_id, credentials: { client_email: privateKey?.client_email, private_key: privateKey?.private_key, }, ...(scopes.length 0 ? { scopes } : {}), ...(location ? { location } : {}), });可见在数据源表单中额外填写Scope空格分隔的 OAuth 权限范围和Region数据集所在区域会直接透传给底层 Google Cloud 客户端。认证方式与连接测试从 manifest.json 可以看出BigQuery 数据源在 3.0.0 版本中支持两种认证方式认证方式表单字段说明Service Account服务账号private_key、scope、location粘贴服务账号 JSON 密钥密钥字段已标记为encrypted存储时加密OAuth 2.0project_id、location、OAuth 客户端配置走 Google 授权码流程按access_type选择只读bigquery.readonly或读写bigquery作用域本文主体聚焦官方文档所描述的服务账号Private key方式OAuth 2.0 方式在 CE/EE/Cloud 版本中的字段可见性存在差异例如tooljet_app类型的 OAuth 仅 Cloud 版开放配置以实际部署版本的表单为准。连接测试方面testConnection方法plugins/packages/bigquery/lib/index.ts对服务账号会直接调用client.getDatasets()验证密钥有效性对 OAuth 则会请求 Google 的 tokeninfo 接口校验 access token。查询 BigQuery连接建立后即可在查询管理器中执行查询点击编辑器底部查询管理器的 Add按钮选择上一步添加的BigQuery数据源从操作下拉框中选择需要的操作并填写对应参数点击Preview按钮预览输出或点击Run按钮真正触发查询。:::tip 查询结果还可以通过 ToolJet 的转换Transformations功能进一步加工处理详见 transformations 文档。 :::SQL 模式与 GUI 模式从 operations.json 的mode配置可见BigQuery 查询支持SQL 模式与GUI 模式两种形态。SQL 模式下可直接编写查询语句并使用命名参数占位符SELECT name FROM bigquery-public-data.usa_names.usa_1910_2013 WHERE state state LIMIT 100通过SQL Parameters面板以参数名方式声明参数如state插件执行时会将参数与查询一起提交。源码 executeSqlMode 中可以看到查询参数会经过coerceParam类型还原字符串形式的数字/布尔/对象会被 JSON 解析回原类型随后通过client.createQueryJob()创建查询任务再以job.getQueryResults()拉取结果行。Query options 与 Query results options查询相关操作普遍带有两个可选配置项Query options查询任务级配置以 JS 对象形式书写例如{ location: US, dryRun: true }用于指定计算区域、是否仅做语法校验dryRun等Query results options结果读取配置例如{ wrapIntegers: true }用于控制返回行中整数类型是否包装为安全整数。这两个字段在源码中均通过parseJSON解析底层使用 JSON5支持不带引号的键名并分别传入createQueryJob与getQueryResults。支持的操作BigQuery 数据源在 GUI 模式下支持以下操作Query查询List Datasets列出数据集List Tables列出表Insert Record插入记录Delete Record删除记录Update Record更新记录Create View创建视图Create Table创建表Delete Table删除表除上述操作外从 operations.json 还可以看到 3.0.0 插件额外实现了Get Dataset Info获取数据集信息、Bulk insert批量插入、Bulk update using primary key按主键批量更新与Bulk upsert using primary key按主键批量写入/更新四类扩展操作下面一并说明。Query根据所填Query返回数据。参考 Google Cloud 官方文档中的Query options与Query results options说明分别对应 BigQuery REST Job 接口与 Node.js 客户端 QueryResultsOptions 类型。必填参数QueryQuery optionsQuery results optionsGUI 模式下该操作同样支持SQL Parameters参数面板。底层与 SQL 模式共用同一套执行路径executeOperation 中的query分支先createQueryJob创建任务再getQueryResults获取结果最终以{ status: ok, data: rows }形式返回。List Datasets返回当前项目下全部数据集列表。实现上调用client.getDatasets()并通过sanitizeResponse只保留metadata.datasetReference关键信息源码避免把庞大的元数据对象原样塞回前端。List Tables返回指定数据集内的表列表。必填参数Dataset ID实现为client.dataset(datasetId).getTables()源码。同时插件还通过invokeMethod暴露了listDatasets/listTables/getTables方法供表单中的动态下拉选择器使用例如插入记录时Dataset ID 选择器会调用listDatasets拉取数据集Table ID 选择器则依赖所选数据集调用listTables拉取表并支持分页与关键词搜索listTables 实现。Create Table用于在指定数据集下创建一张新表。必填参数Table IDDataset IDOptionsOptions为 JS 对象形式用于定义表结构与属性示例{ schema: [ { name: Name, type: STRING, mode: REQUIRED }, { name: Age, type: INTEGER } ], location: US }schema数组中的每个字段由name列名、typeBigQuery 数据类型如 STRING、INTEGER、FLOAT、BOOLEAN、TIMESTAMP、RECORD 等、mode可选如 REQUIRED / NULLABLE / REPEATED构成。关于 schema 的完整写法可参考 Google Cloud 官方 nodejs-bigquery 仓库中的createTable.js示例。源码中该操作直接调用client.dataset(datasetId).createTable(tableId, options)并返回新表的tableId实现。Delete Table删除指定数据集中的一张表。必填参数Table IDDataset ID对应实现为client.dataset(datasetId).table(tableId).delete()成功后返回Table ${tableId} deleted.提示信息源码。注意删除表为不可逆操作请确认表名无误后再执行。Create View基于现有表创建一张视图逻辑视图。必填参数Table IDDataset IDView nameView columnsConditionQuery optionsQuery results options插件会将上述参数拼装为一条CREATE VIEW语句后执行源码CREATE VIEW 数据集.视图名 AS SELECT 视图列 FROM 数据集.表名 WHERE 条件若Condition留空则自动退化为WHERE TRUE即包含全部行。View columns填写逗号分隔的列名列表即可例如id, name, created_at。Insert Record向指定表中插入一条或多条记录。必填参数Table IDDataset IDRowsRows填写行对象的数组例如[ { name: Tom, age: 30 }, { name: Jane, age: 32 } ]实现调用client.dataset(datasetId).table(tableId).insert(rows)返回结果中包含插入成功的记录数与相关元数据源码。注意 BigQuery 的流式插入存在配额与最终一致性限制大批量导入建议改用下面的批量操作或使用加载任务。Delete Record根据条件删除指定表中的记录。必填参数Table IDDataset IDConditionQuery optionsQuery results options实现上会拼装DELETE FROM语句并作为查询任务执行源码DELETE FROM 数据集.表名 WHERE 条件:::warning 删除记录时务必谨慎如果省略 ConditionWHERE 子句插件会自动退化为WHERE TRUE这意味着将删除表中的全部记录 :::Update Record根据条件更新指定表中的记录。必填参数Table IDDataset IDColumnsConditionQuery results optionsColumns填写要更新的列-值映射对象例如{{ ({ name: bob, age: 30 }) }}可直接使用 ToolJet 的双花括号表达式引用组件状态。源码通过columnBuilder将对象转换为列名值的 SET 片段并拼装为UPDATE语句实现 与 columnBuilderUPDATE 数据集.表名 SET 列1值1,列2值2 WHERE 条件与删除操作同理若省略Condition则默认更新全表所有行执行前请再三确认。Get Dataset Info返回指定数据集的元数据信息包括datasetReference、location、description、creationTime、lastModifiedTime、labels等字段源码。仅需选择Dataset ID。批量操作Bulk Insert / Bulk Update / Bulk Upsert3.0.0 插件在 GUI 模式下额外提供三类面向批量场景的操作Bulk insert参数为Dataset ID、Table ID与Records to insert行对象数组例如{{ [ { id: 1, name: Alice } ] }}底层调用table.insert(records)批量写入Bulk update using primary key除数据集与表外还需指定Primary key column(s)单个列名或复合主键数组如{{ [id, tenant_id] }}与Records to update。插件会基于主键生成MERGE语句仅对匹配到的行执行更新Bulk upsert using primary key参数与批量更新一致生成的MERGE语句在匹配时更新、未匹配时插入实现有则更新、无则插入的语义。这三种批量操作对应的底层实现分别是 insert_record 分支、bulk_update_pkey与bulk_upsert_pkey分支其中MERGE语句由 buildMergeQuery 统一构建使用UNNEST([STRUCT(...)])承载待处理记录按主键列进行ON T.pk S.pk匹配值通过bqLiteral安全转义字符串、布尔、数字、NULL 均有对应字面量表示。底层执行链路与错误处理无论选择哪种操作最终都会汇聚到插件的run()方法plugins/packages/bigquery/lib/index.ts通过getConnection获取或从缓存中复用BigQuery 客户端——连接缓存以数据源 ID 配置哈希为键多用户认证时还会附加用户 ID避免不同用户的 token 串用依据queryOptions.mode判断走SQL 模式executeSqlMode还是GUI 模式executeOperation执行操作并将结果规范化为{ status: ok, data: rows }返回给查询管理器。错误处理方面插件会捕获底层抛出的错误并抽取statusCode、reason、jobId、location与出错 SQL 等诊断信息。对于非服务账号认证且返回 401/403 的请求会抛出OAuthUnauthorizedClientError提示用户重新进行 OAuth 授权其余错误统一包装为QueryError在前端展示可读的错误信息。小结通过 ToolJet 的 BigQuery 数据源你可以在不编写后端代码的情况下将 Google BigQuery 的查询与数据管理能力直接接入到内部工具、仪表盘与业务流程应用中。整个流程只需三步在 Google Cloud 创建服务账号并下载 JSON 密钥 → 在 ToolJet 中粘贴密钥建立数据源 → 在查询管理器中选择 SQL 模式或 GUI 操作并执行。本文所涉及的配置字段、操作参数与底层实现均可在仓库的 BigQuery 插件目录 下找到对应依据表单与操作定义见 manifest.json 与 operations.json执行逻辑见 index.ts类型定义见 types.ts。【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考