BULK genera dati SQL Server

bulk bulkinsert sqlbulkcopy sql-server

Domanda

Ho bisogno di creare dati falsi nella tabella fakeData che segue questo psuedocode:

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))

Dove l'id è la chiave primaria di quel tavolo.

Ho bisogno di farlo il più velocemente possibile, perché ho intenzione di inserire miliardi di record. Non sono sicuro che l'uso di SQL per fare le dichiarazioni sia il metodo migliore, o l'uso di c # o quale sia l'opzione migliore per ottenere questi dati nella tabella.

Questa domanda ha in realtà due parti, come faccio a eseguire il psuedocode in SQL Server e qual è il modo migliore per farlo in modo molto veloce. (Al momento non ho setup di indici)

Questo può sembrare un duplicato di tutti gli altri "Modo più veloce per inserire in blocco". Penso che questa domanda sia diversa perché i dati che sto caricando possono effettivamente essere generati dal mio SQL Server, quindi un BULK generato rispetto a BULK INSERT

PS: ho ottenuto SQL Server 2012

Modifica: più dati

Questo è uno schema a stella. fakeData sarà la tabella dei fatti.

table2 è una dimensione data di 20 anni, con 7300 record. table3 è una dimensione temporale di 96 record. table1 è un'altra dimensione con 100 milioni di record.

Risposta popolare

Ok bene ... Dal momento che nessuno ha davvero mostrato come fare valori casuali pure. Ill contribuire la mia soluzione finora. Lo sto facendo adesso, insieme al modello di recupero semplice:

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

Dove 5000 è il numero di elementi di TABLE1 (t1) che sto inserendo. Fare solo 5000 impiega circa 5 minuti. A questo ritmo ci vorranno 70 giorni per inserire tutti i dati di cui ho bisogno. È necessaria sicuramente una opzione più rapida



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché