'命中'是一个重复的记录。所以' hits.customDimensions'在'点击'。
我在标准SQL中有这个Google Big Query:
SELECT
visitNumber,
h.time, h.hour, h.minute,
h.page.PagePath,
h.customDimensions.value as language, /* not working */
from
`550335029.ga_sessions_*` , UNNEST(hits) as h
where
h.customDimensions.index = 3 /* not working */
我正在寻找访问hits.customDimensions.index和hits.customDimensions.value的正确语法。如果我删除了两个不工作的'查询运行的行。
错误如下所示:
GenericGBQException: Reason: invalidQuery, Message: Cannot access field customDimensions on a value with type ARRAY<STRUCT<hitNumber INT64, time INT64, hour INT64, ...>> at [40:46]
答案 0 :(得分:1)
在下面尝试BigQuery Standard SQL
SELECT
visitNumber,
h.time,
h.hour,
h.minute,
h.page.PagePath,
d.value AS language
FROM
`550335029.ga_sessions_*`,
UNNEST(hits) AS h,
UNNEST(h.customDimensions) AS d
WHERE d.index = 3
答案 1 :(得分:1)
我还发现,使用标准SQL时可以观察到性能提升,并避免一些unnesting
操作(但这取决于您的操作)。
作为一个例子,这是解决这个问题的另一种方法:
SELECT
visitNumber,
h.time,
h.hour,
h.minute,
h.page.PagePath,
(select value from unnest(h.customDimensions) where index = 3) AS LANGUAGE
FROM
`550335029.ga_sessions_*`,
UNNEST(hits) AS h
WHERE 1 = 1
AND REGEXP_EXTRACT(_table_suffix, r'.*_(.*)') BETWEEN FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
AND FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 0 DAY))
and exists(select 1 from unnest(h.customDimensions) dim where dim.index = 3)
你现在所做的事情并没有太大的区别,但要记住在BQ中运行的不同技术很有意思,因为它们最终会使你的查询速度提高几十倍。