首页 > 解决方案 > 如何修改 BigQuery 表中的列数据

问题描述

我一直在尝试在线搜索,但是,我只能看到如何添加、删除、更改表中的列。基本上,我需要遍历 BigQuery 中的一整列电子邮件地址,并在每一行中添加第二个电子邮件地址。

ID|Name |email
1 |Name1|email1@address.com
2 |Name2|email2@address.com
3 |Name3|email3@address.com
4 |Name4|email4@address.com
5 |Name5|email5@address.com
6 |Name6|email6@address.com

我正在寻找的是一些脚本,它将通过一个列并在中间添加一个带有“,”的第二个 emailadd,这样它就会看起来像这样:


ID|Name |email
1 |Name1|email1@address.com,secondemail@address.com
2 |Name2|email2@address.com,secondemail@address.com
3 |Name3|email3@address.com,secondemail@address.com
4 |Name4|email4@address.com,secondemail@address.com
5 |Name5|email5@address.com,secondemail@address.com
6 |Name6|email6@address.com,secondemail@address.com

虽然所有的开始数据都保持不变。请让我知道这是否可能。此外,“secondemail@address.com”只是一个电子邮件地址,每个用户都不会更改。我只是出于商业原因需要这种格式。

标签: google-bigquery

解决方案


以下是 BigQuery 标准 SQL

#standardSQL 
SELECT * REPLACE(email || ',secondemail@address.com' AS email)
FROM `project.dataset.table`

您可以使用您问题中的示例数据进行测试,使用上面的示例数据,如下例所示

#standardSQL 
WITH `project.dataset.table` AS (
  SELECT 1 id, 'Name1' name, 'email1@address.com' email UNION ALL
  SELECT 2, 'Name2', 'email2@address.com' UNION ALL
  SELECT 3, 'Name3', 'email3@address.com' UNION ALL
  SELECT 4, 'Name4', 'email4@address.com' UNION ALL
  SELECT 5, 'Name5', 'email5@address.com' UNION ALL
  SELECT 6, 'Name6', 'email6@address.com' 
)
SELECT * REPLACE(email || ',secondemail@address.com' AS email)
FROM `project.dataset.table`

带输出

Row id  name    email    
1   1   Name1   email1@address.com,secondemail@address.com   
2   2   Name2   email2@address.com,secondemail@address.com   
3   3   Name3   email3@address.com,secondemail@address.com   
4   4   Name4   email4@address.com,secondemail@address.com   
5   5   Name5   email5@address.com,secondemail@address.com   
6   6   Name6   email6@address.com,secondemail@address.com   

推荐阅读