Azure Data Factory または Synapse Analytics を使用して PostgreSQL からデータをコピーする
適用対象: Azure Data Factory Azure Synapse Analytics
ヒント
企業向けのオールインワン分析ソリューション、Microsoft Fabric の Data Factory をお試しください。 Microsoft Fabric は、データ移動からデータ サイエンス、リアルタイム分析、ビジネス インテリジェンス、レポートまで、あらゆるものをカバーしています。 無料で新たに試用を開始する方法については、こちらをご覧ください。
この記事では、Azure Data Factory および Synapse Analytics パイプラインで Copy アクティビティを使用して、PostgreSQL データベースからデータをコピーする方法について説明します。 この記事は、コピー アクティビティの概要を示しているコピー アクティビティの概要に関する記事に基づいています。
重要
新しい PostgreSQL コネクタでは、PostgreSQL のネイティブ サポートが改善されました。 ソリューションで従来の PostgreSQL コネクタを使用している場合は、2024 年 10 月 31 日より前に PostgreSQL コネクタをアップグレードしてください。 レガシ バージョンと最新バージョンの違いの詳細については、このセクションを参照してください。
サポートされる機能
この PostgreSQL コネクタでは、次の機能がサポートされます。
サポートされる機能 | IR |
---|---|
Copy アクティビティ (ソース/-) | ① ② |
Lookup アクティビティ | ① ② |
① Azure 統合ランタイム ② セルフホステッド統合ランタイム
コピー アクティビティによってソースまたはシンクとしてサポートされているデータ ストアの一覧については、サポートされているデータ ストアに関する記事の表をご覧ください。
具体的には、この PostgreSQL コネクタは PostgreSQL バージョン 12 以降をサポートします。
前提条件
データ ストアがオンプレ ミスネットワーク、Azure 仮想ネットワーク、または Amazon Virtual Private Cloud 内にある場合は、それに接続するようセルフホステッド統合ランタイムを構成する必要があります。
データ ストアがマネージド クラウド データ サービスである場合は、Azure Integration Runtime を使用できます。 ファイアウォール規則で承認されている IP にアクセスが制限されている場合は、Azure Integration Runtime の IP を許可リストに追加できます。
また、Azure Data Factory のマネージド仮想ネットワーク統合ランタイム機能を使用すれば、セルフホステッド統合ランタイムをインストールして構成しなくても、オンプレミス ネットワークにアクセスすることができます。
Data Factory によってサポートされるネットワーク セキュリティ メカニズムやオプションの詳細については、「データ アクセス戦略」を参照してください。
Integration Runtime のバージョン 3.7 以降には PostgreSQL ドライバーが組み込まれているため、ドライバーを手動でインストールする必要はありません。
作業の開始
パイプラインでコピー アクティビティを実行するには、次のいずれかのツールまたは SDK を使用します。
UI を使用して PostgreSQL のリンク サービスを作成する
次の手順を使用して、Azure portal UI で PostgreSQL のリンク サービスを作成します。
Azure Data Factory または Synapse ワークスペースの [管理] タブに移動し、[リンクされたサービス] を選択して、[新規] をクリックします。
Postgre を検索し、PostgreSQL コネクタを選択します。
サービスの詳細を構成し、接続をテストして、新しいリンク サービスを作成します。
コネクタの構成の詳細
次のセクションでは、PostgreSQL コネクタに固有の Data Factory エンティティを定義するために使用されるプロパティについて詳しく説明します。
リンクされたサービスのプロパティ
PostgreSQL のリンクされたサービスでは、次のプロパティがサポートされます。
プロパティ | 内容 | 必須 |
---|---|---|
type | type プロパティは PostgreSqlV2 に設定する必要があります。 | はい |
サーバー | PostgreSQL を実行しているホスト名 (必要に応じてポートも) を指定します。 | はい |
port | PostgreSQL サーバーの TCP ポート。 | いいえ |
database | 接続先の PostgreSQL データベース。 | はい |
username | 接続するためのユーザー名。 IntegratedSecurity を使用している場合は必要ありません。 | はい |
password | 接続するためのパスワード。 IntegratedSecurity を使用している場合は必要ありません。 | はい |
sslMode | サーバーのサポートに応じて、SSL を使用するかどうかを制御します。 - Disable: SSL が無効です。 サーバーで SSL が必要である場合、接続は失敗します。 - Allow: サーバーで許可されている場合は非 SSL 接続が優先されますが、SSL 接続も許可されます。 - Prefer: サーバーで許可されている場合は SSL 接続が優先されますが、SSL を使用しない接続も許可されます。 - Require: サーバーで SSL がサポートされていない場合、接続は失敗します。 - Verify-ca: サーバーで SSL がサポートされていない場合、接続は失敗します。 サーバー証明書の検証も行われます。 - Verify-full: サーバーで SSL がサポートされていない場合、接続は失敗します。 ホスト名を含むサーバー証明書の検証も行われます。 オプション: Disable (0) / Allow (1) / Prefer (2) (既定値) / Require (3) / Verify-ca (4) / Verify-full (5) |
いいえ |
authenticationType | データベースに接続するための認証の種類。 Basic のみサポートされます。 | はい |
connectVia | データ ストアに接続するために使用される統合ランタイム。 詳細については、「前提条件」セクションを参照してください。 指定されていない場合は、既定の Azure 統合ランタイムが使用されます。 | いいえ |
追加の接続プロパティ: | ||
schema | スキーマ検索パスを設定します。 | いいえ |
プール | 接続プールを使用する必要があるかどうか。 | いいえ |
connectionTimeout | 接続を確立する際、試行を終了してエラーを生成するまでに待機する時間 (秒)。 | いいえ |
commandTimeout | コマンド実行の試行から、試行を終了してエラーを生成するまでに待機する時間 (秒)。 無限の場合はゼロに設定されます。 | いいえ |
trustServerCertificate | サーバー証明書を検証せずに信頼するかどうか。 | いいえ |
sslCertificate | サーバーに送信するクライアント証明書の場所。 | いいえ |
sslKey | サーバーに送信するクライアント証明書のクライアント キーの場所。 | いいえ |
sslPassword | クライアント証明書用のキーのパスワード。 | いいえ |
readBufferSize | Npgsql が読み込み時に使用する内部バッファーのサイズを決定します。 データベースから大きな値を転送する場合、この値を増やすとパフォーマンスが向上する可能性があります。 | いいえ |
logParameters | 有効にすると、コマンド実行時にパラメーター値がログに記録されます。 | いいえ |
タイムゾーン | セッション タイムゾーンを取得または設定します。 | いいえ |
encoding | PostgreSQL 文字列データのエンコードまたはデコードに使用される .NET エンコーディングを取得または設定します。 | いいえ |
注意
セルフホステッド統合ランタイムの使用時、完全な SSL 検証を ODBC 接続で行うためには、PostgreSQL コネクタの代わりに接続の種類として ODBC を明示的に使用したうえで、以下の構成を行う必要があります。
- いずれかの SHIR サーバーで DSN を設定します。
- PostgreSQL の適切な証明書を SHIR サーバーの C:\Windows\ServiceProfiles\DIAHostService\AppData\Roaming\postgresql\root.crt に格納します。 ODBC ドライバーはデータベースに接続するとき、この場所から SSL 証明書を探して検証します。
- データ ファクトリ接続で ODBC タイプの接続を使用します。その際、接続文字列には、SHIR サーバー上に作成した DSN の場所を指定します。
例:
{
"name": "PostgreSqlLinkedService",
"properties": {
"type": "PostgreSqlV2",
"typeProperties": {
"server": "<server>",
"port": 5432,
"database": "<database>",
"username": "<username>",
"password": {
"type": "SecureString",
"value": "<password>"
},
"sslmode": <sslmode>,
"authenticationType": "Basic"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
例: パスワードを Azure Key Vault に格納する
{
"name": "PostgreSqlLinkedService",
"properties": {
"type": "PostgreSqlV2",
"typeProperties": {
"server": "<server>",
"port": 5432,
"database": "<database>",
"username": "<username>",
"password": {
"type": "AzureKeyVaultSecret",
"store": {
"referenceName": "<Azure Key Vault linked service name>",
"type": "LinkedServiceReference"
},
"secretName": "<secretName>"
}
"sslmode": <sslmode>,
"authenticationType": "Basic"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
データセットのプロパティ
データセットを定義するために使用できるセクションとプロパティの完全な一覧については、データセットに関する記事をご覧ください。 このセクションでは、PostgreSQL データセットでサポートされるプロパティの一覧を示します。
PostgreSQL からのデータ コピーについては、次のプロパティがサポートされています。
プロパティ | 内容 | 必須 |
---|---|---|
type | データセットの type プロパティは PostgreSqlV2Table に設定する必要があります | はい |
schema | スキーマの名前。 | いいえ (アクティビティ ソースの "query" が指定されている場合) |
table | テーブルの名前。 | いいえ (アクティビティ ソースの "query" が指定されている場合) |
例
{
"name": "PostgreSQLDataset",
"properties":
{
"type": "PostgreSqlV2Table",
"linkedServiceName": {
"referenceName": "<PostgreSQL linked service name>",
"type": "LinkedServiceReference"
},
"annotations": [],
"schema": [],
"typeProperties": {
"schema": "<schema name>",
"table": "<table name>"
}
}
}
RelationalTable
型のデータセットを使用していた場合、現状のまま引き続きサポートされますが、今後は新しいものを使用することをお勧めします。
コピー アクティビティのプロパティ
アクティビティの定義に利用できるセクションとプロパティの完全な一覧については、パイプラインに関する記事を参照してください。 このセクションでは、PostgreSQL ソースでサポートされるプロパティの一覧を示します。
ソースとしての PostgreSQL
PostgreSQL からデータをコピーするために、コピー アクティビティの source セクションでは次のプロパティがサポートされています。
プロパティ | 内容 | 必須 |
---|---|---|
type | コピー アクティビティのソースの type プロパティは PostgreSqlV2Source に設定する必要があります | はい |
query | カスタム SQL クエリを使用してデータを読み取ります。 (例: "query": "SELECT * FROM \"MySchema\".\"MyTable\"" )。 |
いいえ (データセットの "tableName" が指定されている場合) |
queryTimeout | コマンド実行の試行を終了してエラーを生成するまでの待機時間。既定値は 120 分です。 このプロパティにパラメーターを設定する場合、使用できる値は "02:00:00" (120 分) などの期間です。 詳細については、「CommandTimeout」を参照してください。 commandTimeout と queryTimeout の両方が構成されている場合は、queryTimeout が優先されます。 |
いいえ |
Note
スキーマ名とテーブル名は、大文字と小文字が区別されます。 クエリ内では、これらを ""
(二重引用符) で囲んでください。
例:
"activities":[
{
"name": "CopyFromPostgreSQL",
"type": "Copy",
"inputs": [
{
"referenceName": "<PostgreSQL input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "PostgreSqlV2Source",
"query": "SELECT * FROM \"MySchema\".\"MyTable\"",
"queryTimeout": "00:10:00"
},
"sink": {
"type": "<sink type>"
}
}
}
]
RelationalSource
型のソースを使用していた場合は現状のまま引き続きサポートされますが、今後は新しいものを使用することをお勧めします。
PostgreSQL のデータ型マッピング
PostgreSQL からデータをコピーするとき、PostgreSQL のデータ型から、サービスによって内部的に使用される中間データ型への、以下のマッピングが使用されます。 コピー アクティビティでソースのスキーマとデータ型がシンクにマッピングされるしくみについては、スキーマとデータ型のマッピングに関する記事を参照してください。
PostgreSQL データ型 | 中間サービス データ型 | PostgreSQL (レガシ) 用の中間サービス データ型 |
---|---|---|
SmallInt |
Int16 |
Int16 |
Integer |
Int32 |
Int32 |
BigInt |
Int64 |
Int64 |
Decimal (有効桁数 <= 28) |
Decimal |
Decimal |
Decimal (有効桁数 > 28) |
サポートされていません | String |
Numeric |
Decimal |
Decimal |
Real |
Single |
Single |
Double |
Double |
Double |
SmallSerial |
Int16 |
Int16 |
Serial |
Int32 |
Int32 |
BigSerial |
Int64 |
Int64 |
Money |
Decimal |
String |
Char |
String |
String |
Varchar |
String |
String |
Text |
String |
String |
Bytea |
Byte[] |
Byte[] |
Timestamp |
DateTime |
DateTime |
Timestamp with time zone |
DateTime |
String |
Date |
DateTime |
DateTime |
Time |
TimeSpan |
TimeSpan |
Time with time zone |
DateTimeOffset |
String |
Interval |
TimeSpan |
String |
Boolean |
Boolean |
Boolean |
Point |
String |
String |
Line |
String |
String |
Iseg |
String |
String |
Box |
String |
String |
Path |
String |
String |
Polygon |
String |
String |
Circle |
String |
String |
Cidr |
String |
String |
Inet |
String |
String |
Macaddr |
String |
String |
Macaddr8 |
String |
String |
Tsvector |
String |
String |
Tsquery |
String |
String |
UUID |
Guid |
Guid |
Json |
String |
String |
Jsonb |
String |
String |
Array |
String |
String |
Bit |
Byte[] |
Byte[] |
Bit varying |
Byte[] |
Byte[] |
XML |
String |
String |
IntArray |
String |
String |
TextArray |
String |
String |
NumericArray |
String |
String |
DateArray |
String |
String |
Range |
String |
String |
Bpchar |
String |
String |
Lookup アクティビティのプロパティ
プロパティの詳細については、Lookup アクティビティに関するページを参照してください。
PostgreSQL コネクタをアップグレードする
PostgreSQL コネクタをアップグレードするのに役立つ手順を次に示します。
新しい PostgreSQL リンク サービスを作成し、リンク サービスのプロパティを参照してそれを構成します。
最新の PostgreSQL リンク サービスのデータ型マッピングは、レガシ バージョンのものとは異なります。 最新のデータ型マッピングについては、「PostgreSQL のデータ型マッピング」を参照してください。
PostgreSQL と PostgreSQL (レガシ) の相違点
次の表に PostgreSQL と PostgreSQL (レガシ) のデータ型のマッピングにおける相違点を示します。
PostgreSQL データ型 | PostgreSQL 用の中間サービス データ型 | PostgreSQL (レガシ) 用の中間サービス データ型 |
---|---|---|
Money | 10 進法 | String |
Timestamp With Time Zone | DateTime | String |
Time with Time Zone | DateTimeOffset | String |
Interval | TimeSpan | String |
BigDecimal | サポートされていません。 別の方法として、to_char() 関数を使用して BigDecimal を String に変換します。 |
String |
関連するコンテンツ
Copy アクティビティでソースおよびシンクとしてサポートされるデータ ストアの一覧については、サポートされるデータ ストアに関するセクションを参照してください。