【问题标题】:GBQ Convert Data types en MassGBQ 大量转换数据类型
【发布时间】:2021-07-01 03:18:58
【问题描述】:

我有一个包含许多列和各种数字数据类型的表。我试图找出一种方法将所有这些数据类型转换为相同的数字类型,而不是单独列出每个数据类型并做

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

样本数据

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

【问题讨论】:

    标签: sql casting google-bigquery type-conversion


    【解决方案1】:

    使用下面的方法

    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 以在下面生成,因此转换结果更加明显) - 输出为

    【讨论】:

    • 感谢 Mikhail,这很棒,可以将此输出保存到该语句所在的表中。一开始的 CREATE 或 REPLACE 似乎不起作用
    • 可行。尝试自己先让它工作!如果问题仍然存在 - 提出/发布更多问题。但是请-首先自己尝试-相信我,这很容易!同时,如果保存到表中的目的只是为了在下一个查询或脚本中使用——这可能可以避免这样做,而是将所有内容组合在一个脚本中——显然它要复杂得多,所以可能更容易做到以您的方式创建中间表
    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 1970-01-01
    相关资源
    最近更新 更多