J'ai une énorme quantité de données provenant d'une source et chaque enregistrement a une dimension dim1. Dim1 peut avoir jusqu'à 1 million de valeurs uniques. Certains d'entre eux auront beaucoup de données et d'autres auront moins. Par exemple Dim1value1 peut avoir des enregistrements 100K, Dim1value2 peut contenir 1 million d'enregistrements, Dim1value3 peut avoir 10 enregistrements et ainsi de suite.Partition de données en 20 partitions à peu près égales dans SQL Server
Maintenant, je veux les regrouper en partitions quelque peu égales de sorte que les données relatives à chaque Dim1 vont dans un groupe et je veux créer environ 20 groupe un peu égal.
Fondamentalement, chaque enregistrement ayant Dim1Value1 devrait aller dans un groupe et ainsi de suite. Voici un script qui montre comment ntile ne le fait pas.
IF OBJECT_ID('tempdb.dbo.#t') IS NOT NULL
DROP TABLE #t
CREATE TABLE #t
(
Dim1 varchar(100),
numberofrecs int
)
DECLARE @counter int = 1
WHILE(@counter < = 100)
BEGIN
INSERT #t
SELECT
'Dim1value' + CAST(@counter AS VARCHAR(10)),
CAST(RAND() * 100 AS INT)
SET @counter = @counter + 1
END
SELECT * FROM #t
SELECT
NTILE(5) OVER(order by numberofrecs),
Dim1, *
FROM #t
Est-ce mysql ou sql-server? mettre à jour les tags et conserver uniquement le fournisseur concerné. – Dekel
Si SQL Server considère NTile() https://msdn.microsoft.com/en-us/library/ms175126.aspx –
Je ne pense pas que Ntile le fera. Je l'ai considéré mais il ne fait que trie la mesure et divise ensuite ma dimension en un nombre de groupes. Fondamentalement, il mettra toutes les dimensions qui ont le plus grand nombre dans le même groupe. ce n'est pas ce que je veux ... ce script sql va le démonoser ... –