연습 - Azure SQL Database에 데이터 로드

완료됨

대량 데이터를 로드하는 경우 다른 곳에서 데이터를 가져와야 합니다. Azure에서는 Azure Blob Storage에 데이터를 저장하거나 덤프하는 것이 일반적입니다. Blob Storage는 상대적으로 저렴한 비용으로 구조화되지 않은 대량의 데이터를 저장하는 데 최적화되어 있습니다.

이 시나리오에서 Adventure Works Cycles는 저장소 식별 번호를 기반으로 저장소 반환 데이터를 수신합니다. 이 데이터는 .dat 파일에 저장되고 Azure Blob Storage로 푸시됩니다. 데이터를 Blob Storage에 저장한 후 Azure SQL에서 데이터에 액세스할 수 있는 방법이 필요합니다. 스토리지 계정에 대한 액세스 권한이 있는 외부 데이터 원본을 만들어 해당 작업을 수행할 수 있습니다. Microsoft Entra ID, 공유 키 인증 또는 SAS(공유 액세스 서명)를 통해 해당 스토리지 계정에 대한 액세스를 제어할 수 있습니다.

이 연습에서는 sqlcmd에서 T-SQL을 사용하여 Azure Blob Storage에서 Azure SQL Database로 데이터를 대량 로드하는 한 가지 시나리오를 살펴봅니다.

를 사용하여 Azure SQL Database에 데이터 로드 sqlcmd

sqlcmd는 명령줄을 사용하여 SQL Server 및 Azure SQL과 상호 작용할 수 있도록 해주는 명령줄 도구입니다. 이 연습에서는 Azure Cloud Shell의 PowerShell 인스턴스에서 sqlcmd를 사용합니다. sqlcmd는 기본적으로 설치되므로 Azure Cloud Shell에서 쉽게 사용할 수 있습니다.

  1. Bash용 Azure Cloud Shell이 구성된 방식 때문에 먼저 Azure Cloud Shell에서 다음 명령을 실행하여 터미널 모드를 변경해야 합니다.

    TERM=dumb
    
  2. 서버 이름과 암호를 수정한 후 통합 터미널에서 다음 명령을 실행합니다.

    sqlcmd -S <server name>.database.windows.net -P <password> -U cloudadmin -d AdventureWorks
    
  3. 로드할 데이터에 대한 테이블과 스키마를 만듭니다. 이 프로세스는 간단한 T-SQL입니다. 이제 데이터베이스에 연결했으므로 터미널에서 다음 스크립트를 실행합니다.

    DROP TABLE IF EXISTS holiday
    CREATE TABLE [dbo].[holiday](
          [countryOrRegion] [varchar](255) NULL,
          [holidayName] [varchar](255) NULL,
          [normalizeHolidayName] [varchar](255) NULL,
          [isPaidTimeOff] [varchar](255) NULL,
          [countryRegionCode] [varchar](255) NULL,
          [date] varchar(255) NULL
    ) ON [PRIMARY];
    

    T-SQL 문 뒤에 숫자 항목이 표시됩니다. 이는 T-SQL 항목의 각 줄을 나타냅니다. 예를 들어, 앞의 명령은 26으로 끝납니다. 다음 줄 뒤에 Enter 키를 선택해야 합니다.

    1>이 다시 표시되면 명령이 완료된 것입니다. 이는 sqlcmd가 다음 T-SQL 항목의 첫 번째 줄에 사용할 준비가 되었음을 나타냅니다.

  4. 컨테이너에 대한 외부 데이터 원본을 만듭니다.

    DROP EXTERNAL DATA SOURCE holiday_dataset;
    
    CREATE EXTERNAL DATA SOURCE holiday_dataset
    WITH
    (   TYPE = BLOB_STORAGE,
        LOCATION = 'https://fabrictutorialdata.blob.core.windows.net/sampledata/Fabric/Holiday'
    );    
    
  5. 저장소 반환 파일 중 하나를 대량 삽입합니다. 다음 스크립트를 실행하고 완료되는 동안 설명을 검토합니다.

    SET NOCOUNT ON -- Reduce network traffic by stopping the message that shows the number of rows affected
    BULK INSERT holiday -- Table you created previously
    FROM 'Holiday.csv' -- Within the container, the ___location of the file
    WITH (DATA_SOURCE = 'holiday_dataset' -- Using the external data source from step 6
          , FORMAT = 'CSV'
          , FIRSTROW = 2
          , FIELDTERMINATOR = ','
          , ROWTERMINATOR = '0x0a'
          , CODEPAGE = '65001'
        ,BATCHSIZE=100000 -- Reduce network traffic by inserting in batches
        , TABLOCK -- Minimize number of log records for the insert operation
    );
    
  6. 테이블에 삽입된 행 수를 확인합니다.

    SELECT COUNT(*) FROM holiday;
    GO
    

    모든 항목이 올바르게 실행된 경우 274이 반환됩니다.

이 코드는 Blob Storage의 데이터를 Azure SQL Database에 삽입하는 방법에 대한 간단한 예입니다. 연습을 다시 실행하려면 다음 코드를 실행하여 수행한 작업을 다시 설정합니다.

DROP EXTERNAL DATA SOURCE holiday_dataset
DROP TABLE holiday
GO