运行 查询语言 在 谷歌工作表 无需编写 Apps Script JDBC
Apps Script 的 JDBC 服务运行正常,本页面将向您展示其完整版本:代码、六分钟限制、IP 地址范围以及脚本中的密码。此外,页面还展示了另一种实现方式:数据库旁边运行一个小型代理程序,执行 SQL 查询,然后通过 Google Sheets 插件将数据导入到您的表格中。无需 JavaScript,无需更改防火墙设置,而且免费套餐就包含了这项功能。
如果你仍然需要 Apps Script JDBC,这里是真实版本。
谷歌的 JDBC 服务 Apps Script 可将数据连接到 MySQL、Google Cloud SQL for MySQL、PostgreSQL、Microsoft SQL Server 和 Oracle。最小的可运行脚本(用于填充工作表)如下所示:
功能 加载客户() { 常量 props = 属性服务.获取脚本属性(); // 将密码排除在代码之外 常量 连接 = JDBC.获取连接('jdbc:mysql://db.example.com:3306/sales'道具。获取属性('DB_USER'),道具。获取属性('DB_PASS')); 常量 rs = 连接。创建语句().执行查询('SELECT customer_id, name, city FROM customers LIMIT 1000'); 常量 rows = []; 尽管 (卢比)下一个())行。推([rs.获取字符串(1),rs。获取字符串(2),rs。获取字符串(3)]); rs。关闭();连接。关闭(); 常量 表格 = 电子表格应用程序.获取活动电子表格().按名称获取工作表('顾客'); 床单。清除内容(); 床单。获取范围(1, 1,行长度, 3).设置值(行);}
该示例使用 MySQL。对于其他数据库引擎,只需更改连接字符串即可: jdbc:postgresql://, jdbc:sqlserver:// 和 jdbc:oracle:thin:@ 遵循相同的形状,Cloud SQL 使用 jdbc:google:mysql://在此之前,您的数据库必须接受来自 Google 服务器的连接。Google 会将地址范围发布为…… JSON 文件 您需要将配置添加到数据库防火墙中并保持同步,并且数据库必须监听 1025 或更高的端口。实际应用中真正起作用的限制来自谷歌。 配额页面:
| 限制 | 个人 Google 帐户 | Google Workspace 帐户 |
|---|---|---|
| 脚本运行时,每次执行 | 6分钟 | 6分钟 |
| 自定义函数运行时(调用 JDBC 的公式) | 30秒 | 30秒 |
| 每日 JDBC 连接数 | 10,000 | 50,000 |
| 每个用户同时执行的次数 | 30 | 30 |
| 时间驱动触发器,每日总运行时间 | 90分钟 | 6小时 |
上面的示例隐藏了两件事。谷歌自己的示例会将用户名和密码以明文字符串的形式直接传递到代码中,而大多数实际使用的脚本也会复制这些信息;脚本属性技巧虽然能将它们隐藏在源代码之外,但任何能够编辑脚本的人仍然可以读取它们。此外,每一行数据都必须能够加载到脚本的内存中,并在六分钟内完成,因此,如果查询速度较慢或表很大,就需要手动分块处理。如果你的表很小,数据库已经可以从互联网访问,并且脚本由一位开发者维护,那么使用 JDBC 就足够了。本页的其余部分是为其他开发者准备的。
你最终会得到什么呢?
一个 Google 表格,其中包含针对数据库执行 SQL 查询的结果,以及 运行查询 侧边栏中有一个按钮,可以随时调出最新行数据。就像这样:
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | customer_id | 名 | 姓 | 国家 | 总计 |
| 2 | 1042 | 玛丽亚 | 阿尔瓦雷斯 | 美国 | 1,284.50 |
| 3 | 1043 | 丹尼尔 | 奥卡福 | 美国 | 612.00 |
| 4 | 1047 | 普里亚 | 奈尔 | 美国 | 2,090.75 |
| 5 | 1051 | 托马斯 | 伯格 | 美国 | 338.20 |
| 6 | 1056 | 露西亚 | 费雷拉 | 美国 | 1,455.00 |
| 7 | 1060 | 健二 | 佐藤 | 美国 | 874.10 |
| 8 |
实时访问您的数据库区别在于查询的运行位置。使用 JDBC 时,Google 服务器会打开一个连接到你的数据库的连接,因此你的防火墙必须允许该连接,并且脚本必须保存密码。而使用 Query Streams 时,一个名为 Agent 的小程序运行在一台已经可以访问数据库的计算机上,它会建立一个出站连接到 Query Streams,并在那里运行 SQL 查询。Google Sheets 插件会请求数据行,并且只有数据行会被传输。你的防火墙不会打开任何端口,密码也不会离开 Agent。
你需要准备什么
计算机上的代理可以访问服务器
一个在后台运行的小程序,当 Google Sheets 发出请求时,它会查询数据库。通常是数据库服务器本身,或者同一网络上的任何一台始终在线的计算机。
您的连接详情
服务器名称、数据库名称以及可以读取该数据库的用户名和密码。如果数据库由其他人管理,则需要向他们索取这些信息。
哪个计算机获得代理? 任何始终在线且能够访问您自己的数据库的机器,通常是数据库服务器本身或同一网络上的计算机。 Google Sheets 可以放在任何地方它在浏览器中运行。
分四步完成设置
-
创建您的帐户
前往 my.querystreams.com 并使用您用于 Google 表格的 Google 帐户注册。选择 免费 计划。这是一个真正的计划,而不是试用版,它涵盖了两个连接以及来自 Google Sheets 的临时 SQL 语句。
在可以访问服务器的计算机上安装代理程序



登录,打开 下载然后将代理程序安装在可以访问您数据库的计算机上:通常是数据库服务器本身,或者同一网络上的任何一台始终在线的计算机。安装只需一分钟,之后它就会自动启动。
为什么使用小型程序而不是驱动程序? 该代理程序只需在 Windows、Mac 或 Linux 系统上安装一次(Windows 系统下约 85 MB,Mac 和 Linux 系统下略超过 100 MB),即可在后台静默运行。它会像浏览器一样,与查询流建立一条加密的出站连接,因此您无需打开任何防火墙端口或设置 VPN。您的数据库保留在您的网络中,数据行会传输到您所在的任何位置,必要时也会通过互联网传输。您这边唯一需要做的就是安装此插件。
下载页面显示 您的访问密钥当代理提示时,将其粘贴到代理中,然后等待徽章读取。 已连接到查询流这是你在代理程序本身上唯一需要做的事情。
-
添加数据库连接
在门户网站中打开 数据 → 数据代理, 点击 添加连接器 在代理程序中,选择数据库类型,并填写主机、端口、数据库和只读登录名。点击 测试连接然后 节省连接会在几秒钟内到达代理。每个数据库都有其自身的流程,其中包含确切的字段: MySQL, PostgreSQL, SQL 服务器, 甲骨文Cloud SQL、Amazon RDS 和 Azure 数据库的连接方式相同;代理只需要能够访问它们即可。
没有IP地址白名单。 代理程序从您的网络内部连接到您的数据库,并通过 HTTPS 协议向外发送查询流。无需将 Google 地址列表添加到防火墙,也无需进行任何设置。
-
从 Google 表格运行 SQL 语句
打开你的电子表格, 安装 Query Streams 插件 如果您还没有 Google Workspace,请从 Google Workspace Marketplace 下载。它会自动识别您已登录的 Google 帐户;无需单独登录。在侧边栏中点击 查询流选择你的连接,然后粘贴你原本要在脚本中输入的 SELECT 语句:
示例 · SQL选择 客户ID、姓名、城市 从 客户 命令 经过 名字 限制 1000;
选择下面的选项卡 目的地表 并点击 运行查询这些行会显示在列标题下方。点击 运行查询 每当您需要最新数据时,都可以再次执行此操作。要使工作表自动刷新,请在查询生成器中保存查询并进行设置。 自动化其运行频率从每五分钟一次到每周一次不等。
就是这样。 您的数据已保存在表格中,只需单击一下即可保持最新状态。除了您请求的行之外,没有任何数据会离开您的网络。
并排比较,只有经得起考验的才行。
| Apps Script JDBC | 查询流 | |
|---|---|---|
| 你写的内容 | SQL 周围的 JavaScript | SQL |
| 查询运行位置 | 在谷歌的服务器上,连接到你的数据库 | 在代理程序上,数据库旁边。 |
| 数据库密码 | 在脚本或其属性中,任何有编辑权限的人都可以读取它。 | 仅在代理上可见;表格用户看不到它。 |
| 防火墙 | 允许使用 Google 公布的地址范围,端口 1025 或更高。 | 没有入站流量;代理通过 HTTPS 连接。 |
| 时限 | 每次执行耗时 6 分钟,自定义函数耗时 30 秒 | 没有超时脚本;代理运行查询并将行数据流式传输。 |
| 配额 | 每天 10,000 或 50,000 个 JDBC 连接,触发时间 90 分钟或 6 小时 | 每个套餐每月流量限额,免费套餐起步为 5MB。 |
| 将数据提供给同事 | 复制脚本及其凭据。 | 分享查询结果;接收者运行该查询,无需查看登录信息。 |
| 按计划刷新 | 每日运行时配额内的时间驱动触发器 | 自动化,每 5 分钟到每周一次 |
| 数据库 | MySQL、Cloud SQL、PostgreSQL、SQL Server、Oracle | 这五个数据库加上 MariaDB、Snowflake、BigQuery、SQLite、Access、DuckDB、文件夹文件以及 Stripe、HubSpot 和 Shopify 等 API。 |
这些计划允许什么?
所有套餐(包括免费套餐)均支持 Google Sheets 插件的即席 SQL 功能。免费套餐包含两个连接和每月 5 MB 的数据流量,足以处理像上面这样的表格,即使每天刷新多次也绰绰有余。从插件运行您在查询生成器中保存的查询,最低套餐为个人核心套餐;同事与您共享的查询在所有套餐中均可运行。 请查看定价页面 按计划发放津贴。
免费是一种你可以坚持的计划。 这不是一份会过期的试用期。请查看以下内容,了解具体包含哪些内容。 定价页面.
人们提出的问题
我可以保留现有的 Apps Script,只修复密码问题吗?
是的。像上面的示例一样,将用户名和密码移到脚本属性中,并赋予数据库登录只读权限。这样可以解决大部分问题。但它不会改变六分钟限制、每日连接配额或防火墙允许列表,因此,当工作表对多人重要时,大多数人会将查询从 Apps Script 中移出来。
代理程序必须运行在数据库服务器上吗?
不。任何能够访问数据库且始终在线的计算机都可以:办公室的工作站、小型虚拟机或服务器本身。它只需要出站 HTTPS 协议来查询流即可。
是否存在类似 JDBC 内存上限的行数限制?
代理程序会流式传输数据行,而不是将整个结果保存在脚本中,因此实际的限制取决于您的套餐数据流量和 Google Sheets 本身,后者将电子表格的单元格数量上限设为 2000 万个(在 Google 2026 年 9 月尚未推出的功能覆盖的帐户中,上限为 1000 万个)。只需将 SELECT 语句限定在所需的列和日期范围内,即可确保双方都能获得足够的容量。
我使用的是 Cloud SQL。这会有影响吗?
仅在代理程序运行的服务器上运行。将其放置在可以访问 Cloud SQL 实例的计算机或虚拟机上,可以通过已授权代理程序地址的公网地址访问,也可以放置在同一网络内,并以 MySQL、PostgreSQL 或 SQL Server 的方式连接。无需维护 Google 地址范围。
你的数据库必须放在我使用表格的电脑上吗?
不,只有代理需要位于您的数据库所在的位置。Google Sheets 可以在任何设备的浏览器中运行。使用同一个 Google 帐户打开插件,您的连接就都在那里了。
我的数据会被复制到查询流吗?
不。代理程序会运行查询,找到您的数据,然后只发送返回的行。中间不会进行任何同步或存储操作。
免费套餐真的包含这些吗?
是的。“免费”是一个永久有效的方案,而不是会过期的试用期。请查看具体包含内容。 定价页面.
表格会自动刷新吗?
如需获取最新行,请再次单击“运行查询”。要设置工作表自动刷新(无需用户手动操作),请在“查询流”门户(“流”→“自动化”)中设置自动化。此功能在所有套餐中均有提供。
相关指南
Setup trouble?
- Agent shows Offline, or Test connection and Browse are greyed out? Check that the Agent is online → Is the Agent online?

