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

ibis对接BigQuery后端时如何给日期列添加指定时间间隔

解决方案

ibis 对接 BigQuery 后端时,.add() 方法的参数需要传入 ibis.interval() 构造的时间间隔对象,你可以按需求指定间隔的单位和数值:

  • 加指定天数:which_type_here = ibis.interval(days=7) 表示加7天
  • 加指定月数:which_type_here = ibis.interval(months=3) 表示加3个月
  • 加指定年数:which_type_here = ibis.interval(years=1) 表示加1年
  • 支持的单位还包括 weeks(周)、hours(小时)、minutes(分钟)、seconds(秒),可以同时指定多个单位,比如 ibis.interval(weeks=1, days=2) 表示加1周零2天

如果你的表中有整数类型的列存储需要累加的间隔数值,比如 day_offset 列存每个行需要加的天数,可以直接按如下方式写,不需要单独定义变量:

e = t.mutate(new_date=t.date.add(t.day_offset * ibis.interval(days=1)))

以下是修改后的完整可运行代码示例(以加14天为例):

import ibis
import ibis_bigquery
import pandas as pd
import datetime as dt
from google.cloud import bigquery # 原代码缺失该导入,需要补充

my_project = "your_project"
my_dataset = 'your_dataset'

conn = ibis_bigquery.connect(
    project_id=my_project,
    dataset_id=my_dataset)

pdf = pd.DataFrame({'date': [dt.date(2020, 1, 1),
                             dt.date(2020, 5, 19),
                             dt.date(2021, 7, 9)],
                     })
client = bigquery.Client(project=my_project)
table = my_dataset + ".mytable"
client.delete_table(table, not_found_ok=True)
job = client.load_table_from_dataframe(pdf, table)
job.result() # 等待数据导入完成,避免后续读取表失败

t = conn.table("mytable")

# 示例:给日期列加14天
which_type_here = ibis.interval(days=14)
e = t.mutate(new_date=t.date.add(which_type_here))

# 执行后可查看结果
print(e.execute())
  • 上述写法会被ibis自动转换为BigQuery原生的DATE_ADD语法,完全符合BigQuery的执行规范,不需要自定义SQL
  • 如果操作的是时间戳(timestamp)类型的列,同样适用该方法,支持更小的时间单位

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 19:06:05