更新 bigquery 中的有限行
Update limited rows in bigquery
我有一组数据举例
A B C
---- ----- ----
1 alpha xxx
2 beta vvv
2 beta ccc
2 beta ttt
3 Gama zzz
现在我想用 B 列中的相同元素(这里是测试版)更改数据,但有限制控制
例子'''update table sometable.name set B = "lamda" where B= "beta" limit 2.'''
我想要的结果应该是这样的
A B C
---- ----- ----
1 alpha xxx
2 lamda vvv
2 lamda ccc
2 beta ttt
3 Gama zzz
我在 bigquery 中尝试了很多,请您指导我。请注意,这只是一个示例,我的数据集很大。
考虑以下
select * except(flag) replace(if(flag, 'lamda', B) as B)
from (
select *, B = 'beta' and row_number() over win <= 2 as flag
from your_table
window win as (partition by A order by if(B = 'beta', 0, 1))
)
如果应用于您问题中的示例数据 - 输出为
如果您可以使用 C
列作为连接键,则以下似乎是可能的。
MERGE INTO sample t USING (
SELECT * FROM sample
WHERE B = 'beta' QUALIFY ROW_NUMBER() OVER() <= 2
) s ON t.C = s.C
WHEN MATCHED THEN UPDATE SET B = 'lambda';
我有一组数据举例
A B C
---- ----- ----
1 alpha xxx
2 beta vvv
2 beta ccc
2 beta ttt
3 Gama zzz
现在我想用 B 列中的相同元素(这里是测试版)更改数据,但有限制控制
例子'''update table sometable.name set B = "lamda" where B= "beta" limit 2.'''
我想要的结果应该是这样的
A B C
---- ----- ----
1 alpha xxx
2 lamda vvv
2 lamda ccc
2 beta ttt
3 Gama zzz
我在 bigquery 中尝试了很多,请您指导我。请注意,这只是一个示例,我的数据集很大。
考虑以下
select * except(flag) replace(if(flag, 'lamda', B) as B)
from (
select *, B = 'beta' and row_number() over win <= 2 as flag
from your_table
window win as (partition by A order by if(B = 'beta', 0, 1))
)
如果应用于您问题中的示例数据 - 输出为
如果您可以使用 C
列作为连接键,则以下似乎是可能的。
MERGE INTO sample t USING (
SELECT * FROM sample
WHERE B = 'beta' QUALIFY ROW_NUMBER() OVER() <= 2
) s ON t.C = s.C
WHEN MATCHED THEN UPDATE SET B = 'lambda';