BULK générer des données SQL Server

bulk bulkinsert sqlbulkcopy sql-server

Question

J'ai besoin de créer de fausses données dans la table fakeData qui suit ce pseudo-code:

foreach(t1.id in table1)
   foreach(t2.id in table2)
      foreach(t3.id in table3)
        INSERT INTO fakeData (t1.id, t2.id, t3.id, random(30,80))

Où l'id est la clé primaire de cette table.

Je dois le faire aussi vite que possible car je compte insérer des milliards de disques. Je ne suis pas sûr si utiliser SQL pour faire les instructions est la meilleure méthode, ni utiliser c # ou quelle est la meilleure option pour obtenir ces données dans la table.

Cette question comporte en réalité deux parties: comment exécuter le psuedocode dans SQL Server et quelle est la meilleure façon de le faire très rapidement. (Je n'ai actuellement pas de configuration d'index)

Cela peut sembler être une copie de tous les autres "moyens les plus rapides d’insertion en masse". Je pense que cette question est différente parce que les données que je charge peuvent réellement être générées sur mon serveur SQL Server, donc un BULK génère par rapport à BULK INSERT

PS: J'ai SQL Server 2012

Edit: Plus de données

Ceci est un schéma en étoile. fakeData sera la table de faits.

table2 est une dimension de date de 20 ans, avec 7300 enregistrements. table3 est une dimension temporelle de 96 enregistrements. table1 est une autre dimension avec 100 millions d'enregistrements.

Réponse populaire

Ok, bon ... Depuis, personne n'a vraiment montré comment faire des valeurs aléatoires. Ill contribuer ma solution jusqu'à présent. Je le fais en ce moment, avec un modèle de récupération simple:

BEGIN TRAN

declare @x int = 1
while @x <= 5000
begin
INSERT INTO dimSpeed
Select T1.id as T1ID, T2.DateValue as T2ID, T3.TIME_ID as T3ID, ABS(Checksum(NewID()) % 70) + 20
From lines T1, dimDate T2, dimTime T3
WHERE T1.id = @x AND T2.DateValue > '1/1/2015' AND T2.DateValue < '1/1/2016'

    if (@x % 100) = 0
    begin
        COMMIT TRAN
        BEGIN TRAN
    end

    set @x = @x + 1
end

COMMIT TRAN

5000 correspond au nombre d'éléments de TABLE1 (t1) que j'insère. Faire juste 5000 prend 5 minutes ou plus. À ce rythme, il faudra 70 jours pour insérer toutes les données dont j'ai besoin. Une option plus rapide est certainement nécessaire



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi