2015-02-15 3 views
2

У нас есть некоторые проблемы с нашим парсером прямо сейчас. Мы сохраняем все наши журналы как есть, без разбора. Мне нужно найти все наши ежедневные журналы и узнать, сколько раз мы получаем IP-адрес с портом. например: 123.123.123.231:45771Поиск IP-адреса с портом

Проблема в том, что количество цифр отличается от одного запроса другому (в IP-адресе и номере порта).

Как мне написать свой запрос, чтобы я мог его фильтровать таким образом?

ответ

3

Я бы использовал регулярное выражение (RegEx), чтобы найти IP-адреса. Посмотрите на эти примеры:

Уже не я использовал Google BigQuery, я поощрил бы взглянуть на этот вопрос BigQuery REGEXP_MATCH and accents : boundary wildcard fails? еще какое-то помощь.

2

проверить это ... я включал проверку валидности самого IP

SELECT Regexp_extract(TXT,r'(\d+\.\d+\.\d+\.\d+)') as IP, 
Regexp_extract(TXT,r'\d+\.\d+\.\d+\.\d+\:(\d+)') as Port, 
Regexp_Match(TXT,r'(\d+\.\d+\.\d+\.\d+\:\d+)') as IP_ContainsPort, 
Parse_IP(Regexp_extract(TXT,r'(\d+\.\d+\.\d+\.\d+)')) as IsValidIP, 
if(Parse_IP(Regexp_extract(TXT,r'(\d+\.\d+\.\d+\.\d+)')) is null,string(null), Regexp_extract(TXT,r'\d+\.\d+\.\d+\.\d+\:(\d+)')) as PortOfValidIP 
FROM 

(Select "123.123.123.231:45771" as TXT), 
(Select "1.1.1.1" as TXT), 
(Select "23.0.0.1:45" as TXT), 
(Select "456.456.456.456:45771" as TXT), 
Смежные вопросы