我正在尝试使用row_number将键分配给bigquery中的每个不同值。但这给了资源错误。那么我可以使用array_aggegate函数实现相同的功能吗?
代码:
select a.values
, a.type
, max_key + row_number() over(order BY a.values) key
, a.event_date
from gaid_raw a
LEFT JOIN existing_key_table e
on e.type = a.type
and e.values = a.values
left join (
select type, coalesce(max(key),0) max_key from existing_key_table group by 1
) e1
on e1.type = a.type
where e.key is null
答案 0 :(得分:1)
我不确定这是否可以解决您的问题,但是我认为这是您想要的逻辑:
select gr.values, gr.type
coalesce(max_key, 0) + row_number() over (partition by gr.type order by gr.values) as key,
gr.event_date
from gaid_raw gr left join
(select type, max(key) as max_key
from existing_key_table
group by 1
) e
on e.type = gr.type
where not exists (select 1
from existing_key_table e
where e.type = gr.type and e.values = gr.values
);
对于无法识别的类型,您需要在外部coalesce()
中使用select
,而不是子查询。
您似乎还想根据类型分配顺序号。
如果仍然遇到资源错误,有一种方法可以解决此问题,但是还需要有关数据的更多信息。但是,我过去曾为此类键使用随机值-假设不需要排序。发生碰撞的机会很小,因此它已经可以处理相当大的数据。
现在,我将GENERATE_UUID()
用作唯一ID。