BigQuery Левое объединение в списке строк возвращает ноль - PullRequest
0 голосов
/ 15 января 2020

Я не смог придумать хорошее название для этого вопроса. Извините за это.

Из коллекции писем я хочу проверить, какие письма принадлежат списку неизвестных пользователей. Однако, когда я делаю левое соединение, как показано ниже, соединение, кажется, не совпадает, и вместо этого я получаю значения NULL в tb2.email.

#StandardSQL 
with unknown_addresses AS (
  select 'test1@gmail.com' AS email
  union all
  select 'test2@gmail.com' AS email
  union all
  select 'test3@gmail.com' AS email
  union all
  select 'test4@gmail.com' AS email
  union all
  select 'test5@gmail.com' AS email
),

all_emails_received as (
  SELECT
    SUBSTR(REGEXP_EXTRACT(mystring, r"[a-z.@\-]+"), 4) as email,
    content
  FROM
    foobar 
)

SELECT tb1.email, tb1.content, tb2.email AS unknown_email 
FROM all_emails_received tb1 
  LEFT JOIN unknown_addresses tb2 
    ON tb1.email = tb2.email

Как заставить работать условие соединения?

Я не хочу создавать новую таблицу только для хранения unknown_addresses.

(Правка) Добавлен пример необработанных данных

| email           | content     | 
| --------------- | ----------- | 
| test1@gmail.com | Hello there | 
| gary@gmail.com  | test test   | 
| abc@gmail.com   | foobar      |  

Что я сейчас получаю

| email           | content     | unknown_email   | 
| --------------- | ----------- | --------------- |
| test1@gmail.com | Hello there | null            |
| gary@gmail.com  | test test   | null            |   
| abc@gmail.com   | foobar      | null            | 

Желаемый результат

| email           | content     | unknown_email   | 
| --------------- | ----------- | --------------- |
| test1@gmail.com | Hello there | test1@gmail.com | 
| gary@gmail.com  | test test   | null            |   
| abc@gmail.com   | foobar      | null            | 

Редактировать 2: Все еще не работает. Я добавил туда фильтр substr и regexp. Не уверен, что это влияет на мой результат.

1 Ответ

1 голос
/ 15 января 2020

Я смог воспроизвести ошибку с вашими необработанными данными. Я понял, что проблема была в вас REGEX EXP . Следовательно, это должно быть:

REGEXP_EXTRACT(email, r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.+[a-zA-Z0-9-.]+$") as email

Изменив код с помощью приведенной выше строки, вы сможете получить желаемый результат.

Я рад, что смог помочь вам.

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