A granel generar datos de SQL Server

bulk bulkinsert sqlbulkcopy sql-server

Pregunta

Necesito crear datos falsos en la tabla fakeData que sigue a este 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))

Donde el ID es la clave principal de esa tabla.

Necesito hacer esto lo más rápido posible, porque planeo insertar miles de millones de registros. No estoy seguro de si usar SQL para hacer las declaraciones sea el mejor método, o usar c # o cuál es la mejor opción para obtener estos datos en la tabla.

Esta pregunta realmente tiene dos partes, cómo ejecuto el psuedocode en SQL Server, y cuál es la mejor manera de hacerlo realmente rápido. (Actualmente no tengo configuración de índices)

Esto puede parecer un duplicado de todas las otras "formas más rápidas de inserción masiva". Creo que esta pregunta es diferente porque los datos que estoy cargando realmente pueden generarse en mi servidor SQL, por lo que un BULK genera en comparación con BULK INSERT

PD: tengo SQL Server 2012

Edición: Más datos

Este es un esquema en estrella. fakeData será la tabla de hechos.

table2 es una dimensión de fecha de 20 años, con 7300 registros. table3 es una dimensión de tiempo de 96 registros. table1 es otra dimensión con 100 millones de registros.

Respuesta popular

Ok, bueno ... ya que ninguno realmente mostró cómo hacer valores aleatorios también. Contribuiré con mi solución hasta ahora. Estoy haciendo esto ahora mismo, junto con el modelo de recuperación 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

Donde 5000 es cuántos elementos de la TABLA 1 (t1) estoy insertando. Hacer solo 5000 toma 5 minutos más o menos. A este ritmo, tomará 70 días insertar todos los datos que necesito. Una opción más rápida es necesaria para asegurarse



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué