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 ファイルからのデータのインポートを示しています。
ソース ファイル スキーマに一致するターゲット テーブルを作成します。
CREATE TABLE employees ( EmployeeId int PRIMARY KEY, LastName VARCHAR ( 50 ) UNIQUE NOT NULL, FirstName VARCHAR ( 50 ) NOT NULL );
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 つの列 (EmployeeId
と LastName
) のみをエクスポートします。 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');
次のステップ
- 使用する拡張機能が見つからない場合は、お知らせください。 フィードバック フォーラムで、既存のリクエストに投票することや、新しいフィードバック リクエストを作成することができます。