繁体   English   中英

不同的结果 UNNEST BigQuery

[英]Different results UNNEST BigQuery

我不明白这些查询之间的区别是什么:

SELECT event_timestamp ,user_pseudo_id, value.double_value as tax
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`, UNNEST(event_params) as event_params
WHERE event_name = "purchase" and event_params.key = "tax" 

另一个查询是:

SELECT event_timestamp ,user_pseudo_id, 
(SELECT value.double_value FROM UNNEST(event_params) WHERE key = "tax") as tax
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*` 
WHERE event_name = "purchase"

在第一个查询中,我得到 5.242 个寄存器,在第二个查询中得到 5.692 个。 错误是什么?

谢谢!

这取决于您将什么定义为准确。 行数不匹配的原因是处理税字段的方式。 您可以通过运行以下查询来查看差异:

with unnested as (
    SELECT event_timestamp ,user_pseudo_id, value.double_value as tax
    FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`, UNNEST(event_params) as event_params
    WHERE event_name = "purchase" and event_params.key = "tax"
 ) 
SELECT events.event_timestamp ,events.user_pseudo_id, 
(SELECT value.double_value FROM UNNEST(event_params) WHERE key = "tax") as tax
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*` events
LEFT JOIN unnested un
 on events.event_timestamp=un.event_timestamp
 and events.user_pseudo_id=un.user_pseudo_id
WHERE events.event_name = "purchase"
and un.event_timestamp is null
;

如果您从该列表中挑选出一条记录并使用以下两个查询进行调查:

    SELECT *
    FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`, UNNEST(event_params) as event_params
    WHERE 1=1
    -- and event_name = "purchase" and event_params.key = "tax"
    and event_name = "purchase" and event_timestamp=1608955242902332 and user_pseudo_id='43627350.3807676886';


    SELECT 
    *,
    (SELECT value.double_value FROM UNNEST(event_params) WHERE key = "tax") as tax
    FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*` events
    WHERE events.event_name = "purchase"
    and event_timestamp=1608955242902332 and user_pseudo_id='43627350.3807676886'
    ;

第一个查询从最终集中过滤掉没有税字段的记录,而第二个查询返回具有 null 税值的记录。 如果注册的号码取决于税字段中值的存在,则 5242 值是正确的号码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM