來自許多數據庫中的多個表的並集,並將結果分組為 n
dba中的第一篇文章,所以請溫柔。
我有一個正在處理的項目,並且有 4 個以上的 SQL Server 數據庫可供使用。
這些數據庫包含 2 個(或更多表)我希望將結果合併。
我感興趣的數據包含 Windows Server 文件路徑(SrcFilename、DestFilename 供參考),看起來像這樣:
srcfilename001.dwg|\srcServer1\path\to\file|destfilename001.dwg|\destserver\path\to\file\ srcfilename002.dwg|\srcServer2\path\to\file|destfilename002.dwg|\ destserver\path\to\file\ srcfilename003.dwg|\srcServer3\path\to\file|destfilename003.dwg|\destserver\random\path\ srcfilename004.dwg|\srcServer4\path\to\file| destfilename004.dwg|\destserver\隨機\路徑\
我已經能夠使用這樣的查詢來合併數據:
SELECT * FROM ( SELECT * FROM [Database_015].[dbo].[CAD_DATA] Where [Database_015].[dbo].[CAD_DATA].[UniqueValue] = 1 UNION ALL SELECT * FROM [Database_016].[dbo].[CAD_DATA] Where [Database_016].[dbo].[CAD_DATA].[UniqueValue] = 1 UNION ALL SELECT * FROM [Database_017].[dbo].[CAD_DATA] Where [Database_017].[dbo].[CAD_DATA].[UniqueValue] = 1 UNION ALL SELECT * FROM [Database_020].[dbo].[CAD_DATA] Where [Database_020].[dbo].[CAD_DATA].[UniqueValue] = 1 ) A ORDER BY NEWID()
哪個效果很好…
我以隨機順序獲取所需的數據,而不是來自 \server1、\server2、\server3 等的一堆文件。
顯然,隨機性是因為
ORDER BY NEWID()
.收集數據的原因是因為我們正在遷移數百萬個文件,最終需要對源文件和目標文件進行雜湊處理以查看它們是否匹配。
最終,我將使用 Powershell 從結果數據中對文件進行雜湊處理,我認為將每個 Powershell
Start-ThreadJob 'Job'
點依次放在每個伺服器上以獲取n
文件將比讓它在多個伺服器上處理數據“條帶”更快。謝謝你的時間。:)
編輯:第一條評論要求更多解釋,所以這裡是:
我不知道如何將兩者結合起來
UNION ALL
,GROUP BY
並ORDER BY
從多個不同的數據庫表中生成數據集,這些數據庫表具有n
按伺服器以隨機順序分組的批次文件。
假設問題是…
“我已經對每個伺服器進行了隨機化,但現在我需要在整個集合中進行隨機化”
…那麼從您的查詢中完全刪除
UNION
&可能是謹慎的。ORDER BY
您可以將針對所有數據庫/伺服器組合的標準查詢統一到儲存為 PSCustomObject 的單個數據集中,並將統一數據通過管道傳輸到Sort-Object
使用表達式{Get-Random}
在整個集合中隨機化,而不是按呼叫隱式分區。您可以使用dbatools嘗試以下操作。
$connections = @" Server,Database sql-01,Database_015 sql-01,Database_016 sql-02,Database_017 sql-03,Database_020 @" | ConvertFrom-Csv $query_tmp = @" select '{0}' as serv, '{1}' as db, SrcFilename, DestFilename from dbo.CAD_DATA where UniqueValue = 1; "@ $table = foreach($conn in $connections){ $query = $query_tmp -f $conn.Server, $conn.Database Invoke-DbaQuery -Query $query -Server $conn.Server -Database $conn.Database } $table | Sort-Object {Get-Random} | Export-Csv ~/Desktop/myquery.csv
如果您無權訪問/無法使用 dbatools,您可以使用 dbatools
Invoke-SqlCmd
代替Invoke-DbaQuery