대량 데이터 생성 SQL Server

bulk bulkinsert sqlbulkcopy sql-server

문제

이 psuedocode 다음 fakeData 테이블에 가짜 데이터를 fakeData 합니다.

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

여기서 id는 해당 테이블의 기본 키입니다.

수십억 개의 레코드를 삽입 할 계획이므로 가능한 한 빨리이 작업을 수행해야합니다. SQL을 사용하여 명령문을 수행하는 것이 가장 좋은 방법인지 아니면 C #을 사용하는지 아니면이 옵션을 테이블에 가져 오는 것이 가장 좋은 옵션인지 확실하지 않습니다.

이 질문에는 실제로 두 부분이 있습니다. SQL Server에서 psuedocode를 실행하는 방법과이를 실제로 수행하는 가장 좋은 방법은 무엇입니까? (나는 현재 색인 설정이 없다)

이것은 다른 "가장 빠른 대량 삽입 방법"의 복제본처럼 보일 수 있습니다. 이 질문은 내가로드하는 데이터가 실제로 SQL Server를 생성 할 수 있기 때문에 다르다고 생각합니다. 따라서 BULK는 BULK INSERT와 비교하여 생성됩니다.

추신 : 나는 SQL Server 2012를 가지고있다.

편집 : 추가 데이터

이것은 스타 스키마입니다. fakeData가 사실 테이블이됩니다.

table2는 7300 개의 레코드가있는 20 년의 날짜 차원입니다. table3은 96 레코드의 시간 차원입니다. table1은 1 억 개의 레코드가있는 또 다른 차원입니다.

인기 답변

좋습니다. ... 아무도 실제로 임의의 값을 지정하는 방법을 보여주지 않으므로. 지금까지 내 솔루션에 악영향을 끼치십시오. 지금 복구 모델과 함께이 작업을 간단하게 수행하고 있습니다.

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 은 삽입 할 TABLE1 (t1)의 요소 수입니다. 단지 5000을하는 것은 5 분 정도 걸립니다. 이 속도로 필요한 모든 데이터를 삽입하는 데 70 일 이 걸립니다. 더 빠른 옵션이 필요합니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.