次の方法で共有


Azure Database for PostgreSQL - フレキシブル サーバーで azure_storage 拡張機能を使用してデータをインポートおよびエクスポートする

適用対象: Azure Database for PostgreSQL - フレキシブル サーバー

azure_storage拡張機能を使用すると、Azure Storage アカウントと Azure Database for PostgreSQL フレキシブル サーバーのインスタンスの間で、複数のファイル形式でデータを直接インポートまたはエクスポートできます。

この拡張機能を使用したデータのエクスポートとインポートの例については、この記事の「 Examples 」セクションを参照してください。

Azure Database for PostgreSQL フレキシブル サーバー インスタンスでazure_storage拡張機能を使用するには、「PostgreSQL 拡張機能の使用方法説明されているように、拡張機能をshared_preload_librariesに追加し、azure.extensions サーバー パラメーターに追加する必要があります

shared_preload_libraryは静的サーバー パラメーターであるため、変更を有効にするにはサーバーの再起動が必要です。

サーバーが再起動したら、好みのクライアント (psql、pgAdmin など) を使用して PostgreSQL のインスタンスに接続します。 SHOW azure.extensions;SHOW shared_preload_libraries;の両方に、各SHOW ステートメントによって返されるコンマ区切り値の一覧にazure_storage値が含まれているか確認します。

その場合にのみ、ターゲット データベースに接続し、 CREATE EXTENSION ステートメントを実行することで、拡張機能をインストールできます。 拡張機能を使用できるようにするデータベースごとに、コマンドを個別に繰り返す必要があります。

CREATE EXTENSION azure_storage;

手順の概要

  1. azure_storage拡張機能のユーザーが対話する Azure Storage アカウントを特定します。
  2. これらの各 Azure Storage アカウントの BLOB サービスに対して行われた要求に使用する承認の種類を決定します。 azure_storage 拡張機能では、共有キーによる 認証および Microsoft Entra ID による 認証がサポートされます。 これら 2 種類の承認のうち、Microsoft Entra ID は、共有キーよりも優れたセキュリティと使いやすさを提供し、Microsoft が推奨する認証です。 各ケースで必要な前提条件を満たすには、対応するセクションの手順に従います。
  3. shared_preload_librariesazure_storageを含めます。

サーバー パラメーターのshared_preload_librariesでazure_storageを選択しているスクリーンショット。shared_preload_librariesは静的であるため、変更を有効にするにはサーバーを再起動する必要があります。保存して再起動するために、shared_preload_librariesを変更するときに表示されるダイアログのスクリーンショット。

  1. azure.extensionsazure_storageを含めます。

サーバー パラメーターで azure.extensions でazure_storageを選択しているスクリーンショット。

  1. 好みのクライアント (psql、pgAdmin など) を使用して、Azure Database for PostgreSQL フレキシブル サーバーのインスタンス内の任意のデータベースに接続します。 azure_storage拡張機能を使用して Azure Storage アカウントのインスタンスと対話できるすべての SQL オブジェクト (テーブル、型、関数、ビューなど) を作成するには、次のステートメントを実行します。
    CREATE EXTENSION azure_storage;
    
  2. azure_storage.account_*関数を使用して、PostgreSQL のユーザーまたはロールが azure_storage 拡張機能を使用してアクセスできるようにする Azure Storage アカウントへの参照を追加します。 これらの参照には、参照されている Azure Storage アカウントの名前と、Azure Storage アカウントを操作するときに使用する認証の種類が含まれます。 選択した認証の種類によっては、Azure Storage アカウントのアクセス キーや SAS トークンなどの他のパラメーターも指定する必要があります。

重要

Azure Storage アカウントのアクセス キーを指定する必要がある認証の種類の場合、Azure Storage アクセス キーはストレージ アカウントのルート パスワードに似ています。 常に保護に注意してください。 キーを安全に管理およびローテーションするには、Azure Key Vault を使用します。 azure_storage拡張機能は、pg_read_all_data ロールのメンバーが読み取ることができるテーブル azure_storage.accountsにこれらのキーを格納します。

azure_storage_admin ロールを付与されたユーザーは、次の関数を使用してazure_storage.accounts テーブルと対話できます。

azure_storage_admin ロールは、既定では、azure_pg_admin ロールに付与されます。

Microsoft Entra ID で承認を使用するには

  1. Azure Database for PostgreSQL フレキシブル サーバーのインスタンスで システム割り当てマネージド ID を有効にします。

システム割り当てマネージド ID を有効にするスクリーンショット。

  1. システム割り当てマネージド ID を有効にした後、Azure Database for PostgreSQL フレキシブル サーバーのインスタンスを再起動します。
  2. Azure Storage アカウントの BLOB データにアクセスするためのロールベースのアクセス制御 (RBAC) アクセス許可を、Azure Database for PostgreSQL フレキシブル サーバーのインスタンスのシステム割り当てマネージド ID に割り当てます。

共有キーで承認を使用するには

  1. Azure Storage アカウントには、 Allow ストレージ アカウント キー アクセス が有効になっている必要があります (つまり、 AllowSharedKeyAccess プロパティを false に設定することはできません)。

[ストレージ アカウント キーのアクセスを許可する] が有効になっていることを確認するスクリーンショット。

  1. これを azure_storage.account_add 関数に渡すには、Azure Storage アカウントの 2 つのアクセス キーのいずれかをフェッチします。

ストレージ アカウントのアクセス キーのコピーのスクリーンショット。

関数

azure_storage.account_add

ストレージ アカウントとそれに関連付けられているアクセス キーを、 azure_storage 拡張機能がアクセスできるストレージ アカウントの一覧に追加できるようにする関数。

この関数の以前の呼び出しでこのストレージ アカウントへの参照が既に追加されている場合、新しいエントリは追加されませんが、代わりに既存のエントリのアクセス キーが更新されます。

Note

この関数は、参照されるアカウント名が存在するかどうか、または指定されたアクセス キーを使用してアクセスできるかどうかを検証しません。 ただし、Azure ストレージ アカウントに適用される名前付けの検証規則に従って、ストレージ アカウントの名前が有効であることを検証します。

azure_storage.account_add(account_name_p text, account_key_p text);

この関数にはオーバーロードされたバージョンがあり、参照先の Azure Storage アカウントの名前と、認証の種類、アカウントの種類、ストレージ資格情報など、必要なすべての設定をカプセル化する account_config パラメーターを受け取ります。

azure_storage.account_add(account_config jsonb);

アクセス許可

azure_storage_adminのメンバーである必要があります。

引数

account_name_p

text BLOB、ファイル、キュー、テーブルなど、すべてのオブジェクトを含む Azure BLOB ストレージ アカウントの名前。 ストレージ アカウントには、HTTPS 経由で世界中のどこからでもアクセスできる一意の名前空間が用意されています。

account_key_p

text ストレージ アカウントのいずれかのアクセス キーの値。 Azure Blob Storage のアクセス キーは、ストレージ アカウントのルート パスワードに似ています。 アクセス キーは常に慎重に保護してください。 キーを安全に管理およびローテーションするには、Azure Key Vault を使用します。 アカウント キーは、スーパーユーザーのみがアクセスできるテーブルに格納されます。 azure_storage_admin ロールを付与されたユーザーは、関数を介してこのテーブルを操作できます。 どのストレージ アカウントが追加されているかを確認するには、関数 azure_storage.account_list を使用します。

account_config

jsonb Azure Storage アカウントの名前と、認証の種類、アカウントの種類、ストレージ資格情報など、必要なすべての設定。 ユーティリティ関数 azure_storage.account_options_managed_identityazure_storage.account_options_credentials、または azure_storage.account_options を使用して、この引数として渡す必要がある有効な値を作成することをお勧めします。

返り値の種類

VOID

azure_storage.account_options_managed_identity

ユーティリティ関数として機能し、 azure_storage.account_add 内でパラメーターとして呼び出すことができ、システム割り当てマネージド ID を使用して Azure Storage アカウントと対話するときに、 account_config 引数の有効な値を生成するのに役立ちます。

azure_storage.account_options_managed_identity(name text, type azure_storage.storage_type);

アクセス許可

任意のユーザーまたはロールがこの関数を呼び出すことができます。

引数

name

text BLOB、ファイル、キュー、テーブルなど、すべてのオブジェクトを含む Azure BLOB ストレージ アカウントの名前。 ストレージ アカウントには、HTTPS 経由で世界中のどこからでもアクセスできる一意の名前空間が用意されています。

type

azure_storage.storage_type サポートされているストレージの種類の 1 つの値。 サポートされている値のみが blob

返り値の種類

jsonb

azure_storage.account_options_credentials

ユーティリティ関数として機能し、 azure_storage.account_add 内でパラメーターとして呼び出すことができます。Azure Storage アクセス キーを使用して Azure Storage アカウントと対話するときに、 account_config 引数の有効な値を生成するのに役立ちます。

azure_storage.account_options_credentials(name text, credentials text, type azure_storage.storage_type);

アクセス許可

任意のユーザーまたはロールがこの関数を呼び出すことができます。

引数

name

text BLOB、ファイル、キュー、テーブルなど、すべてのオブジェクトを含む Azure BLOB ストレージ アカウントの名前。 ストレージ アカウントには、HTTPS 経由で世界中のどこからでもアクセスできる一意の名前空間が用意されています。

資格情報

text ストレージ アカウントのいずれかのアクセス キーの値。 Azure Blob Storage のアクセス キーは、ストレージ アカウントのルート パスワードに似ています。 アクセス キーは常に慎重に保護してください。 キーを安全に管理およびローテーションするには、Azure Key Vault を使用します。 アカウント キーは、スーパーユーザーのみがアクセスできるテーブルに格納されます。 azure_storage_admin ロールを付与されたユーザーは、関数を介してこのテーブルを操作できます。 どのストレージ アカウントが追加されているかを確認するには、関数 azure_storage.account_list を使用します。

type

azure_storage.storage_type サポートされているストレージの種類の 1 つの値。 サポートされている値のみが blob

返り値の種類

jsonb

azure_storage.account_options

ユーティリティ関数として機能し、 azure_storage.account_add 内でパラメーターとして呼び出すことができ、Azure Storage アクセス キーまたはシステム割り当てマネージド ID を使用して Azure Storage アカウントと対話するときに、 account_config 引数の有効な値を生成するのに役立ちます。

azure_storage.account_options(name text, auth_type azure_storage.auth_type, storage_type azure_storage.storage_type, credentials text DEFAULT NULL);

アクセス許可

任意のユーザーまたはロールがこの関数を呼び出すことができます。

引数

name

text BLOB、ファイル、キュー、テーブルなど、すべてのオブジェクトを含む Azure BLOB ストレージ アカウントの名前。 ストレージ アカウントには、HTTPS 経由で世界中のどこからでもアクセスできる一意の名前空間が用意されています。

auth_type

azure_storage.auth_type サポートされているストレージの種類の 1 つの値。 サポートされている値のみが access-keyされ、 managed-identity

storage_type

azure_storage.storage_type サポートされているストレージの種類の 1 つの値。 サポートされている値のみが blob

資格情報

text ストレージ アカウントのいずれかのアクセス キーの値。 Azure Blob Storage のアクセス キーは、ストレージ アカウントのルート パスワードに似ています。 アクセス キーは常に慎重に保護してください。 キーを安全に管理およびローテーションするには、Azure Key Vault を使用します。 アカウント キーは、スーパーユーザーのみがアクセスできるテーブルに格納されます。 azure_storage_admin ロールを付与されたユーザーは、関数を介してこのテーブルを操作できます。 どのストレージ アカウントが追加されているかを確認するには、関数 azure_storage.account_list を使用します。

返り値の種類

jsonb

azure_storage.account_remove

azure_storage拡張機能がアクセスできるストレージ アカウントの一覧からストレージ アカウントとそれに関連付けられているアクセス キーを削除できるようにする関数。

azure_storage.account_remove(account_name_p text);

アクセス許可

azure_storage_adminのメンバーである必要があります。

引数

account_name_p

text BLOB、ファイル、キュー、テーブルなど、すべてのオブジェクトを含む Azure BLOB ストレージ アカウントの名前。 ストレージ アカウントには、HTTPS 経由で世界中のどこからでもアクセスできる一意の名前空間が用意されています。

返り値の種類

VOID

azure_storage.account_user_add

azure_storage拡張機能によって提供される関数を使用して、PostgreSQL ユーザーまたはロールにストレージ アカウントへのアクセス権を付与できるようにする関数。

Note

この関数の実行は、最初の引数として名前が渡されているストレージ アカウントが既に azure_storage.account_add を使用して作成されており、2 番目の引数として名前が渡されるユーザーまたはロールが既に存在する場合にのみ成功します。

azure_storage.account_add(account_name_p text, user_p regrole);

アクセス許可

azure_storage_adminのメンバーである必要があります。

引数

account_name_p

text BLOB、ファイル、キュー、テーブルなど、すべてのオブジェクトを含む Azure BLOB ストレージ アカウントの名前。 ストレージ アカウントには、HTTPS 経由で世界中のどこからでもアクセスできる一意の名前空間が用意されています。

user_p

regrole サーバーで使用可能な PostgreSQL ユーザーまたはロールの名前。

返り値の種類

VOID

azure_storage.account_user_remove

azure_storage拡張機能によって提供される関数を使用して、ストレージ アカウントへの PostgreSQL ユーザーまたはロールのアクセスを取り消す関数。

Note

この関数の実行は、名前が最初の引数として渡されるストレージ アカウントが既に azure_storage.account_add を使用して作成されている場合、および名前が 2 番目の引数として渡されるユーザーまたはロールがまだ存在する場合にのみ成功します。 ユーザーまたはロールがサーバーから削除されると、 DROP USER | ROLEを実行することで、Azure Storage アカウントへの参照で付与されたアクセス許可も自動的に削除されます。

azure_storage.account_user_remove(account_name_p text, user_p regrole);

アクセス許可

azure_storage_adminのメンバーである必要があります。

引数

account_name_p

text BLOB、ファイル、キュー、テーブルなど、すべてのオブジェクトを含む Azure BLOB ストレージ アカウントの名前。 ストレージ アカウントには、HTTPS 経由で世界中のどこからでもアクセスできる一意の名前空間が用意されています。

user_p

regrole サーバーで使用可能な PostgreSQL ユーザーまたはロールの名前。

返り値の種類

VOID

azure_storage.account_list

azure_storage.account_add 関数を介して構成されたストレージ アカウントの名前と、azure_storage拡張機能によって提供される関数を介してそのストレージ アカウントを操作するためのアクセス許可が付与されている PostgreSQL ユーザーまたはロールを一覧表示する関数。

azure_storage.account_list();

アクセス許可

azure_storage_adminのメンバーである必要があります。

引数

この関数は引数を受け取りません。

返り値の種類

TABLE(account_name text, auth_type azure_storage.auth_type, azure_storage_type azure_storage.storage_type, allowed_users regrole[]) 追加された Azure Storage アカウントの一覧、各アカウントの操作に使用される認証の種類、ストレージの種類、およびアクセス権が付与されている PostgreSQL ユーザーまたはロールの一覧を含む 4 列のテーブル。

azure_storage.blob_list

参照先ストレージ アカウントの特定のコンテナーに格納されている BLOB の名前とその他のプロパティ (size、lastModified、eTag、contentType、contentEncoding、contentHash) を一覧表示する関数。

azure_storage.blob_list(account_name text, container_name text, prefix text DEFAULT ''::text);

アクセス許可

この関数を呼び出すユーザーまたはロールは、azure_storage.account_user_add を実行して、参照されるaccount_nameの許可リストに追加する必要があります。 azure_storage_adminのメンバーは、azure_storage.account_add を使用して参照が追加されたすべての Azure Storage アカウントを自動的に参照できます。

引数

account_name

text BLOB、ファイル、キュー、テーブルなど、すべてのオブジェクトを含む Azure BLOB ストレージ アカウントの名前。 ストレージ アカウントには、HTTPS 経由で世界中のどこからでもアクセスできる一意の名前空間が用意されています。

container_name

text コンテナーの名前。 ファイル システムのディレクトリと同じように、コンテナーを使用して BLOB のセットを整理できます。 ストレージ アカウントに含めることができるコンテナーの数には制限がなく、1 つのコンテナーに格納できる BLOB の数にも制限はありません。 コンテナー名は、コンテナーまたはその BLOB のアドレス指定に使用される一意の URI の一部であるため、有効なドメイン ネーム システム (DNS) 名である必要があります。 コンテナーに名前を付ける場合は、必ず これらの規則に従ってください

コンテナーの URI は次のようになります: https://myaccount.blob.core.windows.net/mycontainer

prefix

text 指定すると、この関数は、このパラメーターで指定された値で始まる名前の BLOB を返します。 空の文字列を既定値に設定します。

返り値の種類

TABLE(path text, bytes bigint, last_modified timestamp with time zone, etag text, content_type text, content_encoding text, content_hash text) BLOB の完全な名前やその他のプロパティなど、返される BLOB ごとに 1 つのレコードを含むテーブル。

path

text BLOB の完全な名前。

バイト

bigint BLOB のサイズ (バイト単位)。

last_modified

timestamp with time zoneBLOB が最後に変更された日時。 BLOB を変更する操作 (BLOB のメタデータまたはプロパティの更新など) を行うと、BLOB の最終更新時刻が変更されます。

etag

text ETag プロパティは、更新時のオプティミスティック コンカレンシーに使用されます。 レコードが最後に更新された時刻を保存する Timestamp という名前の別のプロパティがあるため、タイムスタンプではありません。 たとえば、エンティティを読み込んで更新する場合、ETag は現在保存されているものと一致する必要があります。 複数のユーザーが同じ項目を編集している場合に、互いの変更を上書きしないようにするため、適切な ETag を設定することが重要です。

content_type

text BLOB に指定されたコンテンツ タイプ。 既定のコンテンツ タイプは application/octet-stream

content_encoding

text Azure Storage で定義できる BLOB の Content-Encoding プロパティ。 圧縮コンテンツの場合は、プロパティを Gzip に設定できます。 ブラウザーがコンテンツにアクセスすると、コンテンツが自動的に展開されます。

content_hash

text トランスポート中に BLOB の整合性を検証するために使用されるハッシュ。 このヘッダーを指定すると、ストレージ サービスは、コンテンツから計算されたハッシュを使用して指定されたハッシュをチェックします。 2 つのハッシュが一致しない場合、操作はエラー コード 400 (無効な要求) で失敗します。

azure_storage.blob_get

データのインポートを許可する関数。 Azure Storage アカウント内の BLOB コンテナーから 1 つ以上のファイルをダウンロードします。 その後、内容が行に変換され、SQL 言語コンストラクトで使用および処理できます。 この関数は、インポートする前に BLOB コンテナーからフェッチされたデータをフィルター処理および操作するためのサポートを追加します。

Note

参照先のストレージ アカウントのコンテナーにアクセスする前に、この関数は、Azure ストレージ アカウントに課される名前付け検証規則に従って、引数として渡されたストレージ アカウントとコンテナーの名前が有効かどうかを確認します。 いずれかが無効な場合は、エラーが発生します。

azure_storage.blob_get(account_name text, container_name text, path text, decoder text DEFAULT 'auto'::text, compression text DEFAULT 'auto'::text, options jsonb DEFAULT NULL::jsonb);

この関数にはオーバーロードされたバージョンがあり、出力形式レコードを簡単に定義できる rec パラメーターを受け取ります。

azure_storage.blob_get(account_name text, container_name text, path text, rec anyelement, decoder text DEFAULT 'auto'::text, compression text DEFAULT 'auto'::text, options jsonb DEFAULT NULL::jsonb);

アクセス許可

この関数を呼び出すユーザーまたはロールは、azure_storage.account_user_add を実行して、参照されるaccount_nameの許可リストに追加する必要があります。 azure_storage_adminのメンバーは、azure_storage.account_add を使用して参照が追加されたすべての Azure Storage アカウントを自動的に参照できます。

引数

account_name

text BLOB、ファイル、キュー、テーブルなど、すべてのオブジェクトを含む Azure BLOB ストレージ アカウントの名前。 ストレージ アカウントには、HTTPS 経由で世界中のどこからでもアクセスできる一意の名前空間が用意されています。

container_name

text コンテナーの名前。 ファイル システムのディレクトリと同じように、コンテナーを使用して BLOB のセットを整理できます。 ストレージ アカウントに含めることができるコンテナーの数には制限がなく、1 つのコンテナーに格納できる BLOB の数にも制限はありません。 コンテナー名は、コンテナーまたはその BLOB のアドレス指定に使用される一意の URI の一部であるため、有効なドメイン ネーム システム (DNS) 名である必要があります。 コンテナーに名前を付ける場合は、必ず これらの規則に従ってください

コンテナーの URI は次のようになります: https://myaccount.blob.core.windows.net/mycontainer

path

text BLOB の完全な名前。

rec

anyelement レコード出力構造の定義。

デコーダー

text BLOB 形式の仕様。 次のいずれかの値に設定できます。

形式 既定値 説明
auto true BLOB の名前に割り当てられた最後の一連の文字に基づいて値を推論します。 BLOB 名が .csv または .csv.gzで終わる場合は、 csvと見なされます。 .tsvまたは.tsv.gzで終わる場合は、tsvと見なされます。 .json.json.gz.xml.xml.gz.txt、または.txt.gzで終わる場合は、textが想定されます。
csv PostgreSQL COPY で使用されるコンマ区切り値の形式。
tsv タブ区切りの値。既定の PostgreSQL COPY 形式です。
binary バイナリ PostgreSQL COPY 形式。
text | xml | json 1 つのテキスト値を含むファイル。
compression

text 圧縮の種類の指定。 次のいずれかの値に設定できます。

形式 既定値 説明
auto true BLOB の名前に割り当てられた最後の一連の文字に基づいて値を推論します。 BLOB 名が .gzで終わる場合は、 gzipと見なされます。 それ以外の場合は、 noneが想定されます。
gzip gzip デコーダーを使用して BLOB を展開します。
none 強制的に、圧縮解除を必要としない BLOB として扱います。

拡張機能は、他の圧縮の種類をサポートしていません。

options

jsonb カスタム ヘッダー、カスタム区切り記号、エスケープ文字などの処理を定義する設定 options は、PostgreSQL の COPY コマンドに渡すことができるオプションがその動作に与える影響と同様の方法で、この関数の動作に影響します。

返り値の種類

SETOF record SETOF anyelement

azure_storage.blob_put

Azure Storage アカウント内の BLOB コンテナーにファイルをアップロードして、データをエクスポートできるようにする関数。 ファイルの内容は、PostgreSQL の行から生成されます。

Note

参照先のストレージ アカウントのコンテナーにアクセスする前に、この関数は、Azure ストレージ アカウントに課される名前付け検証規則に従って、引数として渡されたストレージ アカウントとコンテナーの名前が有効かどうかを確認します。 いずれかが無効な場合は、エラーが発生します。

azure_storage.blob_put(account_name text, container_name text, path text, tuple record)
RETURNS VOID;

オーバーロードされたバージョンの関数があり、 encoder パラメーターが含まれており、 path パラメーターの拡張から推論できない場合、または推論されたエンコーダーをオーバーライドするときに使用するエンコーダーを指定できます。

azure_storage.blob_put(account_name text, container_name text, path text, tuple record, encoder text)
RETURNS VOID;

オーバーロードされたバージョンの関数には、 compression パラメーターも含まれています。これにより、 path パラメーターの拡張から推論できない場合、または推論された圧縮をオーバーライドするときに使用する圧縮を指定できます。

azure_storage.blob_put(account_name text, container_name text, path text, tuple record, encoder text, compression text)
RETURNS VOID;

オーバーロードされたバージョンの関数には、カスタム ヘッダー、カスタム区切り記号、エスケープ文字などを処理するための options パラメーターも含まれています。 options は、PostgreSQL の COPY コマンドに渡すことができるオプションと同様に機能します。

azure_storage.blob_put(account_name text, container_name text, path text, tuple record, encoder text, compression text, options jsonb)
RETURNS VOID;

アクセス許可

この関数を呼び出すユーザーまたはロールは、azure_storage.account_user_add を実行して、参照されるaccount_nameの許可リストに追加する必要があります。 azure_storage_adminのメンバーは、azure_storage.account_add を使用して参照が追加されたすべての Azure Storage アカウントを自動的に参照できます。

引数

account_name

text BLOB、ファイル、キュー、テーブルなど、すべてのオブジェクトを含む Azure BLOB ストレージ アカウントの名前。 ストレージ アカウントには、HTTPS 経由で世界中のどこからでもアクセスできる一意の名前空間が用意されています。

container_name

text コンテナーの名前。 ファイル システムのディレクトリと同じように、コンテナーを使用して BLOB のセットを整理できます。 ストレージ アカウントに含めることができるコンテナーの数には制限がなく、1 つのコンテナーに格納できる BLOB の数にも制限はありません。 コンテナー名は、コンテナーまたはその BLOB のアドレス指定に使用される一意の URI の一部であるため、有効なドメイン ネーム システム (DNS) 名である必要があります。 コンテナーに名前を付ける場合は、必ず これらの規則に従ってください

コンテナーの URI は次のようになります: https://myaccount.blob.core.windows.net/mycontainer

path

text BLOB の完全な名前。

tuple

record レコード出力構造の定義。

エンコーダー

text BLOB 形式の仕様。 次のいずれかの値に設定できます。

形式 既定値 説明
auto true BLOB の名前に割り当てられた最後の一連の文字に基づいて値を推論します。 BLOB 名が .csv または .csv.gzで終わる場合は、 csvと見なされます。 .tsvまたは.tsv.gzで終わる場合は、tsvと見なされます。 .json.json.gz.xml.xml.gz.txt、または.txt.gzで終わる場合は、textが想定されます。
csv PostgreSQL COPY で使用されるコンマ区切り値の形式。
tsv タブ区切りの値。既定の PostgreSQL COPY 形式です。
binary バイナリ PostgreSQL COPY 形式。
text | xml | json 1 つのテキスト値を含むファイル。
compression

text 圧縮の種類の指定。 次のいずれかの値に設定できます。

形式 既定値 説明
auto true BLOB の名前に割り当てられた最後の一連の文字に基づいて値を推論します。 BLOB 名が .gzで終わる場合は、 gzipと見なされます。 それ以外の場合は、 noneが想定されます。
gzip gzip デコーダーを使用して BLOB を展開します。
none 強制的に、圧縮解除を必要としない BLOB として扱います。

拡張機能は、他の圧縮の種類をサポートしていません。

options

jsonb カスタム ヘッダー、カスタム区切り記号、エスケープ文字などの処理を定義する設定 options は、PostgreSQL の COPY コマンドに渡すことができるオプションがその動作に与える影響と同様の方法で、この関数の動作に影響します。

返り値の種類

VOID

azure_storage.options_csv_get

ユーティリティ関数として機能し、 blob_get内のパラメーターとして呼び出すことができる関数で、csv ファイルの内容をデコードするのに役立ちます。

azure_storage.options_csv_get(delimiter text DEFAULT NULL::text, null_string text DEFAULT NULL::text, header boolean DEFAULT NULL::boolean, quote text DEFAULT NULL::text, escape text DEFAULT NULL::text, force_not_null text[] DEFAULT NULL::text[], force_null text[] DEFAULT NULL::text[], content_encoding text DEFAULT NULL::text);

アクセス許可

任意のユーザーまたはロールがこの関数を呼び出すことができます。

引数

delimiter

text ファイルの各行 (行) 内の列を区切る文字。 1 バイト文字にする必要があります。 この関数は任意の数の文字の区切り記号をサポートしていますが、1 バイト文字を超える文字を使用しようとすると、PostgreSQL は COPY delimiter must be a single one-byte character エラーを報告します。

null_string

text null 値を表す文字列。 既定では、テキスト形式の \N (バックスラッシュ N)、CSV 形式では引用符で囲まれていない空の文字列です。 null と空の文字列を区別しない場合には、テキスト形式でも空の文字列を使用するほうが良いかもしれません。

boolean ファイル内の各列の名前を含むヘッダー行がファイルに含まれているかどうかを示すフラグ。 出力時に、最初の行にはテーブルの列名が含まれます。

quote

text データ値が引用符で囲まれるときに使用される引用符文字。 既定では二重引用符です。 1 バイト文字にする必要があります。 この関数は任意の数の文字の区切り記号をサポートしていますが、1 バイト文字を超える文字を使用しようとすると、PostgreSQL は COPY quote must be a single one-byte character エラーを報告します。

エスケープ

text QUOTE 値と一致するデータ文字の前に表示される文字。 既定では、QUOTE 値と同じです (データに引用符が表示される場合、引用符文字は 2 倍になります)。 1 バイト文字にする必要があります。 この関数は任意の数の文字の区切り記号をサポートしていますが、1 バイト文字を超える文字を使用しようとすると、PostgreSQL は COPY escape must be a single one-byte character エラーを報告します。

force_not_null

text[] 指定した列の値が null 文字列と一致しません。 null 文字列が空である既定のケースでは、空の値は引用符で囲まれていない場合でも、null ではなく長さ 0 の文字列として読み取られます。

force_null

text[] 引用符で囲まれた場合でも、指定した列の値を null 文字列と照合し、一致が見つかった場合は、値を NULL に設定します。 null 文字列が空である既定のケースでは、引用符で囲まれた空の文字列が NULL に変換されます。

content_encoding

text ファイルのエンコードに使用するエンコードの名前。 このオプションを省略すると、現在のクライアント エンコードが使用されます。

返り値の種類

jsonb

azure_storage.options_copy

ユーティリティ関数として機能する関数。これは、 blob_get内のパラメーターとして呼び出すことができます。 これは、 options_csv_getoptions_tsv、および options_binaryのヘルパー関数として機能します。

azure_storage.options_copy(delimiter text DEFAULT NULL::text, null_string text DEFAULT NULL::text, header boolean DEFAULT NULL::boolean, quote text DEFAULT NULL::text, escape text DEFAULT NULL::text, force_quote text[] DEFAULT NULL::text[], force_not_null text[] DEFAULT NULL::text[], force_null text[] DEFAULT NULL::text[], content_encoding text DEFAULT NULL::text);

アクセス許可

任意のユーザーまたはロールがこの関数を呼び出すことができます。

引数

delimiter

text ファイルの各行 (行) 内の列を区切る文字。 1 バイト文字にする必要があります。 この関数は任意の数の文字の区切り記号をサポートしていますが、1 バイト文字を超える文字を使用しようとすると、PostgreSQL は COPY delimiter must be a single one-byte character エラーを報告します。

null_string

text null 値を表す文字列。 既定では、テキスト形式の \N (バックスラッシュ N)、CSV 形式では引用符で囲まれていない空の文字列です。 null と空の文字列を区別しない場合には、テキスト形式でも空の文字列を使用するほうが良いかもしれません。

ヘッダー

boolean ファイル内の各列の名前を含むヘッダー行がファイルに含まれているかどうかを示すフラグ。 出力時に、最初の行にはテーブルの列名が含まれます。

quote

text データ値が引用符で囲まれるときに使用される引用符文字。 既定では二重引用符です。 1 バイト文字にする必要があります。 この関数は任意の数の文字の区切り記号をサポートしていますが、1 バイト文字を超える文字を使用しようとすると、PostgreSQL は COPY quote must be a single one-byte character エラーを報告します。

エスケープ

text QUOTE 値と一致するデータ文字の前に表示される文字。 既定では、QUOTE 値と同じです (データに引用符が表示される場合、引用符文字は 2 倍になります)。 1 バイト文字にする必要があります。 この関数は任意の数の文字の区切り記号をサポートしていますが、1 バイト文字を超える文字を使用しようとすると、PostgreSQL は COPY escape must be a single one-byte character エラーを報告します。

force_quote

text[] は、指定された各列のすべての NULL 以外の値に対して引用符が使用されるように強制します。 NULL 出力が引用符で囲まれることはありません。 * を指定すると、NULL 以外の値がすべての列で引用符で囲まれます。

force_not_null

text[] 指定した列の値が null 文字列と一致しません。 null 文字列が空である既定のケースでは、空の値は引用符で囲まれていない場合でも、null ではなく長さ 0 の文字列として読み取られます。

force_null

text[] 引用符で囲まれた場合でも、指定した列の値を null 文字列と照合し、一致が見つかった場合は、値を NULL に設定します。 null 文字列が空である既定のケースでは、引用符で囲まれた空の文字列が NULL に変換されます。

content_encoding

text ファイルのエンコードに使用するエンコードの名前。 このオプションを省略すると、現在のクライアント エンコードが使用されます。

返り値の種類

jsonb

azure_storage.options_tsv

ユーティリティ関数として機能し、 blob_get内のパラメーターとして呼び出すことができます。tsv ファイルの内容をデコードする場合に便利です。

azure_storage.options_tsv(delimiter text DEFAULT NULL::text, null_string text DEFAULT NULL::text, content_encoding text DEFAULT NULL::text);

アクセス許可

任意のユーザーまたはロールがこの関数を呼び出すことができます。

引数

delimiter

text ファイルの各行 (行) 内の列を区切る文字。 1 バイト文字にする必要があります。 この関数は任意の数の文字の区切り記号をサポートしていますが、1 バイト文字を超える文字を使用しようとすると、PostgreSQL は COPY delimiter must be a single one-byte character エラーを報告します。

null_string

text null 値を表す文字列。 既定では、テキスト形式の \N (バックスラッシュ N)、CSV 形式では引用符で囲まれていない空の文字列です。 null と空の文字列を区別しない場合には、テキスト形式でも空の文字列を使用するほうが良いかもしれません。

content_encoding

text ファイルのエンコードに使用するエンコードの名前。 このオプションを省略すると、現在のクライアント エンコードが使用されます。

返り値の種類

jsonb

azure_storage.options_binary

ユーティリティ関数として機能する関数。 blob_get内でパラメーターとして呼び出すことができます。バイナリ ファイルの内容をデコードする場合に便利です。

azure_storage.options_binary(content_encoding text DEFAULT NULL::text);

アクセス許可

任意のユーザーまたはロールがこの関数を呼び出すことができます。

引数

content_encoding

text ファイルのエンコードに使用するエンコードの名前。 このオプションを省略すると、現在のクライアント エンコードが使用されます。

返り値の種類

jsonb

考えられるエラー

エラー: azure_storage: 要求された操作を実行するのに十分なアクセス許可がありません

Azure Storage (azure_storage.blob_listazure_storage.blob_get 、または azure_storage.blob_put) とやり取りする関数を実行する場合、システム割り当てマネージド ID には、適切なデータ プレーンロールまたはアクセス許可 (通常は、azure_storage.blob_put の場合は Storage BLOB データ共同作成者 、その他の 2 つの関数の最小 Storage BLOB データ閲覧者 ) が付与されません。

必要最小限のアクセス許可を既に付与しているが、まだ有効になっていない場合もあります。 これらのアクセス許可が反映されるまで数分かかる場合があります。

エラー: azure_storage: ストレージ資格情報がありません

Azure Storage (azure_storage.blob_listazure_storage.blob_get 、または azure_storage.blob_put) と対話する関数を実行する場合、拡張機能がストレージ アカウントで認証する資格情報は、 azure_storage.account_addを使用して登録されません。

エラー: azure_storage: 接続中の内部エラー

フレキシブル サーバーのインスタンスでシステム割り当てマネージド ID が有効になっていない場合。

エラー: azure_storage: ストレージ資格情報の形式が無効です

フレキシブル サーバーのインスタンスでシステム割り当てマネージド ID が有効になっているが、有効にした後にサーバーが再起動されていない場合。

エラー: azure_storage: 現在のユーザー <user_or_role> はストレージ アカウント <storage_accountを使用できません>

azure Storage (azure_storage.blob_listazure_storage.blob_get 、または azure_storage.blob_put) と対話する関数のうち、 azure_storage_admin のメンバーではなく、参照先のストレージ アカウントを使用するためのアクセス許可が付与されていない、 azure_storage.account_user_addを使用するユーザーまたはロールを使用して実行する場合。

次の例を実行するには、次の前提条件を満たす必要があります。

  1. Azure Storage アカウントを作成します。 Azure Storage アカウントを作成するには、まだお持ちでない場合は、 <resource_group><location><storage_account><blob_container>の値をカスタマイズし、次の Azure CLI コマンドを実行します。
    resource_group=<resource_group>
    location=<location>
    storage_account=<storage_account>
    blob_container=<blob_container>
    az group create --name $resource_group --location $location
    az storage account create --resource-group $resource_group --name $storage_account --location $location --sku Standard_LRS --kind BlobStorage --public-network-access enabled --access-tier hot
    
  2. BLOB コンテナーを作成します。 BLOB コンテナーを作成するには、次の Azure CLI を実行します。
    az storage container create --account-name $storage_account --name $blob_container -o tsv
    
  3. ストレージ アカウントに割り当てられている 2 つのアクセス キーのいずれかをフェッチします。 後の手順で引数として azure_storage.account_add に渡す必要があるため、必ずaccess_keyの値をコピーしてください。 2 つのアクセス キーの 1 つ目をフェッチするには、次の Azure CLI コマンドを実行します。
    access_key=$(az storage account keys list --resource-group $resource_group --account-name $storage_account --query [0].value)
    echo "Following is the value of your access key:"
    echo $access_key
    
  4. 例で使用したデータ セットを含むファイルをダウンロードし、BLOB コンテナーにアップロードします。 データ セットを含むファイルをダウンロードするには、次の Azure CLI コマンドを実行します。
    mkdir --parents azure_storage_examples
    cd azure_storage_examples
    curl -O https://examples.citusdata.com/tutorial/events.csv
    gzip -k events.csv
    cp events.csv events_blob_without_extension
    cp events.csv events_pipe.csv
    cp events.csv.gz events_compressed
    sed -i 's/,/|/g' events_pipe.csv
    az storage blob upload-batch --account-name $storage_account --destination $blob_container --source . --pattern "events*" --account-key $access_key --overwrite --output none --only-show-errors
    

Note

特定のストレージ アカウントに格納されているコンテナーまたは BLOB を一覧表示できますが、そのストレージ アカウントへの参照に対するアクセス許可が PostgreSQL ユーザーまたはロールに付与されている場合にのみ、 azure_storage.account_user_addを使用します。 azure_storage_admin ロールのメンバーには、azure_storage.account_add を使用して追加されたすべての Azure Storage アカウントに対して、この特権が付与されます。 既定では、 azure_pg_admin のメンバーにのみ azure_storage_admin ロールが付与されます。

データが読み込まれるテーブルを作成する

ストレージ アカウントにアップロードした CSV ファイルの内容をインポートするテーブルを作成しましょう。 これを行うには、 PgAdminpsql、または好みのクライアントを使用して Azure Database for PostgreSQL フレキシブル サーバーのインスタンスに接続し、次のステートメントを実行します。

CREATE TABLE IF NOT EXISTS events
        (
         event_id bigint
        ,event_type text
        ,event_public boolean
        ,repo_id bigint
        ,payload jsonb
        ,repo jsonb
        ,user_id bigint
        ,org jsonb
        ,created_at timestamp without time zone
        );

ストレージ アカウントのアクセス キーを追加する

この例では、ストレージ アカウントへの参照と、そのストレージ アカウントのアクセス キーを追加する方法を示します。このキーは、Azure Database for PostgreSQL フレキシブル サーバーのインスタンスで azure_storage 拡張機能によって提供される機能を介してそのコンテンツにアクセスするために必要です。

<storage_account> は、ストレージ アカウントの名前に設定する必要があります。 前のスクリプトを使用した場合、この値は、これらのスクリプトでstorage_account環境変数に設定した値と一致する必要があります。

同様に、 <access_key> は、ストレージ アカウントからフェッチした値に設定する必要があります。

SELECT azure_storage.account_add('<storage_account>', '<access_key>');

ヒント

Azure portal からストレージ アカウント名とそのアクセス キーの 1 つを取得する場合は、ストレージ アカウントを検索し、リソース メニューで Access キーを選択Storage アカウント名をコピーしkey1 セクションから Key をコピーします (最初にキーの横にある Show を選択する必要があります)。

ストレージ アカウントへの参照を削除する

この例では、ストレージ アカウントへの参照を削除して、現在のデータベースのユーザーが azure_storage 拡張機能機能を使用してそのストレージ アカウントにアクセスできないようにする方法を示します。

<storage_account> は、ストレージ アカウントの名前に設定する必要があります。 前のスクリプトを使用した場合、この値は、これらのスクリプトでstorage_account環境変数に設定した値と一致する必要があります。

SELECT azure_storage.account_remove('<storage_account>');

Azure Blob Storage リファレンスでユーザーまたはロールへのアクセスを許可する

この例では、 <regular_user>という名前のユーザーまたはロールへのアクセスを許可する方法を示します。これにより、そのような PostgreSQL ユーザーは、 azure_storage 拡張機能を使用して、参照先の Azure ストレージ アカウントによってホストされているコンテナーに格納されている BLOB にアクセスできます。

<storage_account> は、ストレージ アカウントの名前に設定する必要があります。 前のスクリプトを使用した場合、この値は、これらのスクリプトでstorage_account環境変数に設定した値と一致する必要があります。

<regular_user> は、既存のユーザーまたはロールの名前に設定する必要があります。

SELECT * FROM azure_storage.account_user_add('<storage_account>', '<regular_user>');

Azure ストレージ アカウントへのすべての参照を一覧表示する

この例では、このデータベースで azure_storage 拡張機能が参照できる Azure ストレージ アカウントと、各ストレージ アカウントにアクセスするために使用される認証の種類、および azure_storage.account_user_add 関数を介してアクセス許可が付与されているユーザーまたはロールを確認し、拡張機能によって提供される機能を使用してその Azure ストレージ アカウントにアクセスする方法を示します。

SELECT * FROM azure_storage.account_list();

Azure Blob Storage リファレンスのユーザーまたはロールからのアクセスを取り消す

この例では、 <regular_user>という名前のユーザーまたはロールからのアクセスを取り消して、そのような PostgreSQL ユーザーが azure_storage 拡張機能を使用して、参照先の Azure ストレージ アカウントによってホストされているコンテナーに格納されている BLOB にアクセスできないようにする方法を示します。

<storage_account> は、ストレージ アカウントの名前に設定する必要があります。 前のスクリプトを使用した場合、この値は、これらのスクリプトでstorage_account環境変数に設定した値と一致する必要があります。

<regular_user> は、既存のユーザーまたはロールの名前に設定する必要があります。

SELECT * FROM azure_storage.account_user_remove('<storage_account>', '<regular_user>');

コンテナー内のすべての BLOB をリストする

この例では、ストレージ アカウント <storage_account>のコンテナー <container_name>内のすべての既存の BLOB を一覧表示する方法を示します。

<storage_account> は、ストレージ アカウントの名前に設定する必要があります。 前のスクリプトを使用した場合、この値は、これらのスクリプトでstorage_account環境変数に設定した値と一致する必要があります。

<blob_container> は、BLOB コンテナーの名前に設定する必要があります。 前のスクリプトを使用した場合、この値は、これらのスクリプトでblob_container環境変数に設定した値と一致する必要があります。

SELECT * FROM azure_storage.blob_list('<storage_account>','<blob_container>');

特定の BLOB 名プレフィックスを持つオブジェクトを一覧表示する

この例では、<blob_name_prefix>で始まるストレージ アカウント <storage_account>のコンテナー <blob_container>内のすべての既存の BLOB を一覧表示する方法を示します。

<storage_account> は、ストレージ アカウントの名前に設定する必要があります。 前のスクリプトを使用した場合、この値は、これらのスクリプトでstorage_account環境変数に設定した値と一致する必要があります。

<blob_container> は、BLOB コンテナーの名前に設定する必要があります。 前のスクリプトを使用した場合、この値は、これらのスクリプトでblob_container環境変数に設定した値と一致する必要があります。

<blob_name_prefix> は、列挙された BLOB の名前に含めるプレフィックスに設定する必要があります。 すべての BLOB を返す場合は、このパラメーターを空の文字列に設定するか、このパラメーターの値を指定しないでください。この場合、値の既定値は空の文字列になります。

SELECT * FROM azure_storage.blob_list('<storage_account>','<blob_container>','<blob_name_prefix>');

または、次の構文を使用できます。

SELECT * FROM azure_storage.blob_list('<storage_account>','<blob_container>') WHERE path LIKE '<blob_name_prefix>%';

コンテナー内の BLOB からコンテンツを読み取る

blob_get関数は、<storage_account> ストレージの参照されるコンテナー <blob_container>内の 1 つの特定の BLOB (この場合events.csv) の内容を取得します。 blob_getがデータを解析する方法を知るために、NULL::table_name形式で値を渡すことができます。ここで、table_nameは、読み取られる BLOB のスキーマと一致するテーブルを参照します。 この例では、最初に作成した events テーブルを参照しています。

<storage_account> は、ストレージ アカウントの名前に設定する必要があります。 前のスクリプトを使用した場合、この値は、これらのスクリプトでstorage_account環境変数に設定した値と一致する必要があります。

<blob_container> は、BLOB コンテナーの名前に設定する必要があります。 前のスクリプトを使用した場合、この値は、これらのスクリプトでblob_container環境変数に設定した値と一致する必要があります。

<blob_name_prefix> は、列挙された BLOB の名前に含めるプレフィックスに設定する必要があります。 すべての BLOB を返す場合は、このパラメーターを空の文字列に設定するか、このパラメーターの値を指定しないでください。この場合、値の既定値は空の文字列になります。

SELECT * FROM azure_storage.blob_get
        ('<storage_account>'
        ,'<blob_container>'
        ,'events.csv'
        , NULL::events)
LIMIT 5;

または、blob_get関数の後に AS 句を使用して、結果のスキーマを明示的に定義することもできます。

SELECT * FROM azure_storage.blob_get('<storage_account>','<blob_container>','events.csv.gz')
AS res (
         event_id BIGINT
        ,event_type TEXT
        ,event_public BOOLEAN
        ,repo_id BIGINT
        ,payload JSONB
        ,repo JSONB
        ,user_id BIGINT
        ,org JSONB
        ,created_at TIMESTAMP WITHOUT TIME ZONE)
LIMIT 5;

デコーダー オプションを使用する

この例では、 decoder オプションの使用方法を示します。 通常、形式はファイルの拡張子から推論されますが、ファイル コンテンツに一致する拡張子がない場合は、デコーダー引数を渡すことができます。

<storage_account> は、ストレージ アカウントの名前に設定する必要があります。 前のスクリプトを使用した場合、この値は、これらのスクリプトでstorage_account環境変数に設定した値と一致する必要があります。

<blob_container> は、BLOB コンテナーの名前に設定する必要があります。 前のスクリプトを使用した場合、この値は、これらのスクリプトでblob_container環境変数に設定した値と一致する必要があります。

SELECT * FROM azure_storage.blob_get
        ('<storage_account>'
        ,'<blob_container>'
        ,'events_blob_without_extension'
        , NULL::events
        , decoder := 'csv')
LIMIT 5;

デコーダー オプションで圧縮を使用する

この例では、名前が .gz 拡張子で終わらない gzip 圧縮 BLOB に対して gzip 圧縮の使用を強制する方法を示します。

<storage_account> は、ストレージ アカウントの名前に設定する必要があります。 前のスクリプトを使用した場合、この値は、これらのスクリプトでstorage_account環境変数に設定した値と一致する必要があります。

<blob_container> は、BLOB コンテナーの名前に設定する必要があります。 前のスクリプトを使用した場合、この値は、これらのスクリプトでblob_container環境変数に設定した値と一致する必要があります。

SELECT * FROM azure_storage.blob_get
        ('<storage_account>'
        ,'<blob_container>'
        ,'events_compressed'
        , NULL::events
        , decoder := 'csv'
        , compression := 'gzip')
LIMIT 5;

フィルター処理されたコンテンツをインポートし、csv 形式オブジェクトから読み込む前に変更する

この例では、SQL テーブルに読み込む前に、BLOB からインポートされたコンテンツをフィルター処理して変更する可能性を示します。

<storage_account> は、ストレージ アカウントの名前に設定する必要があります。 前のスクリプトを使用した場合、この値は、これらのスクリプトでstorage_account環境変数に設定した値と一致する必要があります。

<blob_container> は、BLOB コンテナーの名前に設定する必要があります。 前のスクリプトを使用した場合、この値は、これらのスクリプトでblob_container環境変数に設定した値と一致する必要があります。

SELECT concat('P-',event_id::text) FROM azure_storage.blob_get
        ('<storage_account>'
        ,'<blob_container>'
        ,'events.csv'
        , NULL::events)
WHERE event_type='PushEvent'
LIMIT 5;

ヘッダー、カスタム区切り文字、エスケープ文字を使用してファイルからコンテンツを照会する

この例では、 options_copy の結果を options 引数に渡すことで、カスタム区切り記号とエスケープ文字を使用する方法を示します。

<storage_account> は、ストレージ アカウントの名前に設定する必要があります。 前のスクリプトを使用した場合、この値は、これらのスクリプトでstorage_account環境変数に設定した値と一致する必要があります。

<blob_container> は、BLOB コンテナーの名前に設定する必要があります。 前のスクリプトを使用した場合、この値は、これらのスクリプトでblob_container環境変数に設定した値と一致する必要があります。

SELECT * FROM azure_storage.blob_get
        ('<storage_account>'
        ,'<blob_container>'
        ,'events_pipe.csv'
        ,NULL::events
        ,options := azure_storage.options_csv_get(delimiter := '|' , header := 'true')
        );

BLOB の内容に対する集計クエリ

この例では、BLOB コンテナーに格納されている情報に対して集計操作を実行する方法を示します。BLOB の内容を PostgreSQL テーブルにインポートする必要はありません。

<storage_account> は、ストレージ アカウントの名前に設定する必要があります。 前のスクリプトを使用した場合、この値は、これらのスクリプトでstorage_account環境変数に設定した値と一致する必要があります。

<blob_container> は、BLOB コンテナーの名前に設定する必要があります。 前のスクリプトを使用した場合、この値は、これらのスクリプトでblob_container環境変数に設定した値と一致する必要があります。

SELECT event_type, COUNT(*) FROM azure_storage.blob_get
        ('<storage_account>'
        ,'<blob_container>'
        ,'events.csv'
        , NULL::events)
GROUP BY event_type
ORDER BY 2 DESC
LIMIT 5;

COPY ステートメントを使用してデータをインポートする

次の例は、COPY コマンドを使用して、Azure Storage アカウント <storage_account>の BLOB コンテナー <blob_container>に存在する events.csv という名前の BLOB からのデータのインポートを示しています。

  1. ソース ファイルのスキーマに一致するテーブルを作成します。

    CREATE TABLE IF NOT EXISTS events
            (
             event_id bigint
            ,event_type text
            ,event_public boolean
            ,repo_id bigint
            ,payload jsonb
            ,repo jsonb
            ,user_id bigint
            ,org jsonb
            ,created_at timestamp without time zone
            );
    
  2. COPY ステートメントを使用して、ターゲット テーブルにデータをコピーします。 最初の行に列ヘッダーが含まれていることを指定します。

    COPY events
    FROM 'https://<storage_account>.blob.core.windows.net/<blob_container>/events.csv'
    WITH (FORMAT 'csv', header);
    

コンテナー内の BLOB にコンテンツを書き込む

blob_put関数は、1 つの特定の BLOB (この場合eventscopy.csv) の内容を構成し、<storage_account> ストレージの参照されるコンテナー <blob_container>にアップロードします。 この例では、 blob_get を使用して 5 行のセットを作成し、 blob_put 集計関数に渡し、 eventscopy.csvという名前の BLOB としてアップロードします。

<storage_account> は、ストレージ アカウントの名前に設定する必要があります。 前のスクリプトを使用した場合、この値は、これらのスクリプトでstorage_account環境変数に設定した値と一致する必要があります。

<blob_container> は、BLOB コンテナーの名前に設定する必要があります。 前のスクリプトを使用した場合、この値は、これらのスクリプトでblob_container環境変数に設定した値と一致する必要があります。

SELECT azure_storage.blob_put
        ('<storage_account>'
        ,'<blob_container>'
        ,'eventscopy.csv'
        , top_5_events)
FROM (SELECT * FROM azure_storage.blob_get
                     ('<storage_account>'
                     ,'<blob_container>'
                     ,'events.csv'
                     , NULL::events) LIMIT 5) AS top_5_events;

COPY ステートメントを使用してデータをエクスポートする

次の例は、COPY コマンドを使用して、events という名前のテーブルから、Azure Storage アカウント <storage_account>の BLOB コンテナー <blob_container>に存在する events_exported.csv という名前の BLOB にデータをエクスポートする方法を示しています。

  1. ソース ファイルのスキーマに一致するテーブルを作成します。

    CREATE TABLE IF NOT EXISTS events
            (
             event_id bigint
            ,event_type text
            ,event_public boolean
            ,repo_id bigint
            ,payload jsonb
            ,repo jsonb
            ,user_id bigint
            ,org jsonb
            ,created_at timestamp without time zone
            );
    
  2. テーブルにデータを読み込みます。 INSERT ステートメントを実行して複数の合成行を設定するか、COPY ステートメントを使用して Import データを使用します サンプル データ セットの内容を設定します。

  3. COPY ステートメントを使用して、ターゲット テーブルにデータをコピーします。 最初の行に列ヘッダーが含まれていることを指定します。

    COPY events
    TO 'https://<storage_account>.blob.core.windows.net/<blob_container>/events_exported.csv'
    WITH (FORMAT 'csv', header);
    

Azure Database for PostgreSQL 製品チームと提案やバグを共有します