我的查询有两个问题。查询的思想是对水平eventInfo数据进行列列,然后将其连接到另一个具有特定名称数据的表中。
下面是一个基本的查询:
with eventData as (
select
concat(fullVisitorId, ' ', cast(VisitId as string)) sessionId, date as date,
hit.hour as checkinHour, hit.minute as checkinMin,
(select array_agg(hit.eventInfo.eventAction) from UNNEST(hits) hit where hit.eventInfo.eventCategory = 'foo') as foo_value,
(select array_agg(struct(hit.eventInfo.eventAction)) as val from UNNEST(hits) hit where hit.eventInfo.eventCategory = 'submit_checkin') as names
FROM `web-analytics.192016109.ga_sessions_20191223`,
UNNEST(hits) as hit
)
select
sessionId, date,
max(checkinHour) chkHr, max(checkinMin) as chkMin, # end of transaction
max(foo_value[ordinal(ARRAY_LENGTH(foo_value))]) as foo_value,
names.val
from eventData,
unnest (names) as names
group by sessionId, date

任何帮助都将受到感谢,因为我不是这方面的专家。假日快乐!
发布于 2020-01-02 17:41:39
我找到了答案。我需要使用names.eventAction而不是names.val。这是因为当我取消嵌套名称时,val结构就会被压平。所以技术上已经不存在了。我还假设val是字段的名称,但val是结构的名称。
发布于 2019-12-30 09:50:52
对于第一项,您可能正在处理本应是数组的空值。索引超出界限的错误是由序数 函数引起的。
对于第二项,您应该尝试使用左联接而不是",“例如:
from eventData left join
unnest (names) as names
group by sessionId, date结束语:
from eventData,
unnest (names) as names
group by sessionId, date当您有null数组时,您可能会丢失一些执行unnest的数据,因此您可以使用left join来避免这种情况。
只有一个问题:是否使用names列来做任何事情?在您的查询中,本专栏似乎没有存在的理由。
编辑1:
尝试使用names.eventAction而不是names.val。而且,LEFT JOIN似乎是最好的选择。
with eventData as ( select concat(fullVisitorId, ' ', cast(VisitId as string)) sessionId, date as date, hit.hour as checkinHour, hit.minute as checkinMin, (select array_agg(hit.eventInfo.eventAction) from UNNEST(hits) hit where hit.eventInfo.eventCategory = 'foo') as foo_value, (select array_agg(struct(hit.eventInfo.eventAction)) as val from UNNEST(hits) hit where hit.eventInfo.eventCategory = 'submit_checkin') as names FROM `data-to-insights.ecommerce.web_analytics`, UNNEST(hits) as hit ) select
sessionId,
date,
max(checkinHour) chkHr, max(checkinMin) as chkMin, # end of transaction
max(foo_value[ordinal(ARRAY_LENGTH(foo_value))]) as foo_value,
names.eventAction name_val from eventData left join unnest (names) as names group by sessionId, date, name_valhttps://stackoverflow.com/questions/59515810
复制相似问题