Share via


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 は、テキスト データやバイナリ データなどの大量の非構造化データを格納するために最適化されています。 非構造化データとは、特定のデータ モデルや定義に従っていないデータであり、テキスト データやバイナリ データなどがあります。

Azure Blob Storage には、リソースの 3 種類の階層があります。

  • ストレージ アカウントは、BLOB、ファイル、キュー、テーブル、ディスクなどのアイテムのサービスを保持する管理エンティティです。

    また、Azure でストレージ アカウントを作成すると、ストレージ リソースに一意の名前空間が与えられます。 その一意の名前空間が、URL の一部を形成します。 ストレージ アカウント名は、Azure 内のすべての既存のストレージ アカウント名で一意になっている必要があります。

  • コンテナー はストレージ アカウント内にあります。 コンテナーは、BLOB が格納されているフォルダーのようなものです。

    セキュリティ ポリシーを定義し、ポリシーをコンテナーに割り当てることができます。 これらのポリシーは、コンテナー内のすべての BLOB に連鎖します。

    ストレージ アカウントには、無制限の数のコンテナーを含めることができます。 各コンテナーには、最大 500 TB のストレージ アカウント サイズまで、無制限の数の 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 により、そのアカウント用に 512 ビットのストレージ アカウント アクセス キーが 2 つ生成されます。 これらのキーを使用して、共有キー認証からストレージ アカウント内のデータへのアクセスを認証できます。

データをインポートする前に、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 ストレージ アカウント内の 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 1 つのテキスト値を含むファイル (大きな 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 により、そのアカウント用に 512 ビットのストレージ アカウント アクセス キーが 2 つ生成されます。 これらのキーを使用すると、共有キーの承認または共有キーで署名された Shared Access Signature (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 ストレージ アカウント内の BLOB コンテナー mytestblob に存在します。

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

同様に、blob_put 関数を使用して従業員テーブルからデータをエクスポートできます。この関数を使用すると、エクスポートされたデータをさらに有限に制御できます。 次の例では、テーブルの 2 つの列 (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 1 つのテキスト値を含むファイル (大きな JSON や XML など)

Azure Storage のオブジェクトをリスト表示する

Azure Blob Storage 内のオブジェクトを一覧表示するには、azure_storage 拡張機能を許可リストに載せる必要があります。 次に、CREATE EXTENSION コマンドを使用して、データベースに azure_storage PostgreSQL 拡張機能をインストールします。

CREATE EXTENSION azure_storage;

ストレージ アカウントを作成すると、Azure により、そのアカウント用に 512 ビットのストレージ アカウント アクセス キーが 2 つ生成されます。 これらのキーを使用すると、共有キーの承認または共有キーで署名された 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 Database for PostgreSQL フレキシブル サーバーのストレージ アカウントにアクセスできるのは、azure_pg_admin 管理ロールのみです。

Azure Storage のデータにアクセスするためのアクセス許可を管理者以外の Azure Database for PostgreSQL フレキシブル サーバー ユーザーに付与するには、アクセス許可の細分性に応じて 2 つの方法があります。

  • 管理者以外のユーザーに 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');

次のステップ

  • 使用する拡張機能が見つからない場合は、お知らせください。 フィードバック フォーラムで、既存のリクエストに投票することや、新しいフィードバック リクエストを作成することができます。