使用bigquery访问experimentId和experimentVariant

时间:2017-08-31 10:03:09

标签: sql arrays google-bigquery

我想访问experimentId和experimentVariant以及来自Google Analytics的其他参与数据。

尝试时

SELECT
  fullVisitorId,
  visitNumber,
  totals.pageviews,
  hits.page.pagePath,
  hits.experiment.experimentId,
  hits.experiment.experimentVariant

FROM  `xy_20170809`, UNNEST(hits) as hits

WHERE
   hits.type = “PAGE”

ORDER BY
   fullVisitorId ASC, visitNumber ASC

发生以下错误

  

无法访问具有类型的值的字段experimentId   ARRAY< STRUCT< experimentId STRING,experimentVariant STRING>>在

似乎没有点击hits.experiment ARRAY无法按预期工作,因此无法点击hits.page ARRAY正常工作。 我发现的唯一区别是hits.experiment是一个重复的数组,而hits.page是可以为空的。

如何访问experimentId和experimentVariant?

1 个答案:

答案 0 :(得分:2)

由于给定的fullvisitorID可能是不同测试/变体的一部分,因此字段experiment会像hits字段一样重复。

这意味着您还必须unnest

SELECT
  fullVisitorId,
  visitNumber,
  totals.pageviews,
  hits.page.pagePath,
  e.experimentId,
  e.experimentVariant
FROM  `xy_20170809`,
UNNEST(hits) as hits,
UNNEST(hits.experiment) AS e
WHERE
   hits.type = “PAGE”
ORDER BY
   fullVisitorId ASC, visitNumber ASC

我通常倾向于尽可能地避免击中击中场上的排除(因此大部分都有良好的性能和嵌套结果)。你可以做到这一点的一种方法是运行类似:

SELECT 
  fullvisitorid fv,
  ARRAY(SELECT AS STRUCT experimentID, experimentVariant FROM UNNEST(hits), UNNEST(experiment))
FROM `xy_20170809`
LIMIT 1000

但你必须分析它是否适合你。然而,如果有必要,它是您在BigQuery中使用的另一种技术。

[编辑]:

以下是仅选择具有某些变体的用户的查询:

SELECT 
  fullvisitorid fv,
  ARRAY(SELECT AS STRUCT experimentID, experimentVariant FROM UNNEST(hits), UNNEST(experiment))
FROM `xy_20170809`
WHERE ARRAY_LENGTH(ARRAY(SELECT AS STRUCT experimentID, experimentVariant FROM UNNEST(hits), UNNEST(experiment))) > 0
LIMIT 1000