我是StandardSQL的新手,并希望为安装在指定日期(2017年6月1日)的用户导出Raw BigQuery日志数据,并在安装日期之后安装第一个3周的会话数据(D0-D20)
#StandardSQL
SELECT user_dim.first_open_timestamp_micros, user_dim.app_info.app_instance_id, event_dim.date, event_dim.name, event_dim.timestamp_micros, event_dim.previous_timestamp_micros
FROM `your_table_id.app_events_*`
WHERE _TABLE_SUFFIX BETWEEN '20170601' AND '20170621' AND
(SELECT user_dim.first_open_timestamp_micros
FROM UNNEST(user_dim) AS user
WHERE user.first_open_timestamp_micros BETWEEN 1496275200000 AND 1496361600000);
我只得到以下输出:“UNNEST中引用的值必须是数组.UNNEST包含STRUCT类型的表达式。”我的初始问题是:我如何将其转换为数组,给我适当的输出?
米哈伊尔回答后更新:
执行了以下查询,但未提供任何数据作为输出。我知道应该有用户应该出现,因为如果我预览实际的表(查看截图),我会看到表中存在的值应该是输出的一部分(但不是)。
#standardSQL
SELECT
user_dim.first_open_timestamp_micros,
user_dim.app_info.app_instance_id,
event.date, event.name,
event.timestamp_micros,
event.previous_timestamp_micros
FROM `your_table_id.app_events_*`, UNNEST(event_dim) AS event
WHERE _TABLE_SUFFIX BETWEEN '20170601' AND '20170621'
AND user_dim.first_open_timestamp_micros BETWEEN 1496275200000 AND 1496361600000
LIMIT 10;
实际表格的屏幕截图:
转换时间戳,表明上面的会话确实应该出现在2 user_dim.first_open_timestamp_micros-results的中间,但不是......
1496275200000已转换: 假设此时间戳以毫秒为单位: 格林尼治标准时间:2017年6月1日星期四12:00:00 AM 您的时区:2017年6月1日星期四上午2:00:00 GMT + 02:00 DST
1496353126947000已转换: 假设此时间戳以微秒(1 / 1,000,000秒)为单位: 格林尼治标准时间:2017年6月1日星期四9:38:46.947 PM 您的时区:2017年6月1日星期四11:38:46.947 PM GMT + 02:00 DST
1496361600000已转换: 假设此时间戳以毫秒为单位: 格林尼治标准时间:2017年6月2日星期五12:00:00 AM 您所在的时区:2017年6月2日星期五格林威治标准时间上午2:00:00 +夏令时02:00
问题:
答案 0 :(得分:1)
请尝试以下
我假设 - user_dim
为record
,event_dim
为record, repeated
#standardSQL
SELECT
user_dim.first_open_timestamp_micros,
user_dim.app_info.app_instance_id,
event.date, event.name,
event.timestamp_micros,
event.previous_timestamp_micros
FROM `your_table_id.app_events_*`, UNNEST(event_dim) AS event
WHERE _TABLE_SUFFIX BETWEEN '20170601' AND '20170621'
AND user_dim.first_open_timestamp_micros BETWEEN 1496275200000 AND 1496361600000