2014-10-06 5 views
1

Я не могу найти документацию в Интернете, есть ли что-то вроде INET_ATON в AWS Redshift. Поэтому я думаю, что это еще не все, но мне интересно, может ли быть какое-то обходное решение. BTW Я использую данные max_mind.INET_ATON эквивалент в AWS Redshift

ответ

0

Я закончил создание обертки в Python (который является основным языком, который я использую), который переводит строку IP в число и затем использует ее.

2

Для временного решения можно использовать:

SELECT ipAddr, 
    SPLIT_PART(ipAddr, '.', 1)* 16777216::bigint + 
    SPLIT_PART(ipAddr, '.', 2)* 65536::bigint + 
    SPLIT_PART(ipAddr, '.', 3)* 256::bigint + 
    SPLIT_PART(ipAddr, '.', 4)::bigint AS addressRange  
FROM <your_table) LIMIT 5 

addressRange должен соответствовать, чтобы Maxmind startIpNum < < addressRange endIpNum.

0

Я загрузил блоки стран и расположения в одноименных том CSV таблиц и присоединился со следующим запросом

INSERT INTO dim.geoip_country 
SELECT 
     SPLIT_PART(first_ip, '.', 1) * 16777216::BIGINT 
     + SPLIT_PART(first_ip, '.', 2) * 65536::BIGINT 
     + SPLIT_PART(first_ip, '.', 3) * 256::BIGINT 
     + SPLIT_PART(first_ip, '.', 4)::BIGINT AS ip_inf, 
     SPLIT_PART(first_ip, '.', 1) * 16777216::BIGINT 
     + SPLIT_PART(first_ip, '.', 2) * 65536::BIGINT 
     + SPLIT_PART(first_ip, '.', 3) * 256::BIGINT 
     + SPLIT_PART(first_ip, '.', 4)::BIGINT 
     + POW(2, 32 - mask_bits)::BIGINT AS ip_sup, 
     network, 
     isocode2, 
     name, 
     continent_code, 
     continent_name, 
     is_anonymous_proxy, 
     is_satellite_provider 
FROM (
     SELECT 
       b.network, 
       SPLIT_PART(b.network, '/', 1) AS first_ip, 
       SPLIT_PART(b.network, '/', 2)::INTEGER AS mask_bits, 
       l.country_iso_code AS isocode2, 
       l.country_name AS name, 
       l.continent_code AS continent_code, 
       l.continent_name AS continent_name, 
       b.is_anonymous_proxy::BOOLEAN AS is_anonymous_proxy, 
       b.is_satellite_provider::BOOLEAN AS is_satellite_provider 
     FROM ext.geoip2_country_blocks_ipv4 b 
     JOIN ext.geoip2_country_locations_en l 
       ON b.geoname_id = l.geoname_id 
) 
Смежные вопросы