如何使用自定义维度作为唯一标识符连接 BigQuery 中的表

Posted

技术标签:

【中文标题】如何使用自定义维度作为唯一标识符连接 BigQuery 中的表【英文标题】:How to Join Tables in BigQuery Using a Custom Dimension as a Unique Identifier 【发布时间】:2018-10-24 13:11:28 【问题描述】:

我想将我的 Google Analytics 表与 Google BigQuery 中的另一个表连接起来,但我想使用自定义维度作为我的唯一标识符。以下是我到目前为止的查询,但它不喜欢我使用自定义维度 #3 作为唯一标识符的语法。这是我收到的错误消息:

**无法在 [6:26] 访问类型为 ARRAY> 的值上的字段索引**

有什么想法可以让我完成这项工作吗?

SELECT
*
FROM
  `wehco-bi.64884663.ga_sessions_20180928` AS GA, UNNEST(hits) AS hits
  <br/>LEFT JOIN `wehco-bi.BlueConic.ao` AS BC
  <br/>ON GA.customDimensions.index.3 = BC.bc_profile_id
<br/>LIMIT 100

【问题讨论】:

为什么你的查询中有 标签?? 【参考方案1】:

我不建议加入整个 ga_sessions 表。仅选择您需要的列(更高效且更便宜),然后才能使用您需要的自定义维度将它们从阵列中取出。最简单的方法是创建子查询。

with base as (
SELECT
DATE,
(SELECT value FROM UNNEST(hits.customDimensions) WHERE index=1 LIMIT 1) AS hit_level_cd1,
(SELECT value FROM UNNEST(t.customDimensions) WHERE index=3 LIMIT 1) session_level_cd3
FROM `wehco-bi.64884663.ga_sessions_20180928` AS t, UNNEST(hits) AS hits
)
SELECT DATE, hit_level_cd1,session_level_cd3
FROM base AS GA
LEFT JOIN
`wehco-bi.BlueConic.ao` AS BC
ON GA.session_level_cd2 = BC.bc_profile_id
LIMIT 100

首先我创建了一个临时基表,其中我取消了自定义维度的嵌套(我为会话和命中级别都做了显示差异),然后我使用其中一个将它们加入到新表中,就像你尝试做的那样。

【讨论】:

【参考方案2】:

如果你想使用数组,我建议从这里开始https://cloud.google.com/bigquery/docs/reference/standard-sql/arrays#accessing-array-elements

您要尝试做的事情必须使用像这样的不同语法来完成

GA.customDimensions[OFFSET(2)]

它将访问数组中的第三个元素。

【讨论】:

以上是关于如何使用自定义维度作为唯一标识符连接 BigQuery 中的表的主要内容,如果未能解决你的问题,请参考以下文章

如何获取应用了多个维度的自定义 Firebase 事件的唯一用户数?

使用 OAuth 代码流时,如何使用用户定义的唯一标识符注册新用户?

如何在 ibeacon 中使用唯一标识符?

星型模式 - 外部标识符事实或维度?

如何定义维度在 ssas 中使用的连接

如何每天为每个唯一标识符快速创建一行?