我有一个简单的表作为以下查询的结果...如果已经定义了A列中的某个ID的列B中的值,则更新列B中的此ID的所有值(BigQuery SQL)
select clientId cid, customDimensions.value way4id
from mytable
where customDimensions.index = 2 and customDimensions.value != 'undefined'
group by customDimensions.value, cid
order by cid asc
limit 100;
...看起来像这样
cid | way4id ------ | ------ a | not set b | 123 b | not set c | not set d | 1234 d | not set
我想是运行更新查询,以便得到这个
cid | way4id ------ | ------ a | not set b | 123 b | 123 c | not set d | 1234 d | 1234
我无法理解这一点。子查询?一个循环?
谢谢!
-
好像这是工作
#standardSQL
SELECT
clientId cid,
COALESCE (MAX(CASE WHEN cd.value != 'not set' THEN cd.value END) OVER (PARTITION BY clientId), 'not set') way4id
FROM `mytable`, UNNEST(customDimensions) as cd
WHERE TRUE
AND cd.index = 2
AND cd.value != 'undefined'
ORDER BY cid asc
LIMIT 100;
只是想知道我怎么可以使用更新设置语法来更新这个。
尝试做水木清华这样的更新,但没有任何工程
#standardSQL
UPDATE (SELECT
clientId cid,
COALESCE (MAX(CASE WHEN cd.value != 'not set' THEN cd.value END) OVER (PARTITION BY clientId), 'not set') way4id
FROM `akbars-ru-data-streaming.akbars_ru_data_streaming_maximp.stream_max`, UNNEST(customDimensions) as cd
WHERE TRUE
AND cd.index = 2
AND cd.value != 'undefined'
ORDER BY cid asc
LIMIT 100) as t1
SET way4id = IF(t2.way4id IS NOT NULL, t2.way4id, 'not set')
FROM (
SELECT cid, max(CASE WHEN way4id != 'not set' THEN way4id END) way4id FROM `yourTable` group by cid) t2
WHERE t1.cid = t2.cid
你能解决这个查询?
这可能是一个选项,但_mytable_包含大约一百万行。在这种情况下我们如何解决这个问题? –
我不确定你的意思。对于这个答案,'mytable'只是模拟你的实际表格,所以你可以忽略第一部分,而是使用你的表格。除此之外,我想知道你是否会遇到性能问题? –
我编辑了我的答案,现在可能会更清楚一点。 –