首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bigquery数组索引5超出了范围。

Bigquery数组索引5超出了范围。
EN

Stack Overflow用户
提问于 2019-12-28 23:39:01
回答 2查看 1.1K关注 0票数 0

我的查询有两个问题。查询的思想是对水平eventInfo数据进行列列,然后将其连接到另一个具有特定名称数据的表中。

  1. 下面的代码只适用于一个sessionId。如果没有where子句,我将得到以下错误:错误:数组索引5超出界限(溢出)。解决了。我混淆了列名。 arg to序号与我所取的最大值.不同
  2. 第二个问题是,虽然我是几乎所有数组的最后一行,但是有一个名称数组,我想在最终结果的基础上取消它。示例输出为每个sessionId返回一行,但是如果名称数组有多个值,则最终结果应该是每个人一行,每个会话if /日期/签入组合框。我不知道为什么我的名字数组取消嵌套不起作用.现在我得到一个字段名val在中不存在。这是在names.val线路上。

下面是一个基本的查询:

代码语言:javascript
复制
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

任何帮助都将受到感谢,因为我不是这方面的专家。假日快乐!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-02 17:41:39

我找到了答案。我需要使用names.eventAction而不是names.val。这是因为当我取消嵌套名称时,val结构就会被压平。所以技术上已经不存在了。我还假设val是字段的名称,但val是结构的名称。

票数 0
EN

Stack Overflow用户

发布于 2019-12-30 09:50:52

对于第一项,您可能正在处理本应是数组的空值。索引超出界限的错误是由序数 函数引起的。

对于第二项,您应该尝试使用左联接而不是",“例如:

代码语言:javascript
复制
 from eventData left join
 unnest (names) as names
 group by sessionId, date

结束语:

代码语言:javascript
复制
from eventData,
 unnest (names) as names
 group by sessionId, date

当您有null数组时,您可能会丢失一些执行unnest的数据,因此您可以使用left join来避免这种情况。

只有一个问题:是否使用names列来做任何事情?在您的查询中,本专栏似乎没有存在的理由。

编辑1:

尝试使用names.eventAction而不是names.val。而且,LEFT JOIN似乎是最好的选择。

代码语言:javascript
复制
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_val
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59515810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档