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

如何通过BigFrames在Google BigQuery中实现多列运算生成新列(非SQL方式)

使用BigFrames在BigQuery中实现多列运算生成新列

你不需要用remote_function处理简单的多列求和这类操作,BigFrames本身支持矢量化列运算,所有计算都会在BigQuery端执行,不会把数据拉到本地,也不需要写SQL。

直接实现多列运算(推荐)

这是最简单的方式,完全贴合pandas使用习惯,同时自动在BigQuery中执行:

import bigframes.pandas as bpd
from google.cloud import bigquery

# 初始化BigQuery客户端
client = bigquery.Client()

# 读取BigQuery中的表(替换成你的项目、数据集、表名)
table = bpd.read_gbq("your-project.your-dataset.your-table", client=client)

# 直接进行多列运算生成新列,计算逻辑在BigQuery端执行
table["time_sum"] = table["time1"] + table["time2"]

# 可选:将结果写回BigQuery
table.to_gbq("your-project.your-dataset.new-table", client=client, if_exists="replace")

复杂逻辑下使用remote_function

如果你的计算逻辑不是简单的加减,而是需要自定义函数,可正确使用remote_function,注意你之前的代码存在参数类型错误(定义的bool类型不符合时间列的实际类型),以下是正确写法:

import bigframes.pandas as bpd
from google.cloud import bigquery

client = bigquery.Client()
credentials = client._credentials  # 或使用你的自定义凭证

# 定义自定义远程函数,匹配输入输出的列数据类型
@bpd.remote_function(
    input_types=["datetime64[ns]", "datetime64[ns]"],  # 对应time1和time2的实际类型
    return_type="datetime64[ns]",
    bigquery_connection=client.project,
    cloud_function_service_account=credentials.signer_email
)
def calculate_time_sum(time1, time2):
    return time1 + time2

# 读取表
table = bpd.read_gbq("your-project.your-dataset.your-table", client=client)

# 应用自定义函数生成新列
table["time_sum"] = calculate_time_sum(table["time1"], table["time2"])

# 写回BigQuery
table.to_gbq("your-project.your-dataset.new-table", client=client, if_exists="replace")

关键说明

  • BigFrames的核心是把pandas风格操作翻译为BigQuery执行计划,普通列运算(加减乘除、逻辑运算等)无需额外用remote_function,直接操作即可,所有计算在BigQuery端完成。
  • remote_function仅用于处理无法用BigFrames内置操作实现的复杂自定义逻辑,使用时必须严格匹配输入输出的列数据类型。

内容的提问来源于stack exchange,提问作者jack gell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:52:41