Я поднял аналогичный вопрос в другой публикации здесь Проверьте и сопоставьте IP-адрес с таблицей поиска su bnet с помощью SQL, но после просмотра результатов я понимаю, что ситуация была несколько более сложной; следовательно, это было частично ответ. Я столкнулся с проблемой, когда многие пользователи были неправильно идентифицированы из-за несоответствия VLAN, которое изначально не рассматривалось; поэтому я публикую здесь еще один вопрос с чуть более подробным описанием проблемы:
У меня есть таблица, в которой показаны IP-адреса, назначенные оборудованию, принадлежащему клиенту. Эта таблица используется для измерения активности и производительности пользователя и генерируется на регулярной основе. Таблица имеет IP-адрес и поле VLAN, среди других полей. Допустим, это таблица А. Стоит отметить, что одному и тому же оборудованию или клиенту может быть назначено несколько IP-адресов. Эта таблица А не имеет имени-клиента, поэтому я хотел бы сопоставить IP-адрес каждого клиента в этой таблице с имя клиента или идентификатор клиента, который находится в таблице B (справочная таблица). По некоторым причинам в справочной таблице B вместо отдельных IP-адресов используется su bnet.
Следует отметить, что сопоставление должно соответствовать двум критериям, а не просто сопоставлению IP один на один на основе su bnet. И IP-адрес, и VLAN в таблице A должны совпадать как с su bnet, так и с VLAN в справочной таблице B, а не только с диапазоном IP-адресов в пределах su bnet в таблице B. Причина заключается в том, чтобы просто избежать неправильного совпадения, поскольку таблица A может иметь IP-адрес в пределах того же su bnet в таблице B, но в другой VLAN, поэтому объединение должно основываться на этих двух ключах.
Таблица A имеет поля примерно такие:
timestamp, IP-адрес, VLAN, метрики .... Пример ниже:
Пример таблицы поиска B выглядит примерно так:
+-------------+------+-------------------+
| Customer_ID | VLAN | Subnet |
+-------------+------+-------------------+
| HARRIS | 1012 | 10.111.253.46/32 |
| HARRIS | 1012 | 10.164.20.49/30 |
| HARRIS | 1012 | 10.223.165.193/28 |
| HARRIS | 1013 | 10.155.75.128/26 |
| HARRIS | 1014 | 10.155.75.128/26 |
| HARRIS | 1330 | 10.121.30.192/27 |
| HARRIS | 1331 | 10.120.30.192/27 |
| HARRIS | 1332 | 10.122.30.192/27 |
| HARRIS | 3910 | 100.104.12.144/32 |
| HARRIS | 3927 | 10.70.24.233/32 |
| HARRIS | 3959 | 10.102.11.182/32 |
| HARRIS | 3966 | 10.98.11.170/32 |
| STEPHANIE | 1010 | 100.72.0.33/32 |
| STEPHANIE | 3896 | 10.96.11.169/29 |
| JOE | 1010 | 100.69.72.10/32 |
| NED | 1010 | 100.72.255.2/32 |
| ESTHER | 1010 | 100.72.255.66/32 |
| BEN | 1010 | 100.72.255.30/32 |
| SHAWN | 1010 | 100.72.254.230/32 |
| JACK | 1010 | 1.1.1.7/32 |
| TONY | 1010 | 100.72.255.242/32 |
| Robert | 1010 | 100.72.254.250/32 |
| Nita | 1010 | 100.72.254.186/32 |
| Omar | 1010 | 100.72.254.238/32 |
| Costco | 1010 | 100.72.255.182/32 |
| Walmart | 1010 | 1.1.1.2/32 |
| Navy_blue | 1010 | 100.72.255.82/32 |
| Jet Rider | 1010 | 100.72.254.30/32 |
| Falcon | 1010 | 1.1.1.1/32 |
| Silver | 1010 | 100.80.255.174/32 |
| Morton Ranch| 1010 | 100.72.255.18/32 |
| 335553412 | 1010 | 100.72.255.22/32 |
| 335553413 | 1010 | 100.72.255.253/32 |
| 335553414 | 1010 | 100.72.255.222/32 |
| 335553415 | 1010 | 100.72.255.202/32 |
| 335553416 | 1010 | 100.72.255.210/32 |
| 335553417 | 1010 | 100.72.255.10/32 |
| 335553418 | 1010 | 100.72.255.218/32 |
| 335553419 | 1010 | 100.72.255.206/32 |
| 335553420 | 1010 | 100.72.255.14/32 |
| 335553421 | 1010 | 100.72.255.114/32 |
| 335553431 | 1010 | 100.72.255.166/32 |
| 335553632 | 1010 | 100.72.4.176/32 |
| 335553632 | 3898 | 10.98.0.49/28 |
| RANDY | 100 | 100.72.5.6/32 |
| RANDY | 1012 | 10.111.230.41/32 |
| RANDY | 1012 | 10.164.31.185/30 |
| RANDY | 1012 | 10.228.5.1/28 |
| RANDY | 1013 | 10.154.10.0/26 |
| RANDY | 1014 | 10.154.10.0/26 |
| HASAN | 1015 | 100.72.8.94/32 |
| HASAN | 1015 | 100.73.13.56/32 |
| HASAN | 3910 | 100.104.3.66/32 |
| HASAN | 3927 | 10.70.7.157/32 |
| HASAN | 3959 | 10.102.1.228/32 |
| HASAN | 3966 | 10.98.2.68/32 |
| DICKY | 100 | 100.72.10.203/32 |
| DICKY | 3897 | 1.1.1.1/29 |
| RINA | 100 | 100.73.2.12/32 |
| RINA | 1430 | 10.64.9.0/27 |
| RINA | 3910 | 100.104.2.12/32 |
| RINA | 3927 | 10.70.2.155/32 |
| RINA | 3959 | 10.102.1.15/32 |
| RINA | 3959 | 10.104.8.24/29 |
| RINA | 3966 | 10.98.1.13/32 |
+-------------+------+-------------------+
Ожидаемая выходная таблица выглядит примерно так:
отметка времени, IP-адрес, VLAN, su bnet, customer_name, метрики ....
Учитывая, что необходимо обработать миллиард записей, запрос должен выполняться в BigQuery, поэтому мы будем благодарны за вводные данные и предложения по созданию эффективного и оптимального запроса для сокращения длительного и дорогостоящего процесса.
Спасибо за помощь!