我想为符合某些条件的行的组分配唯一的ID。在以下示例中,我想基于数据和硬件
分配唯一的ID示例:
date, hardware, color
1990, 8989, blue
1990, 8989, yellow
1991, 8989, blue
1991, 3333, blue
1991, 8989, black
预期结果
date, hardware, color, ID
1990, 8989, blue, 1
1990, 8989, yellow, 1
1991, 8989, blue, 2
1991, 3333, blue, 3
1991, 8989, black, 2
如何在BigQuery中获得此结果?
答案 0 :(得分:3)
您可以使用DENSE_RANK
:
select t.*,dense_rank() over (order by date, hardware) as id
from table_name t;
答案 1 :(得分:2)
我会做的:
with
x as (
select distinct date, hardware from my_table
),
y as (
select
date,
hardware,
row_number() over(order by date, hardware) as rn
from x
)
select
t.*, y.rn
from my_table t
join y on y.date = t.date and y.hardware = t.hardware
答案 2 :(得分:1)
在没有partition by
子句的情况下,BigQuery中的窗口函数在大数据上可能会出现问题。它们可能会耗尽资源。
另一种替代方法是使用哈希分配ID:
select t.*, farm_fingerprint(cast(date as string), '|', hardware) as id
from table_name t;
id
并不那么优雅。但是,如果由于资源不足而导致查询失败,则优雅的id很难让人感到安慰。