다음을 통해 공유


Azure Database for PostgreSQL - 유연한 서버의 Azure Storage 확장

적용 대상: Azure Database for PostgreSQL - 유연한 서버

Microsoft 고객의 일반적인 사용 사례는 Azure Blob Storage와 Azure Database for PostgreSQL 유연한 서버 인스턴스 간에 데이터를 가져오고 내보내는 기능입니다. Azure Database for PostgreSQL 유연한 서버의 Azure Storage 확장(azure_storage)은 이 사용 사례를 간소화합니다.

Azure Blob Storage

Azure Blob Storage는 클라우드용 개체 스토리지 솔루션입니다. Blob Storage는 대량의 비정형 데이터를 저장하는 데 최적화되어 있습니다. 비정형 데이터는 텍스트 또는 이진 데이터와 같은 특정 데이터 모델이나 정의를 따르지 않는 데이터입니다.

Blob Storage는 세 가지 형식의 리소스 계층 구조를 제공합니다.

  • 스토리지 계정은 Blob, 파일, 큐, 테이블 또는 디스크와 같은 항목에 대한 서비스를 보유하는 관리 엔터티입니다.

    Azure에서 스토리지 계정을 만들면 스토리지 리소스에 대한 고유한 네임스페이스를 가져오게 됩니다. 해당 고유 네임스페이스는 URL의 일부를 구성합니다. 스토리지 계정 이름은 Azure의 모든 기존 스토리지 계정 이름에서 고유해야 합니다.

  • 컨테이너는 스토리지 계정 내에 있습니다. 컨테이너는 Blob이 저장되는 폴더와 같습니다.

    보안 정책을 정의하고 컨테이너에 정책을 할당할 수 있습니다. 이러한 정책은 컨테이너의 모든 Blob에 적용됩니다.

    스토리지 계정에는 컨테이너를 무제한으로 포함할 수 있습니다. 각 컨테이너에는 최대 스토리지 계정 크기인 500TB까지 Blob을 무제한으로 포함할 수 있습니다.

    스토리지 계정 내부에 있는 컨테이너에 Blob을 배치한 후 protocol://<storage_account_name>/blob.core.windows.net/<container_name>/<blob_name> 형식의 URL을 사용하여 Blob을 참조할 수 있습니다.

  • Blob은 컨테이너에 있는 데이터 조각입니다.

다음 다이어그램에서는 리소스 간의 관계를 보여줍니다.

스토리지 리소스 예를 보여 주는 다이어그램.

Azure Blob Storage에 데이터를 Blob으로 저장할 때의 주요 이점

Azure Blob Storage는 다음과 같은 이점을 제공할 수 있습니다.

  • 확장 가능하고 비용 효율적인 클라우드 스토리지 솔루션입니다. 이를 사용하여 모든 크기의 데이터를 저장하고 필요에 따라 스케일 업하거나 스케일 다운할 수 있습니다.
  • 저장 및 전송 중 암호화와 같이 데이터를 보호하는 데 도움이 되는 보안 계층을 제공합니다.
  • 다른 Azure 서비스 및 파트너 애플리케이션과 통신합니다. 백업 및 재해 복구, 보관, 데이터 분석 등 광범위한 사용 사례를 위한 다목적 솔루션입니다.
  • 조직이 중소기업든 대기업이든 관계없이 클라우드에서 대량의 데이터를 관리하고 저장하기 위한 비용 효율적인 솔루션입니다. 필요한 스토리지에 대해서만 비용을 지불하면 됩니다.

Azure Blob Storage에서 Azure Database for PostgreSQL 유연한 서버로 데이터 가져오기

Azure Blob Storage에서 데이터를 로드하려면 azure_storage PostgreSQL 확장을 허용 목록에 추가해야 합니다. 그런 다음 CREATE EXTENSION 명령을 사용하여 데이터베이스에 확장을 설치합니다.

 CREATE EXTENSION azure_storage;

스토리지 계정을 만들면 Azure는 해당 계정에 대해 2개의 512비트 스토리지 계정 액세스 키를 만듭니다. 이러한 키를 사용하면 공유 키 권한 부여를 통해 스토리지 계정의 데이터에 대한 액세스 권한을 부여할 수 있습니다.

데이터를 가져오기 전에 account_add 메서드를 사용하여 스토리지 계정을 매핑해야 합니다. 계정을 만들 때 정의한 계정 액세스 키를 제공합니다. 다음 코드 예에서는 스토리지 계정 mystorageaccount를 매핑하고 문자열 SECRET_ACCESS_KEY를 액세스 키 매개 변수로 사용합니다.

SELECT azure_storage.account_add('mystorageaccount', 'SECRET_ACCESS_KEY');

스토리지를 매핑한 후 스토리지 계정 콘텐츠를 나열하고 가져올 데이터를 선택할 수 있습니다. 다음 예에서는 mystorageaccount라는 스토리지 계정과 mytestblob라는 Blob 컨테이너를 만들었다고 가정합니다.

SELECT path, bytes, pg_size_pretty(bytes), content_type
FROM azure_storage.blob_list('mystorageaccount','mytestblob'); 

일반 SQL WHERE 절이나 blob_list 메서드의 prefix 매개 변수를 사용하여 이 문의 출력을 필터링할 수 있습니다. 컨테이너 콘텐츠를 나열하려면 계정과 액세스 키 또는 익명 액세스가 사용하도록 설정된 컨테이너가 필요합니다.

마지막으로, COPY 문 또는 blob_get 함수를 사용하여 Azure Blob Storage의 데이터를 기존 Azure Database for PostgreSQL 유연한 서버 테이블로 가져올 수 있습니다.

COPY 문을 사용하여 데이터 가져오기

다음 예에서는 COPY 명령을 통해 동일한 mystorageaccount Azure Storage 계정의 Blob 컨테이너 mytestblob에 있는 employee.csv 파일에서 데이터를 가져오는 방법을 보여 줍니다.

  1. 원본 파일 스키마와 일치하는 대상 테이블을 만듭니다.

    CREATE TABLE employees (
      EmployeeId int PRIMARY KEY,
      LastName VARCHAR ( 50 ) UNIQUE NOT NULL,
      FirstName VARCHAR ( 50 ) NOT NULL
    );
    
  2. COPY 문을 사용하여 데이터를 대상 테이블에 복사합니다. 첫 번째 행이 헤더임을 지정합니다.

    COPY employees
    FROM 'https://mystorageaccount.blob.core.windows.net/mytestblob/employee.csv'
    WITH (FORMAT 'csv', header);
    

blob_get 함수를 사용하여 데이터 가져오기

blob_get 함수는 Blob Storage의 파일을 검색합니다. blob_get이 데이터를 구문 분석할 수 있는지 확인하려면 파일의 열에 해당하는 형식의 값을 전달하거나 FROM 절에 열을 명시적으로 정의하면 됩니다.

다음 형식으로 blob_get 함수를 사용할 수 있습니다.

azure_storage.blob_get(account_name, container_name, path)

다음 예에서는 blob_get 함수를 사용하여 동일한 원본에서 동일한 대상으로의 동일한 작업을 보여 줍니다.

INSERT INTO employees 
SELECT * FROM azure_storage.blob_get('mystorageaccount','mytestblob','employee.csv',options:= azure_storage.options_csv_get(header=>true)) AS res (
  CustomerId int,
  LastName varchar(50),
  FirstName varchar(50))

COPY 명령과 blob_get 함수는 가져오기를 위해 다음 파일 확장자를 지원합니다.

파일 형식 설명
.csv PostgreSQL COPY에서 사용하는 쉼표로 구분된 값 형식
.tsv 탭으로 구분된 값, 기본 PostgreSQL COPY 형식
binary 이진 파일 PostgreSQL COPY 형식
text 단일 텍스트 값(예: 큰 JSON 또는 XML)이 포함된 파일

Azure Database for PostgreSQL 유연한 서버에서 Azure Blob Storage로 데이터 내보내기

Azure Database for PostgreSQL 유연한 서버에서 Azure Blob Storage로 데이터를 내보내려면 azure_storage 확장을 허용 목록에 추가해야 합니다. 그런 다음 CREATE EXTENSION 명령을 사용하여 데이터베이스에 azure_storage PostgreSQL 확장을 설치합니다.

CREATE EXTENSION azure_storage;

스토리지 계정을 만들면 Azure는 해당 계정에 대해 2개의 512비트 스토리지 계정 액세스 키를 만듭니다. 이러한 키를 사용하면 공유 키 권한 부여를 통해 또는 공유 키로 서명된 SAS(공유 액세스 서명) 토큰을 통해 스토리지 계정의 데이터에 대한 액세스 권한을 부여할 수 있습니다.

데이터를 가져오기 전에 account_add 메서드를 사용하여 스토리지 계정을 매핑해야 합니다. 계정을 만들 때 정의한 계정 액세스 키를 제공합니다. 다음 코드 예에서는 스토리지 계정 mystorageaccount를 매핑하고 문자열 SECRET_ACCESS_KEY를 액세스 키 매개 변수로 사용합니다.

SELECT azure_storage.account_add('mystorageaccount', 'SECRET_ACCESS_KEY');

COPY 문 또는 blob_put 함수를 사용하여 Azure Database for PostgreSQL 테이블에서 Azure Blob Storage로 데이터를 내보낼 수 있습니다. 다음 예에서는 COPY 명령을 통해 직원 테이블의 데이터를 employee2.csv라는 새 파일로 내보내는 방법을 보여 줍니다. 파일은 동일한 mystorageaccount Azure Storage 계정의 Blob 컨테이너 mytestblob에 있습니다.

COPY employees 
TO 'https://mystorageaccount.blob.core.windows.net/mytestblob/employee2.csv'
WITH (FORMAT 'csv');

마찬가지로, blob_put 함수를 통해 직원 테이블에서 데이터를 내보낼 수 있으며, 이를 통해 내보낸 데이터를 더욱 제한적으로 제어할 수 있습니다. 다음 예에서는 테이블의 두 열(EmployeeIdLastName)만 내보냅니다. FirstName 열을 건너뜁니다.

SELECT azure_storage.blob_put('mystorageaccount', 'mytestblob', 'employee2.csv', res) FROM (SELECT EmployeeId,LastName FROM employees) res;

COPY 명령과 blob_put 함수는 내보내기를 위해 다음 파일 확장자를 지원합니다.

파일 형식 설명
.csv PostgreSQL COPY에서 사용하는 쉼표로 구분된 값 형식
.tsv 탭으로 구분된 값, 기본 PostgreSQL COPY 형식
binary 이진 파일 PostgreSQL COPY 형식
text 단일 텍스트 값(예: 큰 JSON 또는 XML)이 포함된 파일

Azure Storage의 개체 나열

Azure Blob Storage의 개체를 나열하려면 azure_storage 확장을 허용 목록에 추가해야 합니다. 그런 다음 CREATE EXTENSION 명령을 사용하여 데이터베이스에 azure_storage PostgreSQL 확장을 설치합니다.

CREATE EXTENSION azure_storage;

스토리지 계정을 만들면 Azure는 해당 계정에 대해 2개의 512비트 스토리지 계정 액세스 키를 만듭니다. 이러한 키를 사용하면 공유 키 권한 부여를 통해 또는 공유 키로 서명된 SAS 토큰을 통해 스토리지 계정의 데이터에 대한 액세스 권한을 부여할 수 있습니다.

데이터를 가져오기 전에 account_add 메서드를 사용하여 스토리지 계정을 매핑해야 합니다. 계정을 만들 때 정의한 계정 액세스 키를 제공합니다. 다음 코드 예에서는 스토리지 계정 mystorageaccount를 매핑하고 문자열 SECRET_ACCESS_KEY를 액세스 키 매개 변수로 사용합니다.

SELECT azure_storage.account_add('mystorageaccount', 'SECRET_ACCESS_KEY');

Azure Storage 확장은 blob_list 메서드를 제공합니다. 이 방법을 사용하면 Blob Storage의 개체를 다음 형식으로 나열할 수 있습니다.

azure_storage.blob_list(account_name, container_name, prefix)

다음 예에서는 mystorageaccount라는 스토리지 계정과 mytestbob라는 Blob 컨테이너에서 blob_list 메서드를 사용하여 Azure Storage의 개체를 나열하는 방법을 보여 줍니다. 컨테이너의 파일에는 employee 문자열이 있습니다.

SELECT path, size, last_modified, etag FROM azure_storage.blob_list('mystorageaccount','mytestblob','employee');

Azure Storage의 데이터에 액세스할 수 있는 권한을 비관리 계정에 할당

기본적으로 azure_pg_admin 관리 역할만 계정 키를 추가하고 Azure Database for PostgreSQL 유연한 서버의 스토리지 계정에 액세스할 수 있습니다.

권한 세분성에 따라 두 가지 방법으로 관리자가 아닌 Azure Database for PostgreSQL 유연한 서버 사용자에게 Azure Storage의 데이터에 액세스할 수 있는 권한을 부여할 수 있습니다.

  • 관리자가 아닌 사용자에게 azure_storage_admin을 할당합니다. 이 역할은 Azure Storage 확장 설치와 함께 추가됩니다. 다음 예에서는 support라는 비관리자에게 이 역할을 부여합니다.

    -- Allow adding/list/removing storage accounts
    GRANT azure_storage_admin TO support;
    
  • account_user_add 함수를 호출합니다. 다음 예에서는 Azure Database for PostgreSQL 유연한 서버의 support 역할에 권한을 추가합니다. mystorageaccount라는 Azure Storage 계정에만 사용자 액세스 권한을 부여하므로 더 제한된 권한입니다.

    SELECT * FROM azure_storage.account_user_add('mystorageaccount', 'support');
    

Azure Database for PostgreSQL 유연한 서버의 관리자는 account_list 함수의 출력에서 스토리지 계정 및 권한 목록을 가져올 수 있습니다. 이 함수는 액세스 키가 정의된 모든 계정을 표시합니다.

SELECT * FROM azure_storage.account_list();

Azure Database for PostgreSQL 유연한 서버 관리자가 사용자에게 더 이상 액세스 권한이 없어야 한다고 결정하면 관리자는 account_user_remove 메서드나 함수를 사용하여 이 액세스 권한을 제거할 수 있습니다. 다음 예에서는 스토리지 계정 mystorageaccount에 대한 액세스에서 support 역할을 제거합니다.

SELECT * FROM azure_storage.account_user_remove('mystorageaccount', 'support');

다음 단계

  • 사용하려고 하는 확장이 표시되지 않으면 알려주세요. 피드백 포럼에서 기존 요청에 투표하거나 새 피드백 요청을 작성하세요.