如何使用Python从Firebase获取事件统计数据(含国家过滤)及相关资料
嘿,我来帮你搞定这个Firebase事件统计的需求!下面给你两种实用方案,还有Python代码示例,以及了解更多细节的方向~
实现Firebase事件统计的具体方案
一、通过BigQuery分析Firebase Analytics数据(首推)
如果你的Firebase项目已经开启了BigQuery集成(这个功能在免费配额内就能用),直接用SQL查询是最灵活高效的方式——毕竟Firebase Analytics的原始事件数据都会自动同步到BigQuery中。
1. 统计最近1天、30天的事件总数
先找到你的BigQuery数据集(格式是firebase_project_id.analytics_XXXXXX,其中XXXXXX是你的数据流ID,在Firebase控制台的BigQuery集成页面能看到),执行下面的SQL查询:
-- 统计最近1天的事件总数 SELECT COUNT(*) AS total_events_last_1day FROM `firebase_project_id.analytics_XXXXXX.events_*` WHERE _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)) -- 统计最近30天的事件总数 SELECT COUNT(*) AS total_events_last_30day FROM `firebase_project_id.analytics_XXXXXX.events_*` WHERE _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
2. 按国家筛选的统计
只需要在SQL里加上geo.country维度做分组即可:
-- 最近1天各国家的事件数 SELECT geo.country AS country, COUNT(*) AS event_count FROM `firebase_project_id.analytics_XXXXXX.events_*` WHERE _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)) GROUP BY geo.country ORDER BY event_count DESC -- 最近30天各国家的事件数 SELECT geo.country AS country, COUNT(*) AS event_count FROM `firebase_project_id.analytics_XXXXXX.events_*` WHERE _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)) GROUP BY geo.country ORDER BY event_count DESC
如果要在Python中自动执行这些查询,用google-cloud-bigquery库就行,示例代码如下(记得替换成你自己的项目信息):
from google.cloud import bigquery from datetime import datetime, timedelta # 初始化BigQuery客户端 client = bigquery.Client(project="your-firebase-project-id") def get_total_event_count(time_interval_days): end_date = datetime.now().date() start_date = end_date - timedelta(days=time_interval_days) table_suffix_start = start_date.strftime("%Y%m%d") query = f""" SELECT COUNT(*) AS total_events FROM `your-firebase-project-id.analytics_XXXXXX.events_*` WHERE _TABLE_SUFFIX >= '{table_suffix_start}' """ query_job = client.query(query) results = query_job.result() for row in results: return row.total_events # 获取最近1天和30天的事件总数 last_1day_count = get_total_event_count(1) last_30day_count = get_total_event_count(30) print(f"最近1天事件数: {last_1day_count}") print(f"最近30天事件数: {last_30day_count}") # 按国家统计最近1天的事件数 def get_country_event_stats(time_interval_days): end_date = datetime.now().date() start_date = end_date - timedelta(days=time_interval_days) table_suffix_start = start_date.strftime("%Y%m%d") query = f""" SELECT geo.country AS country, COUNT(*) AS event_count FROM `your-firebase-project-id.analytics_XXXXXX.events_*` WHERE _TABLE_SUFFIX >= '{table_suffix_start}' GROUP BY geo.country ORDER BY event_count DESC """ query_job = client.query(query) return [(row.country, row.event_count) for row in query_job.result()] country_stats_1day = get_country_event_stats(1) print("\n最近1天各国家事件数:") for country, count in country_stats_1day: print(f"{country}: {count}")
二、使用Firebase Admin SDK的Analytics API
如果还没开启BigQuery集成,也可以用Firebase Admin SDK的Analytics API来获取预聚合的数据,但要注意这个API有请求配额限制,适合小范围查询。
首先安装依赖:
pip install firebase-admin
然后用Python代码实现(记得替换成你的服务账号密钥路径和APP ID):
import firebase_admin from firebase_admin import analytics from datetime import datetime, timedelta # 初始化Firebase Admin SDK cred = firebase_admin.credentials.Certificate("path/to/your-service-account-key.json") firebase_admin.initialize_app(cred) # 获取最近1天的事件总数 end_time = datetime.now() start_time = end_time - timedelta(days=1) response = analytics.get_app_analytics( app_id="your-firebase-app-id", metrics=["event_count"], start_time=start_time, end_time=end_time ) print(f"最近1天事件数: {response.metrics[0].value}") # 获取最近30天的事件总数 start_time_30d = end_time - timedelta(days=30) response_30d = analytics.get_app_analytics( app_id="your-firebase-app-id", metrics=["event_count"], start_time=start_time_30d, end_time=end_time ) print(f"最近30天事件数: {response_30d.metrics[0].value}") # 按国家统计最近1天的事件数 response_country = analytics.get_app_analytics( app_id="your-firebase-app-id", metrics=["event_count"], dimensions=["country"], start_time=start_time, end_time=end_time ) print("\n最近1天各国家事件数:") for row in response_country.rows: print(f"{row.dimension_values[0].value}: {row.metric_values[0].value}")
三、了解更多Firebase上报数据的方法
你可以在Firebase官方文档里找到更详细的内容:
- 查看Firebase Analytics的所有事件维度、指标:在Firebase控制台的Analytics板块,或者官方文档的Analytics数据模型章节
- BigQuery集成的完整配置指南:在Firebase控制台的「项目设置」→「集成」里找到BigQuery,查看配置步骤和数据结构说明
- Firebase Admin SDK的Analytics API完整参考:官方文档中「Firebase Admin SDK」下的Analytics部分,有所有方法的参数说明和示例
内容的提问来源于stack exchange,提问作者madan kandula
相关产品推荐
相关产品推荐

