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 バージョン 7.4 以降をサポートします。

前提条件

データ ストアがオンプレ ミスネットワーク、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 のリンク サービスを作成します。

  1. Azure Data Factory または Synapse ワークスペースの [管理] タブに移動し、[リンクされたサービス] を選択して、[新規] をクリックします。

  2. Postgre を検索し、PostgreSQL コネクタを選択します。

    PostgreSQL コネクタを選択します。

  3. サービスの詳細を構成し、接続をテストして、新しいリンク サービスを作成します。

    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 を明示的に使用したうえで、以下の構成を行う必要があります。

  1. いずれかの SHIR サーバーで DSN を設定します。
  2. PostgreSQL の適切な証明書を SHIR サーバーの C:\Windows\ServiceProfiles\DIAHostService\AppData\Roaming\postgresql\root.crt に格納します。 ODBC ドライバーはデータベースに接続するとき、この場所から SSL 証明書を探して検証します。
  3. データ ファクトリ接続で 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" が指定されている場合)

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\""
            },
            "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
NumbericArray String String
DateArray String String
Range String String
Bpchar String String

Lookup アクティビティのプロパティ

プロパティの詳細については、Lookup アクティビティに関するページを参照してください。

PostgreSQL のリンクされたサービスをアップグレードする

PostgreSQL のリンクされたサービスをアップグレードするのに役立つ手順を次に示します。

  1. 新しい PostgreSQL リンク サービスを作成し、リンク サービスのプロパティを参照してそれを構成します。

  2. 最新の 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 アクティビティでソースおよびシンクとしてサポートされるデータ ストアの一覧については、サポートされるデータ ストアに関するセクションを参照してください。