簡體   English   中英

如何從SQL Server中的大分隔文件創建多個表並設置空間查詢

[英]How to create multiple tables from large delimited file in SQL Server and setup for spatial queries

我有一個大的垂直條分隔文件,其中包含大約128,000行,其中包含由第1列中的公共號指定的多個作業代碼,我還有另一個文件,其中包含2列,其中一列包含作業代碼編號,另一列包含描述。

我想要做的是將每個作業代碼分成自己的表,其中包括名稱,地址,郵政編碼。 在填充表格之后,我需要確定不同作業代碼之間的距離,並顯示作業a中作業b的最近位置。

我建議你仔細看看SQL Server Integration Services (SSIS)。

SSIS專為此類工作而設計 - 它允許您加載,解析,轉換並最終將來自任何類型的數據的數據存儲到SQL Server中。

您可以將其作為一次性導入運行,也可以存儲該軟件包以供以后重復使用,以便稍后導入其他文件。

我假設您正在使用具有空間數據支持的SQL 2008。

聽起來你可以在同一個站點(即地址)有多個作業,所以我會創建一個作業表,其中一個外鍵指向一個包含所有地址信息列的站點表,另一列是Geography類型。

您需要設置一個流程以使用地理編碼信息(即地址的緯度和經度)填充該地理類型列, MapPoint批量地理編碼器是使用MapPoint(現在Bing地圖)服務的SSIS流程,可能是一個好的開發自己的流程的起點。

一旦您能夠獲得地址的地理編碼,就可以輕松更新SQL表。

UPDATE Sites
SET GeoLocation = GEOGRAPHY::POINT(@latitude, @longitude, 4326)
WHERE SiteID = @siteId

無論您在管道中何處集成Geocoder,我都建議您以這樣的方式對其進行抽象,以便您可以輕松地更改Geocode服務提供商或指定在運行時使用哪個服務提供商,因為這些服務都有不同的定價方案,並且可能證明在經濟上有利於一個人使用另一個人。 例如,Google每年提供912,500個免費請求,每天最多2,500次,沒有會話限制,而Bing每年僅提供500,000個請求,每天沒有限制,但限制為125,000個會話。 因此,對於大批量請求,Bing贏了但是對於每個項目或隨機請求,Google排在最前面。 最后,來自這些服務的數據質量是可比較的,因此改變您的來源以避免費用是沒有害處的。

導入數據並填充地理編碼后,計算距離和查找最近鄰居變得微不足道。

DECLARE @Sites TABLE ( SiteId INT )

--Get the site ids you care about
INSERT INTO @Sites
SELECT SiteId FROM Jobs WHERE Status = 'Open'

/*
 *  For each site in your table variable @Sites, this will list 
 *  all the other sites in the variable in order of distance.
 */
SELECT p.SiteId
     , s.SiteId
     , p.GeoLocation.STDistance(s.SiteId) * 0.001 AS [Distance (Kilometers)] --https://www.google.com/search?q=meters+to+kilometers
     , p.GeoLocation.STDistance(s.SiteId) * 0.000621371192 AS [Distance (Miles)] --https://www.google.com/search?q=meters+to+miles
FROM Sites AS [p]
JOIN Sites AS [s]
    ON s.SiteId != p.SiteId
    AND s.SiteId IN (SELECT SiteId FROM @Sites)
WHERE p.SiteId IN (SELECT SiteId FROM @Sites)
ORDER BY p.SiteId, s.SiteId, p.GeoLocation.STDistance(s.GeoLocation)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM