问题描述
我已经按照对这个问题给出的答案进行操作:BigQuery: flatten two repeated columns 但它并不完全有效,尽管它最接近我正在寻找的内容。
我有数据从应用程序从 Google Analytics 发送到 Google BigQuery。我有 10 个重复列:
event_params [RECORD REPEATED]
user_properties [RECORD REPEATED]
user_ltv [RECORD NULLABLE]
device [RECORD NULLABLE]
geo [RECORD NULLABLE]
app_info [RECORD NULLABLE]
traffic_source [RECORD NULLABLE]
event_dimensions [RECORD NULLABLE]
ecommerce [RECORD NULLABLE]
items [RECORD REPEATED]
每当有新事件时,都会有:
event_date
event_timestamp
event_name
对于每一行。这些重复的属性对于每个事件可以有不同的长度,并且在事件的索引上有对应关系。
下面是前两个重复列 event_params
和 user_properties
的快照,以及我想用这两列和其他列(如果需要)生成的内容:
这里我们看到 event_params
的长度为 7,user_properties
的长度为 4。当我运行以下代码时:
-- standardSQL
SELECT
event_name,event_params,user_properties[OFFSET(off)] AS user_properties
FROM
`yepic-2021.analytics_264796885.events_intraday_*`,UNNEST(event_params) AS event_params WITH OFFSET off
ORDER BY
event_timestamp DESC
LIMIT 50
但这会导致错误:
Array index 4 is out of bounds (overflow)
这是有道理的,因为它们的长度不同。所以我的想法是,如果有人知道如何将 null
添加到所有其他列,直到它们的长度等于具有最长长度的列,那么这将产生我想要的完全展平的输出。
这不是我想要的一个例子,其中通过在已经展平的表格上展平而导致重复的爆炸:
-- standardSQL
SELECT
event_name,user_properties
FROM
`yepic-2021.analytics_264796885.events_intraday_*`,UNNEST(event_params) AS event_params,UNNEST(user_properties) AS user_properties
ORDER BY
event_timestamp DESC
LIMIT 50
结果:
如果有人可以帮助使用这种方法或比我更了解 BigQuery 以及一种从 GA 中展平数据的简单方法,那么我将非常感谢您的帮助。
临时编辑:
这是我在 BigQuery 中尝试过的代码:
-- standardSQL
WITH data1 AS (
SELECT GENERATE_UUID() AS row_id,user_properties
FROM `yepic-2021.analytics_264796885.events_intraday_*`
),data2 AS (
SELECT *,GENERATE_ARRAY(1,GREATEST(ARRAY_LENGTH(event_params),ARRAY_LENGTH(user_properties))) ordinals
FROM data1
)
SELECT row_id,event_params[SAFE_ORDINAL(o)] event_params,user_properties[SAFE_ORDINAL(o)] user_properties
FROM data2,UNNEST(ordinals) o
结果:
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)