Условное обновление столбца B с измененным значением на основе столбца A - PullRequest
0 голосов
/ 07 апреля 2019

Я сталкиваюсь с большой таблицей с данными, которые были импортированы из CSV. Однако разделители в csv не очищены, поэтому входные данные выглядят примерно так:

alex@mail.com:Alex
dummy@mail.com;Bob
foo@bar.com:Foo
spam@yahoo.com;Spam
whatever@mail.com:Whatever

Во время импорта: был определен как разделитель, поэтому каждая строка с разделителем; не был импортирован должным образом. Это привело к таблице, структурированной так:

| ID  | MAIL                | USER     |
|-- --|---------------------|----------|
| 1   | alex@mail.com       | ALEX     |
| 2   | dummy@mail.com;Bob  | NULL     |
| 3   | foo@bar.com         | Foo      |
| 4   | spam@yahoo.com;Spam | NULL     |
| 5   | whatever@mail.com   | Whatever |

Поскольку повторное импортирование не вариант, я думал о ручной очистке данных в затронутых строках с помощью запросов SQL. Поэтому я попытался объединить операторы SELECT и UPDATE, отфильтровав строки WHERE USER IS NULL и обновив в обоих столбцах правильное значение, где это применимо.

1 Ответ

0 голосов
/ 07 апреля 2019

Вам нужны строковые функции.Читая немного, я обнаружил, что в 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

Идея в том, чтобы разделить почту на две части, часть перед;и часть после.Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...