详解bigquery数据格式

2022-04-02 00:00:00 数据 用户 会话 事件 上报

1.数据采集

BigQuery是谷歌云旗下的一个企业数据仓库,主要面向查询分析的企业需求,它使用了 Google 基础架构的强大处理能力实现超快速的查询分析,BQ的查询语言跟SQL类似但不尽相同。

上一篇文章主要讲firebase Analytic的数据指标,这些指标背后的原始数据就存储在BQ中;如果你的应用安装了firebase SDK,那firebase会自动采集一些核心的事件进行上报,上文中提到的几个核心事件均是firebase自动采集的事件,事件上报一般需要明确两个机制,一个是触发机制,再上篇文章中事件定义里已有相关描述(传送门:Firebase Analytics知多少),另一个是上报机制,客户端产生的数据会在事件触发之后立即传给firebase SDK,SDK遵守每5min或者定量batch的机制上报数据到服务器,但你会发现,很多离线场景的数据也会按时在BQ中查询到,因为数据上报不是一定通过你们客户端里的SDK,它是通过谷歌集成的服务来上报的,只要你手机中任意一个谷歌的应用在线使用,其他应用的数据就可以上报到服务器。

当然,安装了firebase SDK之后,我们也可以通过自定义事件的方式来收集数据,但上报的数据格式需要满足BQ的要求,接下来就具体讲下BQ的数据格式。

2.BigQuery的事件数据格式


BigQuery会给每应用建立一个数据集,数据集中可以放多张表,除了原始的两张日志收集表外,也可以放自己建的临时表。

数据集

对于每个关联到 BigQuery 的 Firebase 应用,系统都会在 BigQuery 应用中添加一个数据集,名字一般是“analytics_<propertyid>”property_id是应用在firebase里面的一个媒体资源id,系统自动分配的。

数据集中会有“events_YYYYMMDD”格式命名的表,就是按日期分区的日志数据表。当天的日志是以“events_intraday_YYYYMMDD”的格式命名,这个表会随着数据的收集而实时填充。

表中的每一行分别对应着 Analytics(分析)SDK 上传的一个事件。

即数据字段,以一个user_engagement事件的json格式为例,字段的释义和获取原理附在每一行后面,ps:数据均做了脱敏处理,不是真实数据:

{
[
  {
    "event_date": "20210226",               //事件分区日期,时区与配置的时区相同
    "event_timestamp": "1587917881026000",  //事件发生时刻时间戳
    "event_name": "user_engagement",        //事件名称
    "event_params": [                       //事件主体map
      {
        "key": "ga_session_id",             //会话id,当应用在前台启动或者用户访问网页时就开始一个会话,应用退到后台或离开网页开始计时,超过30min分钟未继续访问,会话生命周期结束;超时时长可以自定义设置,一般手机应用的超时时长设置30s-5min范围内
        "value": {
          "string_value": null,
          "int_value": "1587915555",
          "float_value": null,
          "double_value": null
        }
      },
      {
        "key": "firebase_screen_class",     //屏幕类名称
        "value": {
          "string_value": "MaxActivity",
          "int_value": null,
          "float_value": null,
          "double_value": null
        }
      },
      {
        "key": "engaged_session_event",  //无意义
        "value": {
          "string_value": null,
          "int_value": "1",
          "float_value": null,
          "double_value": null
        }
      },
      {
        "key": "firebase_event_origin",//无意义
        "value": {
          "string_value": "auto",
          "int_value": null,
          "float_value": null,
          "double_value": null
        }
      },
      {
        "key": "ga_session_number",  //第几个会话
        "value": {
          "string_value": null,
          "int_value": "12",
          "float_value": null,
          "double_value": null
        }
      },
      {
        "key": "engagement_time_msec", //距离上一个user_engagement事件的时间间隔,单位是毫秒
        "value": {
          "string_value": null,
          "int_value": "30000",
          "float_value": null,
          "double_value": null
        }
      },
      {
        "key": "firebase_screen_id", //屏幕id,即页面id,一个屏幕类包含多个页面,如个人主页屏幕类中有个人信息修改页和绑定手机号等页面        
        "value": {
          "string_value": null,
          "int_value": "2222222222222222",
          "float_value": null,
          "double_value": null
        }
      }
    ],
    "event_previous_timestamp": "1587887553028000",//上一次记录此事件的时间戳
    "event_value_in_usd": null, //事件的“value”参数在换算至以美元为单位后的值。
    "event_bundle_sequence_id": "11111", //	上传这些事件的软件包的序列 ID。
    "event_server_timestamp_offset": "-55555555", //事件发生时刻到落盘时刻的时间差
    "user_id": "11111111-1111-1111-1111-111111",//用户id,该值是可以配置的,如将用户在app上注册的账号赋值给user_id
    "user_pseudo_id": "ffffffffffff1111111111111111",//用户id,firebase自己定义伪id,32位,数字和字母组合,用户id
    "user_properties": [
      {
        "key": "ga_session_id",//会话id,不知道为什么这里也有。。
        "value": {
          "string_value": null,
          "int_value": "1587915555",
          "float_value": null,
          "double_value": null,
          "set_timestamp_micros": "1587917879151000" //会话生成时刻时间戳
        }
      },
      {
        "key": "first_open_time",//启动app时间
        "value": {
          "string_value": null,
          "int_value": "1574766000000",
          "float_value": null,
          "double_value": null,
          "set_timestamp_micros": "1574763609495000"
        }
      },
      {
        "key": "ga_session_number",//该用户的第几个会话
        "value": {
          "string_value": null,
          "int_value": "12",
          "float_value": null,
          "double_value": null,
          "set_timestamp_micros": "1587917879151000"
        }
      }
    ],
    "user_first_touch_timestamp": "1574763609495000", //用户打开应用或访问网站的时间
    "user_ltv": null,//用户价值,firbase没有做填充值,可认为字段
    "device": {                      //设备信息
      "category": "mobile",          //设备类型,这里是手机,可能有pc,平板等
      "mobile_brand_name": "Samsung",//手机品牌
      "mobile_model_name": "SM-C7000",//型号
      "mobile_marketing_name": "Galaxy C7",// 手机市场名
      "mobile_os_hardware_model": "SM-C7000",//系统型号
      "operating_system": "ANDROID",//系统类型
      "operating_system_version": "7.0",//系统版本
      "vendor_id": null,//IDFV,应用开发商标识符(仅在未收集到 IDFA 时存在),在同一个设备上来自同一个应用开发商的所有App,IDFV的值是相同的;不同的应用开发商运行在同一个设备上IDFV值不同;如果用户将属于该应用开发商的所有App都卸载,则IDFV的值会被重置,即使再重装此开发商的App,IDFV的值也和之前不同
      "advertising_id": null,//谷歌广告id,即IDFA,一般具有谷歌服务的设备才有,可认为重置
      "language": "en-us",//手机系统语言
      "is_limited_ad_tracking": "No",//是否屏蔽广告追踪;目前ios14.0版本已经默认屏蔽广告追踪了
      "time_zone_offset_seconds": "10800",//与格林尼治标准时间 (GMT) 的时差(以秒为单位)
      "browser": null,//浏览器,适用于H5应用和web端
      "browser_version": null,//浏览器版本,适用于H5应用和web端
      "web_info": null//网站的信息记录,适用于H5应用和web端
    },
    "geo": {  //地理位置
      "continent": "Asia",//事件所在的大洲(基于IP地址解析)
      "country": "China",//事件所在的国家/地区(基于IP地址)
      "region": "HongKong",//事件所在的区域(基于IP地址)
      "city": "HongKong",//事件所在的城市(基于IP地址)
      "sub_continent": "Eastern Asia",//报告的事件所在的次大陆,如亚洲又分东亚,东南亚等
      "metro": "(not set)" //事件所在的都是(基于IP地址)
    },
    "app_info": { //app信息
      "id": "com.tencent.mm",//应用软件包的包名
      "version": "3.4.0",//版本号
      "install_store": null,//表示该应用是通过哪个应用商店安装的。
      "firebase_app_id": "1:1111111111:android:11111111111",//与应用关联的Firebase应用ID
      "install_source": "com.android.vending" //安装商店包名
    },
    "traffic_source": {     //流量来源
      "name": null,//先获取到用户的营销广告系列的名称
      "medium": "organic",//先获取到用户的媒介名称
      "source": "google-play"//先获取到用户的广告联盟的名称
    },
    "stream_id": "1181257779", //数据流的数字ID
    "platform": "ANDROID",//应用的开发平台
    "event_dimensions": null,//事件维度,未使用
    "ecommerce": null,//电子商务相关的信息,这里不适用
    "items": []
  }

相关文章