我正面临一个大表,其中包含从csv导入的数据。但是csv中的分隔符没有被清理,所以输入数据看起来像这样:
[email protected]:Alex
[email protected];Bob
[email protected]:Foo
[email protected];Spam
[email protected]:Whatever
导入期间:被定义为分隔符,因此每行都有分隔符;没有正确导入。这导致了一个如下结构的表:
| ID | MAIL | USER |
|-- --|---------------------|----------|
| 1 | [email protected] | ALEX |
| 2 | [email protected];Bob | NULL |
| 3 | [email protected] | Foo |
| 4 | [email protected];Spam | NULL |
| 5 | [email protected] | Whatever |
由于重新导入是没有选择的,我考虑使用SQL查询手动清理受影响行中的数据。因此,我尝试通过过滤行WHERE USER IS为NULL来组合SELECT和UPDATE语句,并在适用的情况下使用正确的值更新这两列。
你需要的是字符串函数。读了一下,我发现Google BigQuery有STRPOS()和SUBSTR()。
https://cloud.google.com/bigquery/docs/reference/standard-sql/string_functions#substr
https://cloud.google.com/bigquery/docs/reference/standard-sql/string_functions#strpos
用于修复您描述的情况的更新查询如下所示:
update table_name set mail =SUBSTR(mail,1,STRPOS(mail,';')-1), user =SUBSTR(mail,STRPOS(mail,';')+1) where user is null
这里的想法是将邮件分成两部分,即之前的部分;和之后的部分。希望这可以帮助。