GBQ 批量转换数据类型

GBQ Convert Data types en Mass

我有一个 table,其中包含许多列和各种数值数据类型。我正在尝试找出一种方法将所有这些数据类型转换为相同的数字类型,而无需单独列出每个数据类型并执行

SELECT CAST(column1 as Numeric), CAST(column2 as Numeric), ect...

样本数据

在此示例中,Group 将保持不变,Apple、Bananas 和 Orange 将全部转换为相同的数据类型。

使用以下方法

execute immediate (select '''
select `Group`, ''' || (select string_agg('cast(' || Fruit || ' as Numeric) as ' || Fruit ) from (
select regexp_extract_all(to_json_string((select as struct * except(`Group`) from unnest([t]))), r'"([^"]+)":') Fruits
from `project.dataset.table` t limit 1), unnest(Fruits) Fruit)  ||   
''' from `project.dataset.table`''');     

如果应用于您问题中的示例数据(请注意,我在上面的脚本中将 Numeric 更改为 Float64 以在下面生成,因此转换结果更加可见)- 输出是