在 BigQuery 中定期创建视图

Posted

技术标签:

【中文标题】在 BigQuery 中定期创建视图【英文标题】:Creating views periodically in BigQuery 【发布时间】:2017-04-27 13:48:19 【问题描述】:

我目前正在使用 Firebase Analytics 将用户相关数据导出到 BigQuery。

有没有办法在 BigQuery 中自动创建一个视图(例如每 24 小时),因为 Firebase 的导出每天都会创建一个新表,或者一个视图会从每天创建的表中收集数据。 用 WebUI 可以做这些事情吗?

【问题讨论】:

【参考方案1】:

您可以在通配符表上创建一个视图,这样您就不需要每天更新它。这是一个示例视图定义,使用您之前的一个问题中的查询:

#standardSQL
SELECT
  *,
  PARSE_DATE('%Y%m%d', _TABLE_SUFFIX) AS date
FROM `com_test_testapp_android.app_events_*`
CROSS JOIN UNNEST(event_dim) AS event_dim
WHERE event_dim.name IN ("EventGamePlayed", "EventGetUserBasicInfos", "EventGetUserCompleteInfos");

假设您将此视图命名为com_test_testapp_ANDROID.event_view(确保选择的名称不包含在app_events_* 扩展中)。现在您可以运行查询来选择昨天的事件,例如:

#standardSQL
SELECT event_dim
FROM `com_test_testapp_ANDROID.event_view`
WHERE date = DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY);

或过去 7 天内的所有事件:

#standardSQL
SELECT event_dim
FROM `com_test_testapp_ANDROID.event_view`
WHERE date >= DATE_SUB(CURRENT_DATE(), INTERVAL 1 WEEK);

重要的部分是在视图的选择列表中有一个列,可让您将_TABLE_SUFFIX 限制在您感兴趣的任何时间范围内。

【讨论】:

感谢您的回答@Elliott Brossard,非常清楚。由于我希望使用的表模式与 Firebase 使用的表模式(非常)不同,我想知道是否可以创建一个新表而不是创建一个视图来定期从创建的表中自动插入数据每天通过 Firebase 导出。然后它会删除 Firebase 创建的表以减少存储的数据量。 在我的脑海中,您可以做的一件事是 set up a cron 运行查询并将结果写入其他表,然后删除它读取的 Firebase 表。跨度> 在计费方面可以吗?我的意思是,如果我从视图中选择单日,则条件是否正确传播到通配符表中,以便生成的查询仅涉及单个数据表? 是的。您可以通过在 UI 中检查查询的计费字节数来确认

以上是关于在 BigQuery 中定期创建视图的主要内容,如果未能解决你的问题,请参考以下文章

无法创建视图 - BigQuery

如何使用 UI 从 BigQuery 中的视图创建表?

如何创建使用用户定义函数的 BigQuery 视图?

BigQuery 在创建实体化视图时出现“缺少空格”错误

如何在文件中从SQL源创建BigQuery视图(Windows命令行)

BigQuery:从视图中查询时出错