如何使用Google Analytics(分析)自定义参数的示例从Google BigQuery中以嵌套结构卸载数据

图片

Google BigQuery是全球公司使用的流行云数据库。 使用原始Google Analytics(分析)数据特别方便:在GA 360中,只需单击几下即可配置与BigQuery的集成,而对于免费版本,则具有第三方脚本和模块。

在Google Analytics(分析)的原始数据中,每个记录(行)都对应一个会话。 在此类条目内是嵌套字段,它们对应于会话的点击:

图片

对于不了解如何使用它并卸载此类数据的用户而言,这样的嵌套数据结构通常会造成混乱。

以Google Analytics(分析)自定义参数为例,我将尝试“在手指上”解释嵌入式数据如何存储在Google BigQuery中以及如何上传。

给定的查询代码有效,它们可用于解决问题,替换其表名和所需的“自定义维度”索引号。

•卸货线
•卸载时保持嵌套结构
•替换用户参数值的示例

基础知识


BigQuery支持2种SQL方言:旧版和标准版。 Google建议使用更新的SQL标准,我们将在该标准上编写要卸载的查询。
至少使用过SQL的每个人都知道标准的查询构造:

SELECT *  * FROM *  * WHERE * * 

如果表结构简单,单元格中没有嵌套其他字段,则此设计有效:

图片

我们考虑带有嵌套字段的表。 此类表的结构(例如Google Analytics(分析)用户参数):

图片
BQ中的自定义GA选项

在Google BigQuery中,这样的表将具有以下列名(分隔符“。”显示嵌套结构):

图片

那么,如何从嵌套字段中卸载数据呢?

卸载行


返回表格,并以BQ中的GA自定义参数为例。

customDimensions.indexcustomDimensions.value会话用户定义的自定义维度的索引和值。

hits.customDimensions.indexhits.customDimensions.value列命中自定义维度的索引和值。

在Google BigQuery中,还有另一级用户参数操作-产品。 Google BigQuery中产品“自定义维度”的名称和值位于hits.product.customDimensions.indexhits.product.customDimensions.value列中。 通过按命中用户参数的类推卸载它们,您只需要考虑另一层嵌套即可。

会话和用户级别的用户选项


如果我们需要为每个日期卸载会话(自定义)自定义维度的值而不保存嵌套结构(即逐行),该怎么办?

为了回答这个问题,让我们仔细看一下BQ 带有GA用户参数的表格
它显示customDimensions列单元格的值是另一个表

图片

在主查询中对该表进行子查询就足够了:

 SELECT --   date, --    value (SELECT value --   customDimensions,     t FROM t.customDimensions --       WHERE index = 1) AS customDimensions1 FROM --    t     `project.dataset.tablename` AS t 

输出是一个表:

图片

如果需要添加具有另一个用户参数值的列,则进行另一个子查询:

 SELECT date, (SELECT value FROM t.customDimensions WHERE index = 1) AS customDimensions1, --      customDimensions (SELECT value FROM t.customDimensions WHERE index = 2) AS customDimensions2 FROM `project.dataset.tablename` AS t 

我们得到以下内容:

图片

命中级别的自定义选项


命中用户参数的卸载方式与会话(用户)参数相同,只是需要对嵌套命中表执行子查询。 换句话说,Google Analytics(分析)原始数据表中的hits列单元格的值是一个嵌套表,其中customDimensions表被嵌套在其中:

图片

逐行命中用户参数的下载请求如下:

 SELECT --   date, --    value (SELECT value --   customDimensions,     h FROM h.customDimensions --       WHERE index = 3) AS customDimensions3 FROM --    t     `project.dataset.tablename` AS t, --   t.hits  h     t.hits AS h 

查询结果将是一个表:

图片

您可以卸载多个命中用户参数并添加hitNumber参数(会话中命中的序列号):

 SELECT date, h.hitNumber AS hitNumber, (SELECT value FROM h.customDimensions WHERE index = 3) AS customDimensions3, --        h.customDimensions (SELECT value FROM h.customDimensions WHERE index = 4) AS customDimensions4 FROM `project.dataset.tablename` AS t, t.hits AS h 

获取表:

图片

会话(用户)+命中用户参数


如果在一个查询中我们想卸载会话并点击用户参数,则只需要对主表和嵌套表进行必要的子查询:

 SELECT date, h.hitNumber AS hitNumber, --     (SELECT value FROM t.customDimensions WHERE index=1) AS customDimensions1, (SELECT value FROM t.customDimensions WHERE index=2) AS customDimensions2, --     (SELECT value FROM h.customDimensions WHERE index=3) AS customDimensions3, (SELECT value FROM h.customDimensions WHERE index=4) AS customDimensions4 FROM `project.dataset.tablename` AS t, t.hits AS h 

查询结果将获得的表:

图片

保持嵌套结构的同时卸载


在替换Google BigQuery中的用户参数值时,可能需要这种卸载。

例子
在Google Analytics(分析)中,来自俄罗斯(俄罗斯)的用户将完整格式的国家/地区名称传输到索引为12的会话用户参数和索引为25的点击用户参数。 有必要将国家格式更改为缩写:RUS。

为此,您需要将用户参数的必需值替换为用户所在的国家/地区,以替换Google BigQuery中的整个数据历史记录。

解决问题的过程:

  1. 卸载所有数据, 同时保持嵌套结构
  2. 用国家/地区替换用户参数的值
  3. 重写表

要在保留嵌套结构的同时上传数据,必须使用ARRAY函数和SELECT AS STRUCT构造。 让我们弄清楚它是什么。

ARRAY函数的语法如下:

 ARRAY(**) 

它返回一个元素数组。

将阵列与逐行记录进行比较:

图片
左边是数组,右边是行记录

如果要保存嵌套结构并卸载具有多列的数组,则必须使用ARRAY(SELECT AS STRUCT ...)

图片
嵌套数组

会话和用户级别的用户选项


为了在保持会话(自定义)自定义维度的结构的同时进行卸载,我们使用以下查询:

 SELECT date, --  ARRAY(SELECT AS STRUCT...)    ARRAY(SELECT AS STRUCT index, value FROM t.customDimensions) AS customDimensions FROM `project.dataset.tablename` AS t 

执行后,将获得一个表,其中保存了“原始” Google Analytics(分析)数据的嵌套结构:

图片

命中级别的自定义选项


要在保持嵌套结构的同时从Google BigQuery卸载命中用户参数的值,请务必注意,customDimensions表嵌套在命中表中。 换句话说,您需要进行两次ARRAY子查询(SELECT AS STRUCT ...):首先进入嵌套的hits表,然后进入嵌套在其中的customDimensions表:

 SELECT date, --    t.hits ARRAY(SELECT AS STRUCT hitNumber, --    h.customDimensions ARRAY(SELECT AS STRUCT index, value FROM h.customDimensions) AS customDimensions FROM t.hits AS h ) AS hits FROM `project.dataset.tablename` AS t 

该查询的结果将是一个表:

图片

会话(用户)+命中用户参数


与逐行卸载一样,我们需要将同一查询中的ARRAY子查询(SELECT AS STRUCT ...)组合到所需的嵌套表中:

 SELECT date, --  () Custom Dimensions ARRAY(SELECT AS STRUCT index, value FROM t.customDimensions ) AS customDimensions, --  Custom Dimensions ARRAY(SELECT AS STRUCT hitNumber, ARRAY(SELECT AS STRUCT index, value FROM h.customDimensions ) AS customDimensions FROM t.hits AS h) AS hits FROM `project.dataset.tablename` AS t 

结果是什么:

图片

替换用户参数值的示例


让我们回到我们的例子
在上一节中,我们收到了上载会话(用户)的请求,并在保持嵌套结构的同时点击了Google Analytics(分析)的用户参数。
我们用SELECT * REPLACE构造对这个查询进行补充,该构造用于用替换卸载,而CASE用来更新必要的用户参数的值:

 --      t.customDimensions  t.hits SELECT *REPLACE( --  () Custom Dimensions ARRAY(SELECT AS STRUCT index, --      CASE WHEN index=12 AND value='RUSSIA' THEN 'RUS' ELSE value END AS value FROM t.customDimensions) AS customDimensions, --  Custom Dimensions --   t.hits      h.customDimensions ARRAY(SELECT AS STRUCT *REPLACE( ARRAY(SELECT AS STRUCT index, --      CASE WHEN index=25 AND value='RUSSIA' THEN 'RUS' ELSE value END AS value FROM h.customDimensions) AS customDimensions) FROM t.hits AS h) AS hits) FROM `project.dataset.tablename` AS t 

收到此请求后,我们将获得原始表格以及来自Google Analytics(分析)的原始数据。 她将完全保留原始的嵌套结构,但是必需的用户参数的值将更改为新的。

在Google BigQuery中使用嵌套数据结构的主题并不容易。

我希望我能澄清这个问题。 但是,让我提醒您,学习如何做某事的最好方法是多练习。

Source: https://habr.com/ru/post/zh-CN473884/


All Articles