Google Analytics 4 关联BigQuery入门指引

Google Analytics 4 Haran 8年前 (2017-08-09) 10101次浏览 5个评论
文章目录[隐藏]

更新时间:2024年12月31号

认识BigQuery

BigQuery 是 Google Cloud 提供的一项完全托管的 企业级大数据分析服务,它使用户能够在极其庞大的数据集上运行 SQL 查询,并进行快速、高效的数据分析。BigQuery 采用 无服务器 架构,能够自动扩展资源,帮助用户处理大规模的数据集,而无需关注基础设施的管理。

你可以将GA4中的所有原始数据导出到BigQuery,然后使用类似SQL的语法查询该数据。

关联导出数据前提是:

  • GA4媒体资源编辑者的权限
  • BigQuery 项目拥有所有者访问权限

 

BigQuery的收费规则大致费分为存储空间和查询:

  • 存储费用:根据数据存储量计费。对于长期存储的数据,费用较低。
  • 查询费用:基于查询扫描的数据量计费,单位是 GB(Gigabyte)。BigQuery 对扫描的数据量进行计费,而不是查询的复杂度或执行时间

有多种计费方式,详细请看:https://cloud.google.com/bigquery/pricing?hl=zh-cn#packagetable

 

关联设置

接下来看关联,先在 Google API 控制台创建项目,然后在到Google Analytics 4 关联BigQuery

创建项目

https://console.developers.google.com ,点击项目(在左上角),然后点击「创建项目」去创建一个项目。

开启BigQuery  API

https://console.developers.google.com 里的API 和服务,中搜索“BigQuery”,然后开启BigQuery API:

Google Analytics 4 关联BigQuery入门指引

打开「IAM和管理」,将firebase-measurement@system.gserviceaccount.com添加为成员:

Google Analytics 4 关联BigQuery入门指引

 

Google Analytics 4关联BigQuery关联

  在Google Analytics 4 中点击「管理」——「BigQuery关联」——「关联」,进入设置界面:

Google Analytics 4 关联BigQuery入门指引

 

就分为三步:

选择一个BigQuery项目

点击「选择一个BigQuery项目」,可以看到你的谷歌ID满足服务权限要求的所有项目ID:

Google Analytics 4 关联BigQuery入门指引

选择一个项目,然后点击右上角的「确定」。

然后是设置数据存储位置:

Google Analytics 4 关联BigQuery入门指引

需要注意,大陆是没有服务器,但香港和台湾有。

配置设置

配置设置主要是配置数据流和事件和设置频率。

配置数据流就是确定哪个数据流要导入到BigQuery,还可以设置排除某个事件,就是某个事件不导入:

Google Analytics 4 关联BigQuery入门指引

GA4导出数据规模(事件数)的限制:

  • 免费版GA4,每天可以导出100万个事件,超过暂停处理数据
  • 付费版GA4,每天可以导出10亿个事件

 

频率其实就是设置导方式,分为两种:

  • 每日导出:按天导出,表格名为events_YYYYMMDD,表格数据最长 72 小时内还会更新,所以72小时内看到的数据可能会不同的
  • 流式导出:实时导出,这是内部临时表,表格名为events_intraday_YYYYMMDD,需要项目开启结算功能才可以选择流式导出。如果要获取GA4实时数据,就需要选这种,延伸阅读:GA4中如何获取真正的实时数据?

Google Analytics 4 关联BigQuery入门指引

你在BigQuery里看到的就是这样的:

Google Analytics 4 关联BigQuery入门指引

event_(58)表示存储了的数据。

检查并提交

设置没问题,在Review一下,就可以提交。

 

如何用SQL查询所需数据

我是推荐两种方式获取基本的SQL,在此基础上做修改,效率比较快:

 

第三方工具GA4SQL

GA4SQL,左侧选择所需维度,指标,过滤器,时间等,就会自动生成SQL:

Google Analytics 4 关联BigQuery入门指引

AI

ChatGPT可以对话式微调生成所需的SQL:

Google Analytics 4 关联BigQuery入门指引

还有Claude等AI工具都可以。

常见问题

BigQuery的导入时间

每日导出一般是第二天的早上导入,有时候会延时,晚上才导入。

 

BigQuery数据只保留60天

免费版的BigQuery默认只保留60天,如要保留更长时间,请升级付费版。

 

GA4的数据与BigQuery不一致

这是因为使用Consent Mode v2,即时用户拒绝了跟踪,仍然会发送ping,GA4是基于ping的数据建模计算出来,而Bigquery是真实的ping数据计数计算,所以不同。延伸阅读:Consent Mode是如何影响GA4的数据收集

 

BigQuery的限制

BigQuery导入数据对每天导入的数据规模是有限制的,每天限额是100万事件数,也就是一个月最多3000万。

 

BigQuery里没有年龄、兴趣的数据

BigQuery里的数据是定位到个体,为保护用户的隐私,没有年龄和兴趣的数据。

 

 

 


如有疑问,可以在文章底部留言或邮件(haran.huang@ichdata.com) 我~
喜欢 (3)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(5)个小伙伴在吐槽
  1. 大佬可以讲解一下BigQuery数据的简单用法吗?比如如何用原始数据拉出跟GA4差不多的表格,应该用哪些字段?感谢
    Jerry2024-11-25 10:22 回复 Windows 10 | Chrome 131.0.0.0
    • Haran
      没有简单的,比如要查不同渠道的会话数,Bigquery原始数据session_medium,session_source这两个字段,需要你根据GA4默认渠道分组的定义和优先级去写SQL去实现渠道的划分
      Haran2024-11-25 10:53 回复 Mac OS X | Chrome 131.0.0.0
      • Haran
        这是查询各渠道会话数和用户数的SELECT CASE WHEN session_source IS NULL THEN 'Direct' WHEN REGEXP_CONTAINS(session_campaign_name, 'cross-network') THEN 'Cross-network' WHEN ( REGEXP_CONTAINS( session_source, 'alibaba|amazon|google shopping|shopify|etsy|ebay|stripe|walmart' ) OR REGEXP_CONTAINS( session_campaign_name, '^(.*(([^a-df-z]|^)shop|shopping).*)$' ) ) AND REGEXP_CONTAINS(session_medium, '^(.*cp.*|ppc|paid.*)$') THEN 'Paid Shopping' WHEN REGEXP_CONTAINS( session_source, 'baidu|bing|duckduckgo|ecosia|google|yahoo|yandex' ) AND REGEXP_CONTAINS(session_medium, '^(.*cp.*|ppc|paid.*)$') THEN 'Paid Search' WHEN REGEXP_CONTAINS( session_source, 'badoo|facebook|fb|instagram|linkedin|pinterest|tiktok|twitter|whatsapp' ) AND REGEXP_CONTAINS(session_medium, '^(.*cp.*|ppc|paid.*)$') THEN 'Paid Social' WHEN REGEXP_CONTAINS( session_source, 'dailymotion|disneyplus|netflix|youtube|vimeo|twitch|vimeo|youtube' ) AND REGEXP_CONTAINS(session_medium, '^(.*cp.*|ppc|paid.*)$') THEN 'Paid Video' WHEN session_medium IN ( 'display', 'banner', 'expandable', 'interstitial', 'cpm' ) THEN 'Display' WHEN REGEXP_CONTAINS( session_source, 'alibaba|amazon|google shopping|shopify|etsy|ebay|stripe|walmart' ) OR REGEXP_CONTAINS( session_campaign_name, '^(.*(([^a-df-z]|^)shop|shopping).*)$' ) THEN 'Organic Shopping' WHEN REGEXP_CONTAINS( session_source, 'badoo|facebook|fb|instagram|linkedin|pinterest|tiktok|twitter|whatsapp' ) OR session_medium IN ( 'social', 'social-network', 'social-media', 'sm', 'social network', 'social media' ) THEN 'Organic Social' WHEN REGEXP_CONTAINS( session_source, 'dailymotion|disneyplus|netflix|youtube|vimeo|twitch|vimeo|youtube' ) OR REGEXP_CONTAINS(session_medium, '^(.*video.*)$') THEN 'Organic Video' WHEN REGEXP_CONTAINS( session_source, 'baidu|bing|duckduckgo|ecosia|google|yahoo|yandex' ) OR session_medium = 'organic' THEN 'Organic Search' WHEN REGEXP_CONTAINS(session_source, 'email|e-mail|e_mail|e mail') OR REGEXP_CONTAINS(session_medium, 'email|e-mail|e_mail|e mail') THEN 'Email' WHEN session_medium = 'affiliate' THEN 'Affiliates' WHEN session_medium = 'referral' THEN 'Referral' WHEN session_medium = 'audio' THEN 'Audio' WHEN session_medium = 'sms' THEN 'SMS' WHEN session_medium LIKE '%push' OR REGEXP_CONTAINS(session_medium, 'mobile|notification') THEN 'Mobile Push Notifications' ELSE 'Unassigned' END AS session_channel, COUNT(DISTINCT session_id) AS sessions, COUNT(DISTINCT user_pseudo_id) AS total_usersFROM ( SELECT CONCAT( user_pseudo_id, ( SELECT value.int_value FROM UNNEST (event_params) WHERE key = 'ga_session_id' ) ) AS session_id, ARRAY_AGG( ( CASE WHEN collected_traffic_source.gclid IS NOT NULL THEN 'google' ELSE collected_traffic_source.manual_source END ) IGNORE NULLS ORDER BY event_timestamp ASC LIMIT 1 ) [SAFE_OFFSET(0)] AS session_source, ARRAY_AGG( ( CASE WHEN collected_traffic_source.gclid IS NOT NULL THEN 'cpc' ELSE collected_traffic_source.manual_medium END ) IGNORE NULLS ORDER BY event_timestamp ASC LIMIT 1 ) [SAFE_OFFSET(0)] AS session_medium, ARRAY_AGG( collected_traffic_source.manual_campaign_name IGNORE NULLS ORDER BY event_timestamp ASC LIMIT 1 ) [SAFE_OFFSET(0)] AS session_campaign_name, user_pseudo_id FROM `mydb-1008.analytics_206759202.events_*` WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE( '%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 14 DAY) ) AND FORMAT_DATE( '%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY) ) GROUP BY session_id, user_pseudo_id )GROUP BY session_channel
        Haran2024-11-25 10:54 回复 Mac OS X | Chrome 131.0.0.0
        • 感谢大佬的代码。看来还得认真研究下SQL,比将原始表格导出再数据透视方便多了
          Jerry2024-11-27 10:24 回复 Windows 10 | Chrome 131.0.0.0
  2. 感受学习的力量!
    笑八达2017-08-12 11:09 回复 Windows 7 | 搜狗浏览器 2.X