我有这个 BigQuery
具有三列和每行的表可以具有与前一列相同的值。
例如:
| col_a | col_b | col_c
+-------+-------+------------
| 123 | 3 | 2019-12-12
| 123 | 3 | 2019-12-12
| 234 | 11 | 2019-10-12
现在我想添加一个名为col\u d的新列,其中包含一个uuid。
问题是当我试图执行 UPDATE
命令我无法一次只更新一行(因为有些行具有相同的值,我希望每个行中的uuid不同)。
我尝试过但运气不佳的事情:(
限制
UPDATE table
SET col_d = GENERATE_UUID()
LIMIT 1
我想获取所有行,然后用update命令遍历它们。但是bigquery中的update命令没有限制。
行\u编号
UPDATE table
SET col_d = ROW_NUMBER() OVER()
但是bigquery不允许在 Update
命令
插入
我可以查询所有行,插入带有uuid的行,然后删除所有没有uuid的旧行。这种方法会奏效,这将是我最后的出路,但我相信有更好的方法,所以我在这里问。
欢迎您提出任何其他意见或建议。
3条答案
按热度按时间vuktfyat1#
下面是bigquery标准sql的例子,它为每一行生成不同的uuid,不管它们有多重复
注意:根据您的“插入然后删除”选项—我假设表中已经存在列d—否则您将无法执行此操作
DELETE FROM table WHERE col_d IS NULL
正如你在评论中提到的lrpiutwd2#
您可以选择uuid为第四列(col\u d)的数据,然后将该数据另存为新表。
这将产生您想要的输出:
由于bigquery不允许像传统sql那样添加包含数据的列,因此下面应该创建一个添加了uuid值的新表。
请注意,表历史记录可能会被删除,因此请先备份它。在任何情况下,都应该在进行此类更新之前备份数据,以免出现不希望的结果。
8xiog9wr3#
因为有些行具有相同的值,我希望它们中的每一行都有不同的uuid
这应该是你想要的:
我不明白你为什么要用
limit
,如果要更新所有行。也就是说,bigquery对
UPDATE
s、 所以CREATE TABLE
弗罗姆希尔建议的方法似乎更合适。