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.index和
customDimensions.value是
会话和
用户定义的自定义维度的索引和值。
hits.customDimensions.index和
hits.customDimensions.value列是
命中自定义维度的索引和值。
在Google BigQuery中,还有另一级用户参数操作-产品。 Google BigQuery中
产品“自定义维度”的名称和值位于
hits.product.customDimensions.index和
hits.product.customDimensions.value列中。 通过按命中用户参数的类推卸载它们,您只需要考虑另一层嵌套即可。
会话和用户级别的用户选项
如果我们需要为每个日期卸载会话(自定义)自定义维度的值而不保存嵌套结构(即逐行),该怎么办?
为了回答这个问题,让我们仔细看一下BQ
中带有GA用户参数的
表格 。
它显示customDimensions列
中单元格的值
是另一个表 :
在主查询中对该表进行子查询就足够了:
SELECT
输出是一个表:
如果需要添加具有另一个用户参数值的列,则进行另一个子查询:
SELECT date, (SELECT value FROM t.customDimensions WHERE index = 1) AS customDimensions1,
我们得到以下内容:
命中级别的自定义选项
命中用户参数的卸载方式与会话(用户)参数相同,只是需要对嵌套命中表执行子查询。 换句话说,Google Analytics(分析)原始数据表中的hits列单元格的值是一个嵌套表,其中customDimensions表被嵌套在其中:
逐行命中用户参数的下载请求如下:
SELECT
查询结果将是一个表:
您可以卸载多个命中用户参数并添加hitNumber参数(会话中命中的序列号):
SELECT date, h.hitNumber AS hitNumber, (SELECT value FROM h.customDimensions WHERE index = 3) AS customDimensions3,
获取表:
会话(用户)+命中用户参数
如果在一个查询中我们想卸载会话并点击用户参数,则只需要对主表和嵌套表进行必要的子查询:
SELECT date, h.hitNumber AS hitNumber,
查询结果将获得的表:
保持嵌套结构的同时卸载
在替换Google BigQuery中的用户参数值时,可能需要这种卸载。
例子
在Google Analytics(分析)中,来自俄罗斯(俄罗斯)的用户将完整格式的国家/地区名称传输到索引为12的会话用户参数和索引为25的点击用户参数。 有必要将国家格式更改为缩写:RUS。为此,您需要将用户参数的必需值替换为用户所在的国家/地区,以替换Google BigQuery中的整个数据历史记录。
解决问题的过程:
- 卸载所有数据, 同时保持嵌套结构
- 用国家/地区替换用户参数的值
- 重写表
要在保留嵌套结构的同时上传数据,必须使用ARRAY函数和SELECT AS STRUCT构造。 让我们弄清楚它是什么。
ARRAY函数的语法如下:
ARRAY(**)
它返回一个元素数组。
将阵列与逐行记录进行比较:
左边是数组,右边是行记录如果要保存嵌套结构并卸载具有多列的数组,则必须使用
ARRAY(SELECT AS STRUCT ...) :
嵌套数组会话和用户级别的用户选项
为了在保持会话(自定义)自定义维度的结构的同时进行卸载,我们使用以下查询:
SELECT date,
执行后,将获得一个表,其中保存了“原始” Google Analytics(分析)数据的嵌套结构:
命中级别的自定义选项
要在保持嵌套结构的同时从Google BigQuery卸载命中用户参数的值,请务必注意,customDimensions表嵌套在命中表中。 换句话说,您需要进行两次ARRAY子查询(SELECT AS STRUCT ...):首先进入嵌套的hits表,然后进入嵌套在其中的customDimensions表:
SELECT date,
该查询的结果将是一个表:
会话(用户)+命中用户参数
与逐行卸载一样,我们需要将同一查询中的ARRAY子查询(SELECT AS STRUCT ...)组合到所需的嵌套表中:
SELECT date,
结果是什么:
替换用户参数值的示例
让我们回到我们的
例子 。
在上一节中,我们收到了上载会话(用户)的请求,并在保持嵌套结构的同时点击了Google Analytics(分析)的用户参数。
我们用SELECT * REPLACE构造对这个查询进行补充,该构造用于用替换卸载,而CASE用来更新必要的用户参数的值:
收到此请求后,我们将获得原始表格以及来自Google Analytics(分析)的原始数据。 她将完全保留原始的嵌套结构,但是必需的用户参数的值将更改为新的。
在Google BigQuery中使用嵌套数据结构的主题并不容易。
我希望我能澄清这个问题。 但是,让我提醒您,学习如何做某事的最好方法是多练习。