- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对嵌套数据的概念相对较新,并试图了解正确的方法来扁平化 BigQuery ( https://support.google.com/analytics/answer/3437719?hl=en ) 中的一些 GA 数据。
现在给出一些上下文,对于每个访问者 session ,我试图捕获查看的产品 SKU 列表(详细 View )以及是否有交易,交易 id。根据我的估计,在做了一些研究之后,最简单的方法是这样的,使用 LEFT JOINS 来恢复所有内容:
SELECT fullVisitorId as uId, visitId as vId, h.transaction.transactionId as
trId, STRING_AGG(p.productSKU, "|") as skus
FROM
`test-bigquery.12345678.ga_sessions_*` t
LEFT JOIN UNNEST(hits) h
LEFT JOIN UNNEST(h.product) p
WHERE
_TABLE_SUFFIX = '20170709'
AND h.eCommerceAction.action_type = '2'
GROUP BY uId, vId, trId
WITH skus AS
(SELECT fullVisitorId as uId, visitId as vId, STRING_AGG(p.productSKU, "|") as skus
FROM
`test-bigquery.12345678.ga_sessions_*` t
LEFT JOIN UNNEST(hits) h
LEFT JOIN UNNEST(h.product) p
WHERE
_TABLE_SUFFIX = '20170709'
AND h.eCommerceAction.action_type = '2'
GROUP BY uId, vId),
transactions AS
(SELECT fullVisitorId as uId_trans, visitId as vId_trans, h.transaction.transactionId as trId
FROM
`test-bigquery.12345678.ga_sessions_*` t
LEFT JOIN UNNEST(hits) h
WHERE
_TABLE_SUFFIX = '20170709'
AND h.transaction.transactionId IS NOT NULL
GROUP BY uId_trans, vId_trans, trId)
SELECT skus.uId, skus.vId, transactions.trId, skus.skus
FROM skus
LEFT JOIN transactions ON transactions.vId_trans = skus.vId AND transactions.uId_trans = skus.uId
最佳答案
你犯的错误发生在这一行:AND h.eCommerceAction.action_type = '2'
如果您检查 ga sessions schema 字段 action_type
,您会看到当客户刚刚看到产品时它的值为“2”,而当交易发生时它的值为“6”。因此,如果您仅过滤掉等于“2”的操作,您将无法获得交易,因为它们的值为“6”。
在您的第二个查询中,请注意您对 transactions
的查询不再过滤掉操作为“2”的位置,而是过滤掉 trasactionId
不为空的位置,因此您现在可以成功检索这些行。
还有一些方法可以极大地优化查询,例如:
SELECT
fullvisitorid,
visitid,
ARRAY(SELECT STRUCT(prods.productsku AS sku, MAX(IF(hits.ecommerceaction.action_type = '6', hits.transaction.transactionID, NULL)) AS transactionID) FROM UNNEST(hits) hits, UNNEST(hits.product) prods WHERE hits.ecommerceaction.action_type IN ('2', '6') GROUP BY prods.productsku) result
FROM `test-bigquery.12345678.ga_sessions_*`
WHERE TRUE
AND _TABLE_SUFFIX = '20170709'
AND EXISTS(SELECT 1 FROM UNNEST(hits) hits WHERE hits.ecommerceaction.action_type IN ('2', '6'))
LIMIT 1000
JOIN
和
UNNEST
操作,并充分利用了数据中的 ARRAYs 和 STRUCTs 结构)。
关于sql - BigQuery UNNEST 无结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45032199/
大家好,这次我遇到了一个新的数组分组错误,我将与您分享我正在咨询的表的架构,以便您告诉我解决方案。我尝试使用 ARRAY_TO_STRING 但在这种情况下它没有成功...... SELECT
有没有更简洁的 Pythonic 方法来取消嵌套这个字典列表? 示例: features = [{'annual_sales_revenue': {'definition': 'yearly reve
我正在尝试为一组以超前/滞后方式运行的过滤器创建绘图。 关于超前/滞后的简短描述: 当一个新的过滤器上线时,它被置于滞后位置,这意味着水在通过初级(又名铅)过滤器后通过它。当超前过滤器堵塞时,当前滞后
我正在尝试用另一张 table 制作一张 table 。原始表中有一行看起来像这样: ------------------------ | col1 | col 2 | col 3 | -------
Google Analytics BigQuery 表的结构如下(旧版 SQL 表示法 - 仅显示相关字段): visitId: INTEGER hits:
我正在尝试用另一张 table 制作一张 table 。原始表中有一行看起来像这样: ------------------------ | col1 | col 2 | col 3 | -------
我想创建一个 View ,并对 unnest 函数的每个结果进行一些数据处理。 在我的专栏 column2 中,我有: “12345” “123456” “12345,123456”或更多号码 我想做
保证函数 unnest() 将按这些顺序返回值,它们是如何定位的? 也就是说,例如: arr (INTEGER[]) --------------- {{3,5},{33,3}} 这个查询: SELE
自从更新到 tidyr 版本 1.0.0 以来,我在取消嵌套数据帧列表时开始遇到错误。 错误出现是因为列表中的一些数据框包含一列所有 NA 值(逻辑),而其他数据框包含相同的列但有一些字符值(字符)。
我无法弄清楚我的代码的哪一部分是错误的。 我使用了 UNNEST 函数,但错误消息仍然存在 在 Google Bigquery 中“无法访问类型为 ARRAY> 的值上的字段 productSKU”。
我对嵌套数据的概念相对较新,并试图了解正确的方法来扁平化 BigQuery ( https://support.google.com/analytics/answer/3437719?hl=en )
我有以下data.frame: df df id first.date second.date third.date fourth.date 1 1 2014-01-01 2015-01-0
我有一个物化 View (约 10 万行),其中有一个 intarray 列 feature_value_ids。我想要的是根据物化 View 的某些条件从该列中选择所有唯一 ID 此查询运行正常,大
假设我有一个可能重复的字符串数组 [a,a,b,c,a,b,c,d] 我想取消嵌套数组,以便我可以获得索引,以及该元素已在数组中取消嵌套的次数。我的所有数组都相对较短(25 个元素或更少)。 我的预期
这两个 Postgres 函数调用返回相同的结果,而我希望后者保留其嵌套数组结构。我该怎么做? SELECT * FROM unnest('{1, 10, 100, 2, 11, 101}'::int
我尝试了 this post 中的解决方案但我仍然遇到错误。 查询: SELECT unnest(team) FROM table_of_teams WHERE team LIKE '%akg%';
我正在尝试运行第 9.18 节中表 7.49 中的最后一个示例。数组函数和运算符 1 : SELECT unnest(ARRAY[1,2],ARRAY['foo','bar','baz']); 它抛出
给定一个不同的有序整数数组,我想取消嵌套数组并为每批连续整数分配一个组号。 例如:{2,3,5,7,8,9,10,20,21,25} 应该返回 elem | group_nr -----+------
我想写这样的东西 create index on thread(unnest(tags)); 但是我得到了错误 ERROR: index expression cannot return a set
我在一个 UDF 中有一个查询(如下所示),它 unnest() 是一个整数数组并针对它进行连接,我已经在我的 pgplsql UDF 中创建了一个本地临时表,因为我知道这一点作品。是否可以直接在查询
我是一名优秀的程序员,十分优秀!