我正在尝试将两个表放入Tableau。一个具有点格式的IP地址,即192.168.32.1,另一个具有与城市和邮政编码等相对应的IP 数字,我想使其可用于可视化。
这个想法是执行这里的步骤(http://kb.tableau.com/articles/howto/mapping-ip-address-geocode-data)来对两个表进行连接,其中连接将一个表中的IP地址转换为一个数字,然后可以将其与数字中的数字进行比较另一张桌子。
然而,当我按照指南中的步骤进行操作时,它会跑40分钟然后崩溃。
任何人都可以对此有所了解吗?
我的表在Microsoft SQL Server Management Studio中 - 我也研究过使用Computed列做同样的事情但到目前为止没有运气(我是SQL的新手,无法解决如何保存然后应用函数,正如https://www.stev.org/post/mssqlconvertiptobigint)所述。
答案 0 :(得分:0)
前言:我建议尝试运行以下查询以查看它是否正确快速转换(尝试坚持30秒以下作为一个好的经验法则)并从那里开始。这可以告诉您是否最好在SQL或Tableau中投入更多时间。
有很多方法可以采取,这只是我的建议。您可以考虑的是编写一个查询,创建另一个格式化数据的表。设置为在作业(或仅作业)中运行的存储过程每隔几分钟(或每晚,无论您认为合适)添加到表中都会为您提供SQL中的基本数据。然后,您可以使用Tableau进行连接。
select [IP Address],
--add as many columns as you want from the base table to take the place of one of the tables you join to
[CodeForIPAddressIntegerFromYourHelpSite] as 'IPINT'
--converts IP Address to Integer - use the code from your help site
Into [IPIntegerConversion]
--this will create a permanent table automatically
from YourTableWithIPAddress
这个方法会为你提供一个包含IP地址和IP整数的表,它允许你在两者之间进行链接(你应该能够通过[CodeForIPAddressIntegerFromYourHelpSite]粘贴他们站点的代码。然后,你可以将其设置为在SQL Agent中自动运行(实际上非常简单)。如果查询本身并不昂贵,可以将其粘贴到作业中。如果传递已经计算的数据,则可能更有效。
答案 1 :(得分:0)
我认为这应该让你接近:
ParseName是SQL Server中一个解析IP地址的函数。我不是IP专家,从谷歌搜索大约5分钟获得基础知识。您可能必须颠倒顺序,但这是基本的查询结构,它应该非常快。
select ip.ip
,parsename(ip.ip,4)*16777216 -- 2^24
+parsename(ip.ip,3)*65536 -- 2^16
+parsename(ip.ip,2)*256 -- 2^8
+parsename(ip.ip,1) ip4
,ipv4.*
from tableWYourIPs ip
left join ipv4 on parsename(@ip,4)*16777216
+parsename(@ip,3)*65536
+parsename(@ip,2)*256
+parsename(@ip,1) between ipv4.start and ipv4.end
确保您应用网站建议的索引:
CREATE INDEX [ip_from] ON [ip2location].[dbo].[ip2location_db9]([ip_from]) ON [PRIMARY]
GO
CREATE INDEX [ip_to] ON [ip2location].[dbo].[ip2location_db9]([ip_to]) ON [PRIMARY]
GO
转换遵循以下逻辑: http://blogs.lessthandot.com/index.php/datamgmt/datadesign/how-to-convert-ip-addresses-between-bigi/