Google bigquery BigQuery交叉连接失败

Google bigquery BigQuery交叉连接失败,google-bigquery,Google Bigquery,我正在尝试按日期提取用户活动。我正在尝试使用交叉连接和where子句构建一个自创建用户帐户以来每天的表。在我的例子中,交叉连接是不可避免的。日历表只是过去365天365行的所有日期的列表。用户表有~1b行 以下是因资源不足而失败的查询: SELECT u.user_id as user_id, date(u.created) as signup_date, cal.date as date, from (select date(dt) as date from [dw.calenda

我正在尝试按日期提取用户活动。我正在尝试使用交叉连接和where子句构建一个自创建用户帐户以来每天的表。在我的例子中,交叉连接是不可避免的。日历表只是过去365天365行的所有日期的列表。用户表有~1b行

以下是因资源不足而失败的查询:

SELECT
  u.user_id as user_id,
  date(u.created) as signup_date,
  cal.date as date,
from (select date(dt) as date from [dw.calendar] where date(dt) < 
CURRENT_DATE() ) cal
  cross join each dw.user u
where
  date(u.created) <= cal.date

基于,交叉联接甚至不支持each子句。如何执行上述操作以成功创建表?

您不需要填写空天数来计算每日计数,也不需要执行窗口函数来获取合计金额,因此您甚至不需要日历表。要做到这一点,您需要在窗口中使用范围vs.行。有关BigQuery标准SQL,请参见下面的示例

标准SQL 选择 用户id、已创建、每日计数、, 数完 按用户划分\u id按创建顺序\u unix\u日期描述 范围介于当前行和以下6行之间 每周平均 从“dw.user”中,取消将[UNIX\u DATEcreated]作为已创建的\u UNIX\u日期 按用户id订购,已创建描述 我不确定您的表的确切模式/类型,所以可能需要分别调整上面的内容,但同时您可以测试/使用下面的虚拟数据

标准SQL 使用'dw.user'作为 选择 创建日期, CAST1+10*RAND作为INT64作为用户id, CAST100*兰特作为INT64作为每日计数 从UNNEST生成日期数组“2017-01-01”,“2017-04-26”作为日期 选择 用户id、已创建、每日计数、, 数完 按用户划分\u id按创建顺序\u unix\u日期描述 范围介于当前行和以下6行之间 每周平均 从“dw.user”中,取消将[UNIX\u DATEcreated]作为已创建的\u UNIX\u日期 按用户id订购,已创建描述
确切错误:查询失败错误:查询超出了第1层的资源限制。需要第6层或更高级别。使用可能会更好,但即使在这种情况下,我怀疑您需要启用更高的计费层,因为交叉连接会产生多少行。请解释-为什么您首先需要它?这只会分解行数,而不传递任何值!最有可能的情况是,您计划将其作为一个中间/临时表来处理,而不是-因此我建议您将重点放在最终目标上,而不是实现跨产品的内容。当然,除非你有充分的理由,那么请解释一下,我需要通过按天、周、月、年汇总用户活动来找出原因。我将需要计算每日计数,并执行窗口函数,以获得聚合的总和。每天我都需要一个值,如果缺少,则为0。选择id、daily_count、SUMdaily_count,按当前行和第6行之间的d DESC行划分,从[dw.calendar]选择datedt作为日期,其中datedt