Sql 如何在BigQuery中将整数数组转换为一个热编码?
我有这样一个BQ表:Sql 如何在BigQuery中将整数数组转换为一个热编码?,sql,google-bigquery,Sql,Google Bigquery,我有这样一个BQ表: ID index A [1, 3, 4] B [2] C [0, 3] D [2, 3] 我希望得到一个新表,其中包含一个固定长度的热编码索引列: ID index A [0, 1, 0, 1, 1] B [0, 0, 1, 0, 0] C [1, 0, 0, 1, 0] D [0, 0, 1, 1, 0] 这里有一个类似的问题:,但它转换成多个列而不是单个列。使用下面的 #standardSQL with temp as
ID index
A [1, 3, 4]
B [2]
C [0, 3]
D [2, 3]
我希望得到一个新表,其中包含一个固定长度的热编码索引列:
ID index
A [0, 1, 0, 1, 1]
B [0, 0, 1, 0, 0]
C [1, 0, 0, 1, 0]
D [0, 0, 1, 1, 0]
这里有一个类似的问题:,但它转换成多个列而不是单个列。使用下面的
#standardSQL
with temp as (
select i from (
select max(i) as max_index
from `project.dataset.table` t,
t.index i
), unnest(generate_array(0, max_index)) i
)
select id,
( select array_agg(if(i = i1, 1, 0) order by i)
from temp
left join t.index as i1
on i = i1
) index
from `project.dataset.table` t
如果以上内容适用于您问题中的样本数据
with `project.dataset.table` as (
select 'A' id, [1, 3, 4] index union all
select 'B', [2] union all
select 'C', [0, 3] union all
select 'D', [2, 3]
)
- 输出为
如果您希望列为字符串类型,请使用下面的内容,而不是
array\u agg
string_agg(if(i = i1, '1', '0') order by i)
在这种情况下,输出将(非常相似)