🐥
with句の中のuuidの不思議
これは何?
最近、とある表を一意化するためにWith句の中でuuidを作成する関数を呼び出し時に、思っていた挙動と違う動きがBIGQUERYで起こったのでメモ
bigqueryの場合
With A as (
select generate_uuid() as uuid
)
select * from A
union all
select * from A
uuidは同じなので完全に同じ行が2行出ると思ったが、下記のようにuuidは異なっていた。
uuid |
---|
dcb09b73-a85b-48f6-b2cf-fdab80f2755e |
4c06bc90-a3fa-48d9-aa8f-592ba569dd7d |
mysqlの場合
With A as (
select uuid() as uuid
)
select * from A
union all
select * from A
uuid |
---|
8236b675-03a3-11ee-a482-0242ac170002 |
8236b675-03a3-11ee-a482-0242ac170002 |
思った通り。
ちなみにバージョンは8.0.23
postgresqlの場合
拡張機能の場合
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
With A as (
SELECT uuid_generate_v4() uuid
)
select * from A
union all
select * from A
uuid |
---|
9f793df0-c9d8-42a3-8782-36b417858c65 |
9f793df0-c9d8-42a3-8782-36b417858c65 |
思った通り。
拡張機能なしの場合
With A as (
SELECT uuid_in(overlay(overlay(md5(random()::text || ':' || random()::text) placing '4' from 13) placing to_hex(floor(random()*(11-8+1) + 8)::int)::text from 17)::cstring) uuid
)
select * from A
union all
select * from A
uuid_in |
---|
f9b39ae5-f844-416e-89ef-6203b72d57a0 |
f9b39ae5-f844-416e-89ef-6203b72d57a0 |
思った通り。
ちなみに
uuidでは一意化できなかったので、rank関数を代替で使用した
Discussion