BULK generiert Daten SQL Server

bulk bulkinsert sqlbulkcopy sql-server

Frage

Ich muss gefälschte Daten in fakeData Tabelle erstellen, die diesem psuedocode folgt:

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

Wo die ID der Primärschlüssel dieser Tabelle ist.

Ich muss das so schnell wie möglich machen, weil ich plane, Milliarden von Datensätzen einzufügen. Ich bin mir nicht sicher, ob die Verwendung von SQL für die Anweisungen die beste Methode ist, oder ob c # verwendet wird oder wie die beste Option für das Abrufen dieser Daten in die Tabelle ist.

Diese Frage hat wirklich zwei Teile, wie führe ich den psuedocode in SQL Server aus, und was ist der beste Weg, dies wirklich schnell zu tun. (Ich habe derzeit keine Indexeinstellungen)

Dies kann wie ein Duplikat aller anderen "Schnellste Weg zur Masseneinfügung" erscheinen. Ich denke, dass diese Frage anders ist, weil die Daten, die ich lade, tatsächlich mein SQL Server erzeugt werden können, also ein BULK erzeugt im Vergleich zu BULK INSERT

PS: Ich habe SQL Server 2012

Bearbeiten: Mehr Daten

Dies ist ein Sternschema. fakeData wird die Faktentabelle sein.

Tabelle2 ist eine Datumsdimension von 20 Jahren mit 7300 Datensätzen. Tabelle 3 ist eine Zeitdimension von 96 Datensätzen. table1 ist eine weitere Dimension mit 100 Millionen Datensätzen.

Beliebte Antwort

Ok gut ... Da hat keiner wirklich gezeigt, wie man zufällige Werte macht. Ich werde meine Lösung bisher beisteuern. Ich mache das gerade jetzt, zusammen mit Recovery-Modell einfach:

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

Wo 5000 ist, wie viele Elemente von TABLE1 (t1) füge ich ein. Das Ausführen von 5000 dauert 5 Minuten oder so. Bei dieser Geschwindigkeit dauert es 70 Tage , um alle Daten einzufügen, die ich brauche. Eine schnellere Option ist sicher erforderlich



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum