记录前缀缺失
Posted
技术标签:
【中文标题】记录前缀缺失【英文标题】:Record Prefix Missing 【发布时间】:2017-01-25 21:34:27 【问题描述】:我很困惑为什么以下两个查询的列标题输出不同。
select fullVisitorId , visitNumber, visitId, visitStartTime, date,totals.visits, totals.hits, totals.pageviews, totals.timeOnSite
from 33959632.ga_sessions_20170124
返回的前 7 列具有以下名称。
访问者 ID |访问号码 |访问ID |访问开始时间 |日期 | totals.visits | totals.hits
SELECT fullVisitorId , visitNumber, visitId, visitStartTime, date,
totals.visits, totals.hits FROM `33959632.ga_sessions_20170101`
下面的结果现在删除了 Total 记录前缀。
fullVisitorId |访问号码 |访问ID |访问开始时间 |日期 | 访问次数 |命中
为什么从访问次数和点击次数中删除了总计?我们如何在结果中保留前缀名称(除了手动命名列)。
【问题讨论】:
【参考方案1】:我认为在 GA 中 - 每个模式 - totals
字段不是数组,而只是记录
所以,试试下面
#standardSQL
SELECT
fullVisitorId,
visitNumber,
visitId,
visitStartTime,
date,
STRUCT(totals.visits, totals.hits, totals.pageviews, totals.timeOnSite) AS totals
FROM `33959632.ga_sessions_20170101`
为什么从访问次数和点击次数中删除了总计?
在 SELECT 列表中,如果存在没有显式别名的表达式,BigQuery 会根据以下规则分配隐式别名。
对于标识符,别名就是标识符。例如,SELECT abc 暗示 AS abc。 对于路径表达式,别名是路径中的最后一个标识符。例如,SELECT abc.def.ghi 暗示 AS ghi。 对于使用“点”成员字段访问运算符的字段访问,别名是字段名称。例如,SELECT (struct_function()).fname 意味着 AS fname。你可以阅读更多关于Implicit aliases的信息
你可以阅读更多关于Aliases的信息
【讨论】:
【参考方案2】:如果您在标准 SQL 中选择字段路径,则结果将具有路径中叶字段的类型。如果你想生成一个结构来镜像原始结构,你可以这样做:
#standardSQL
SELECT
fullVisitorId,
visitNumber,
visitId,
visitStartTime,
date,
STRUCT(
totals.visits,
totals.hits,
totals.pageviews,
totals.timeOnSite) AS totals
FROM 33959632.ga_sessions_20170124;
这会在结果的结构中返回totals
的指示字段。
【讨论】:
我上面的代码是在标准 sql 中,我确实取消了扁平化结果的选项。但是,它仍然会从所有内容中删除记录前缀。听起来有必要使用您建议的代码吗?感谢您的回复! 啊,我明白了。 Mikhail 最终给出了相同的答案,但基本思想是,如果要在结果中保留totals
的形状,则应使用 STRUCT
运算符。如果您想在结果中包含其所有字段,另一种方法是直接选择totals
。
:o) 在我回答的时候——我认为这是两个不同的答案。但绝对是相同的概念。同意以上是关于记录前缀缺失的主要内容,如果未能解决你的问题,请参考以下文章