分桶数据,如果桶大小大于 1,则将值设置为 1,否则为 0
Bucketing Data, If Bucket Size Greater Then 1 Set Value To 1 Else 0
我正在使用 snowflake
尝试基于两列对行进行分桶,如果该分桶大小大于 1,那么我需要一些新列的值为 1,否则我将设置它为 0。它类似于 NTILE()
除了我需要它是动态的。
我的 table 如下所示:
ARTICLE_ID USER_ID COUNTRY_NAME NUM_COUNTRIES NUM_AUTHORS
------------------------------------------------------------------------
30522143 ecf330d Singapore 1 4
30522143 86b0faa Singapore 1 4
30522143 d331b33 Singapore 1 4
30522143 d331b33 Singapore 1 4
------------------------------------------------------------------------
30522139 1d08cfd United States 2 3
30522139 ec9c065 Canada 2 3
30522139 a750bff United States 2 3
------------------------------------------------------------------------
23410385 1d08cfd United States 3 3
23410385 ec9c065 Mexico 3 3
23410385 a41b19c France 3 3
------------------------------------------------------------------------
30285132 d331b33 Chile 2 4
30285132 1d08cf2 Peru 2 4
30285132 a750bff Chile 2 4
30285132 d742bb5 Peru 2 4
------------------------------------------------------------------------
...
我需要存储的两列分别是 ARTICLE_ID
然后 COUNTRY_NAME
。看看上面的 table 如果我们取 ARTICLE_ID
30522143
我们会有 1
桶 4
USER_ID
因为它们都是 Singapore
那么 HAS_REPEATED_COUNTRY
的值将是 1.
在 ARTICLE_ID
30522139
的情况下,我们将有两个子桶,一个用于包含 2
USER_ID
的 United States
和另一个子桶(Canada)
包含 1
USER_ID
,这将导致与 United States
关联的所有用户的值都为 1
,而与 [=33= 关联的唯一成员] 在 HAS_REPEATED_COUNTRY
.
中的值为 0
因此 table 类似于:
ARTICLE_ID USER_ID COUNTRY_NAME NUM_COUNTRIES NUM_AUTHORS HAS_REPEATED_COUNTRY
------------------------------------------------------------------------------------------------
30522143 ecf330d Singapore 1 4 1
30522143 86b0faa Singapore 1 4 1
30522143 d331b33 Singapore 1 4 1
30522143 d331b33 Singapore 1 4 1
------------------------------------------------------------------------------------------------
30522139 1d08cfd United States 2 3 1
30522139 ec9c065 Canada 2 3 0
30522139 a750bff United States 2 3 1
------------------------------------------------------------------------------------------------
23410385 1d08cfd United States 3 3 0
23410385 ec9c065 Mexico 3 3 0
23410385 a41b19c France 3 3 0
------------------------------------------------------------------------------------------------
30285132 d331b33 Chile 2 4 1
30285132 1d08cf2 Peru 2 4 1
30285132 a750bff Chile 2 4 1
30285132 d742bb5 Peru 2 4 1
------------------------------------------------------------------------------------------------
...
有没有办法从前者中生成后者table?
您似乎想标记在给定文章中多次出现的国家/地区。如果是这样,您可以只使用 window 计数:
select
t.*,
case when count(*) over(partition by article_id, country_name) > 1
then 1 else 0
end as has_repeated_country
from mytable t
我正在使用 snowflake
尝试基于两列对行进行分桶,如果该分桶大小大于 1,那么我需要一些新列的值为 1,否则我将设置它为 0。它类似于 NTILE()
除了我需要它是动态的。
我的 table 如下所示:
ARTICLE_ID USER_ID COUNTRY_NAME NUM_COUNTRIES NUM_AUTHORS
------------------------------------------------------------------------
30522143 ecf330d Singapore 1 4
30522143 86b0faa Singapore 1 4
30522143 d331b33 Singapore 1 4
30522143 d331b33 Singapore 1 4
------------------------------------------------------------------------
30522139 1d08cfd United States 2 3
30522139 ec9c065 Canada 2 3
30522139 a750bff United States 2 3
------------------------------------------------------------------------
23410385 1d08cfd United States 3 3
23410385 ec9c065 Mexico 3 3
23410385 a41b19c France 3 3
------------------------------------------------------------------------
30285132 d331b33 Chile 2 4
30285132 1d08cf2 Peru 2 4
30285132 a750bff Chile 2 4
30285132 d742bb5 Peru 2 4
------------------------------------------------------------------------
...
我需要存储的两列分别是 ARTICLE_ID
然后 COUNTRY_NAME
。看看上面的 table 如果我们取 ARTICLE_ID
30522143
我们会有 1
桶 4
USER_ID
因为它们都是 Singapore
那么 HAS_REPEATED_COUNTRY
的值将是 1.
在 ARTICLE_ID
30522139
的情况下,我们将有两个子桶,一个用于包含 2
USER_ID
的 United States
和另一个子桶(Canada)
包含 1
USER_ID
,这将导致与 United States
关联的所有用户的值都为 1
,而与 [=33= 关联的唯一成员] 在 HAS_REPEATED_COUNTRY
.
0
因此 table 类似于:
ARTICLE_ID USER_ID COUNTRY_NAME NUM_COUNTRIES NUM_AUTHORS HAS_REPEATED_COUNTRY
------------------------------------------------------------------------------------------------
30522143 ecf330d Singapore 1 4 1
30522143 86b0faa Singapore 1 4 1
30522143 d331b33 Singapore 1 4 1
30522143 d331b33 Singapore 1 4 1
------------------------------------------------------------------------------------------------
30522139 1d08cfd United States 2 3 1
30522139 ec9c065 Canada 2 3 0
30522139 a750bff United States 2 3 1
------------------------------------------------------------------------------------------------
23410385 1d08cfd United States 3 3 0
23410385 ec9c065 Mexico 3 3 0
23410385 a41b19c France 3 3 0
------------------------------------------------------------------------------------------------
30285132 d331b33 Chile 2 4 1
30285132 1d08cf2 Peru 2 4 1
30285132 a750bff Chile 2 4 1
30285132 d742bb5 Peru 2 4 1
------------------------------------------------------------------------------------------------
...
有没有办法从前者中生成后者table?
您似乎想标记在给定文章中多次出现的国家/地区。如果是这样,您可以只使用 window 计数:
select
t.*,
case when count(*) over(partition by article_id, country_name) > 1
then 1 else 0
end as has_repeated_country
from mytable t