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

如何实现BigQuery数据每日导出至Cloud Storage并按日期命名文件

Firebase BigQuery事件表每日导出到Cloud Storage解决方案

一、批量导出历史数据(遍历每日数据+文件名带日期)

用bash脚本循环生成每日导出命令,同时在Cloud Storage文件名中嵌入日期:

#!/bin/bash

# 配置起始日期和结束日期(结束日期自动取当日)
START_DATE="2023-01-18"
END_DATE=$(date +%Y-%m-%d)

current_date="$START_DATE"
# 循环遍历每一天
while [[ "$current_date" < "$END_DATE" || "$current_date" == "$END_DATE" ]]; do
    # 转换为BigQuery表后缀的YYYYMMDD格式
    date_str=$(date -d "$current_date" +%Y%m%d)
    # 执行BigQuery导出命令,文件名嵌入日期
    bq query --use_legacy_sql=false "
EXPORT DATA OPTIONS (
    uri='gs://gara-store-firebase-events-bucket/event_${date_str}*.json',
    format='JSON',
    overwrite=true
) AS
SELECT * FROM \`gara-XXXXXX.analytics_247657392.events_${date_str}\`;
"
    # 日期递增1天
    current_date=$(date -d "$current_date +1 day" +%Y-%m-%d)
done

使用说明:

  1. 在Cloud Shell或本地环境配置好gcloud和bq命令行工具,并完成权限认证。
  2. 修改脚本中的项目ID、存储桶名称、起始日期为实际值。
  3. 运行脚本:chmod +x export_events.sh && ./export_events.sh,如果历史数据量大,可加nohup后台运行避免会话中断。

二、每日自动导出(配合Cloud Scheduler)

通过Cloud Scheduler每日定时触发导出前一天的数据(避免当天数据未完全写入):

1. 编写每日导出脚本

#!/bin/bash
# 获取前一天的日期(YYYYMMDD格式)
date_str=$(date -d "yesterday" +%Y%m%d)

bq query --use_legacy_sql=false "
EXPORT DATA OPTIONS (
    uri='gs://gara-store-firebase-events-bucket/event_${date_str}*.json',
    format='JSON',
    overwrite=true
) AS
SELECT * FROM \`gara-XXXXXX.analytics_247657392.events_${date_str}\`;
"

2. 配置Cloud Scheduler

  • 创建一个Cloud Scheduler任务,选择Cloud Functions触发方式(将上述脚本封装为Cloud Function)。
  • 设置触发频率为0 0 * * *(每日凌晨执行),指定的服务账号需拥有BigQuery数据读取权限和Cloud Storage写入权限。

核心要点说明

  • 文件名带日期:通过在uri中拼接${date_str}变量,生成如event_20231101*.json的文件名,确保每个日期的备份文件独立区分。
  • 遍历日期:bash的date命令支持日期加减和格式转换,轻松实现从起始日到当日的循环遍历。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:07:06