簡體   English   中英

在 BigQuery 中循環遍歷列並將 null 值替換為零的編程方式?

[英]Programmatic way to loop over columns and replace null values with zeros in BigQuery?

我正在嘗試在 BigQuery 中准備一個大的 data.table 用於涉及大量“虛擬”(又名分類)變量的回歸。

此過程的最后一個步驟要求我有效地將表中 null 值的所有實例替換為零。

在 Big Query 中是否有一種干凈的編程方式來執行此操作? 例如,在下表中,理想情況下,我希望遍歷所有“country_*”字段,並以非硬編碼方式替換為零。 我有一個暗示,這可能是動態 SQL 的工作,但我在文檔中迷路了。 任何幫助將不勝感激!

TLDR:這是我面臨的數據結構的一個例子。

國家 國家_1 國家_2 國家_3 其他協變量
1個 1個 - -
2個 - 1個 -
3個 - - 1個

這就是我想要的

國家 國家_1 國家_2 國家_3 其他協變量
1個 1個 0 0
2個 0 1個 0
3個 0 0 1個

傻瓜法:

select country, 
       ifnull(country_1, 0) as country_1,
       ...
FROM TABLE

試試下面

create temp function  extract_keys(input string) returns array<string> language js as "return Object.keys(JSON.parse(input));";
create temp function  extract_values(input string) returns array<string> language js as "return Object.values(JSON.parse(input));";
select * except(json)
from (
  select json, col, val
  from your_table t,
  unnest([struct(replace(to_json_string(t), ':null', ':0') as json)]),
  unnest(extract_keys(json)) col with offset
  join unnest(extract_values(json)) val with offset
  using(offset)
)
pivot (any_value(val) for col in ('country', 'country_1', 'country_2', 'country_3'))    

如果應用於您問題中的示例數據 - output 是

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM