Azure Blob 스토리지 데이터에 대한 대량 액세스 예제

적용 대상: 예SQL Server 2017(14.x) 이상 예Azure SQL Database

BULK INSERTOPENROWSET 문은 Azure Blob Storage의 파일에 직접 액세스할 수 있습니다. 다음 예제에서는 newinvoices라는 스토리지 계정 및 Week3이라는 컨테이너에 저장된 inv-2017-01-19.csv라는 CSV(쉼표로 구분된 값) 파일의 데이터를 사용합니다. 서식 파일의 경로를 사용할 수 있지만 다음 예제에는 이러한 경로가 포함되어 있지 않습니다.

SQL Server에서 Azure Blob Storage에 대량 액세스하려면 적어도 SQL Server 2017(14.x) CTP 1.1이 필요합니다.

중요

Blob의 컨테이너 및 파일에 대한 모든 경로는 CASE SENSITIVE입니다. 정확하지 않은 경우 “대량 로드할 수 없습니다. 파일 "file.csv"가 없거나 파일 액세스 권한이 없습니다.” 같은 오류가 반환될 수 있습니다.

자격 증명 만들기

아래 모든 예제에는 공유 액세스 서명을 참조하는 데이터베이스 범위 자격 증명이 필요합니다.

중요

외부 데이터 원본은 SHARED ACCESS SIGNATURE ID를 사용하는 데이터베이스 범위 자격 증명으로 만들어야 합니다. 스토리지 계정에 대한 공유 액세스 서명을 만들려면 Azure Portal에서 스토리지 계정 속성 페이지의 공유 액세스 서명 속성을 참조하세요. 공유 액세스 서명에 대한 자세한 내용은 SAS(공유 액세스 서명) 사용을 참조하세요. 자격 증명에 대한 자세한 내용은 CREATE DATABASE SCOPED CREDENTIAL을 참조하세요.

SHARED ACCESS SIGNATURE여야 하는 IDENTITY를 사용하여 데이터베이스 범위 자격 증명을 만듭니다. BLOB 스토리지 계정에 대해 생성된 SAS 토큰을 사용합니다. SAS 토큰에 선행하는 ?이(가) 없는지, 로드해야 하는 개체의 읽기 권한이 하나 이상인지 및 만료 기간(모든 날짜는 UTC 시간임)이 유효한지 확인하세요.

예를 들면 다음과 같습니다.

CREATE DATABASE SCOPED CREDENTIAL UploadInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = 'sv=2018-03-28&ss=b&srt=sco&sp=rwdlac&se=2019-08-31T02:25:19Z&st=2019-07-30T18:25:19Z&spr=https&sig=KS51p%2BVnfUtLjMZtUTW1siyuyd2nlx294tL0mnmFsOk%3D';

Azure Blob Storage 위치를 참조하는 CSV 파일 데이터 액세스

다음 예제에서는 Azure 스토리지 계정을 가리키는 MyAzureInvoices라는 외부 데이터 원본을 사용합니다.

CREATE EXTERNAL DATA SOURCE MyAzureInvoices
    WITH (
        TYPE = BLOB_STORAGE,
        LOCATION = 'https://newinvoices.blob.core.windows.net',
        CREDENTIAL = UploadInvoices
    );

그러면 OPENROWSET 문의 파일 설명에 컨테이너 이름 (week3)을 추가합니다. 파일 이름은 inv-2017-01-19.csv로 지정됩니다.

SELECT * FROM OPENROWSET(
   BULK 'week3/inv-2017-01-19.csv',
   DATA_SOURCE = 'MyAzureInvoices',
   FORMAT = 'CSV',
   FORMATFILE='invoices.fmt',
   FORMATFILE_DATA_SOURCE = 'MyAzureInvoices'
   ) AS DataFile;   

BULK INSERT를 사용하여 다음과 같이 컨테이너 및 파일 설명을 사용합니다.

BULK INSERT Colors2
FROM 'week3/inv-2017-01-19.csv'
WITH (DATA_SOURCE = 'MyAzureInvoices',
      FORMAT = 'CSV');

Azure Blob Storage 위치의 컨테이너를 참조하는 CSV 파일 데이터 액세스

다음 예제에서는 Azure 스토리지 계정의 컨테이너(week3)를 가리키는 외부 데이터 원본을 사용합니다.

CREATE EXTERNAL DATA SOURCE MyAzureInvoicesContainer
    WITH (
        TYPE = BLOB_STORAGE,
        LOCATION = 'https://newinvoices.blob.core.windows.net/week3',
        CREDENTIAL = UploadInvoices
    );

그러면 OPENROWSET 문의 파일 설명에 컨테이너 이름을 포함하지 않습니다.

SELECT * FROM OPENROWSET(
   BULK 'inv-2017-01-19.csv',
   DATA_SOURCE = 'MyAzureInvoicesContainer',
   FORMAT = 'CSV',
   FORMATFILE='invoices.fmt',
   FORMATFILE_DATA_SOURCE = 'MyAzureInvoices'
   ) AS DataFile;

BULK INSERT를 사용하여 다음과 같이 파일 설명에 컨테이너 이름을 사용하지 않습니다.

BULK INSERT Colors2
FROM 'inv-2017-01-19.csv'
WITH (DATA_SOURCE = 'MyAzureInvoicesContainer',
      FORMAT = 'CSV');

참고 항목