Azure Data Factory および Azure Synapse Analytics での Parquet 形式

適用対象: Azure Data Factory Azure Synapse Analytics

ヒント

企業向けのオールインワン分析ソリューション、Microsoft Fabric の Data Factory をお試しください。 Microsoft Fabric は、データ移動からデータ サイエンス、リアルタイム分析、ビジネス インテリジェンス、レポートまで、あらゆるものをカバーしています。 無料で新しい試用版を開始する方法について説明します。

Parquet ファイルの解析または Parquet 形式でのデータの書き込みを行う場合は、この記事に従ってください。

Parquet 形式は次のコネクタでサポートされています。

使用可能なすべてのコネクタでサポートされている機能の一覧については、コネクタの概要に関するページをご覧ください。

セルフホステッド統合ランタイムの使用

重要

セルフホステッド統合ランタイム を利用するコピー (たとえば、オンプレミスとクラウド データ ストア間) では、Parquet ファイルをそのままコピーしない場合、IR マシン上に 64 ビット JRE 8 (Java Runtime Environment) または OpenJDK をインストールする必要があります。 詳細については、次の段落をご確認ください。

Parquet ファイルのシリアル化/逆シリアル化を使用してセルフホステッド IR 上で実行されるコピーでは、サービスは最初に JRE のレジストリ (SOFTWARE\JavaSoft\Java Runtime Environment\{Current Version}\JavaHome) を調べ、見つからない場合は次に OpenJDK のシステム変数 JAVA_HOME を調べることで、Java ランタイムを見つけます。

  • JRE を使用する場合:64 ビット IR には 64 ビット JRE が必要です。 こちらから入手できます。
  • OpenJDK の使用方法:IR バージョン 3.13 以降でサポートされています。 jvm.dll を他のすべての必要な OpenJDK のアセンブリと共にセルフホステッド IR マシンにパッケージ化し、それに応じてシステム環境変数 JAVA_HOME を設定します。その後、セルフホステッド IR 再起動して、すぐに有効にします。

ヒント

セルフホステッド統合ランタイムを使用して、 Parquet 形式をコピー元またはコピー先にしてデータをコピーしたときに、[An error occurred when invoking java, message: java.lang.OutOfMemoryError:Java heap space (java の呼び出し中にエラーが発生しました。メッセージ: java.lang.OutOfMemoryError:Java heap space)] というエラーが発生する場合は、まず、セルフホステッド IR のホストであるマシン内に環境変数 _JAVA_OPTIONS を追加してください。次に、JVM の最小/最大ヒープ サイズを調整し、コピーを行えるようにしてから、パイプラインを再実行してください。

Set JVM heap size on Self-hosted IR

例: 変数 _JAVA_OPTIONS を設定して、値 -Xms256m -Xmx16g を指定します。 フラグ Xms では、Java 仮想マシン (JVM) の初期メモリ割り当てプールを指定します。Xmx では、最大メモリ割り当てプールを指定します。 これは、JVM 起動時のメモリ量が Xms、使用可能なメモリ量が最大で Xmx であることを意味します。 既定では、サービスにより最小で 64MB、最大で 1G が使用されます。

データセットのプロパティ

データセットを定義するために使用できるセクションとプロパティの完全な一覧については、データセットに関する記事をご覧ください。 このセクションでは、Parquet データセットでサポートされるプロパティの一覧を示します。

プロパティ Description 必須
type データセットの type プロパティは Parquet に設定する必要があります。 はい
location ファイルの場所の設定。 ファイル ベースの各コネクタには、固有の場所の種類と location でサポートされるプロパティがあります。 詳細については、コネクタの記事でデータセットのプロパティに関するセクションを参照してください。> はい
compressionCodec Parquet ファイルへの書き込み時に使用する圧縮コーデック。 データ ファクトリーは、Parquet ファイルから読み取るときに、ファイルのメタデータに基づいて圧縮コーデックを自動的に決定します。
サポートされている種類は、"なし"、"gzip"、"snappy" (既定値)、および "lzo" です。 Parquet ファイルの読み取りおよび書き込みの場合、コピー アクティビティでは現在、LZO がサポートされていないことにご注意ください。
いいえ

注意

Parquet ファイルでは、列名に空白文字はサポートされません。

Azure Blob Storage の Parquet データセットの例を次に示します。

{
    "name": "ParquetDataset",
    "properties": {
        "type": "Parquet",
        "linkedServiceName": {
            "referenceName": "<Azure Blob Storage linked service name>",
            "type": "LinkedServiceReference"
        },
        "schema": [ < physical schema, optional, retrievable during authoring > ],
        "typeProperties": {
            "location": {
                "type": "AzureBlobStorageLocation",
                "container": "containername",
                "folderPath": "folder/subfolder",
            },
            "compressionCodec": "snappy"
        }
    }
}

コピー アクティビティのプロパティ

アクティビティの定義に利用できるセクションとプロパティの完全な一覧については、パイプラインに関する記事を参照してください。 このセクションでは、Parquet のソースとシンクでサポートされるプロパティの一覧を示します。

ソースとしての Parquet

Copy アクティビティの *source* セクションでは、次のプロパティがサポートされます。

プロパティ Description 必須
type コピー アクティビティのソースの type プロパティは ParquetSource に設定する必要があります。 はい
storeSettings データ ストアからデータを読み取る方法を指定するプロパティのグループ。 ファイル ベースの各コネクタには、storeSettings に、固有のサポートされる読み取り設定があります。 詳細については、コネクタの記事で Copy アクティビティのプロパティに関するセクションを参照してください。> いいえ

シンクとしての Parquet

Copy アクティビティの *sink* セクションでは、次のプロパティがサポートされます。

プロパティ Description 必須
type コピー アクティビティ シンクの type プロパティには ParquetSink を設定する必要があります。 はい
formatSettings プロパティのグループ。 後の Parquet の書き込み設定に関する表を参照してください。 いいえ
storeSettings データ ストアにデータを書き込む方法を指定するプロパティのグループ。 ファイル ベースの各コネクタには、storeSettings に、固有のサポートされる書き込み設定があります。 詳細については、コネクタの記事で Copy アクティビティのプロパティに関するセクションを参照してください。> いいえ

formatSettings でサポートされている Parquet 書き込み設定:

プロパティ Description 必須
type formatSettings の type は、ParquetWriteSettings に設定する必要があります。 Yes
maxRowsPerFile データをフォルダーに書き込むとき、複数のファイルに書き込み、ファイルあたりの最大行を指定することを選択できます。 No
fileNamePrefix maxRowsPerFile が構成されている場合に使用されます。
データを複数のファイルに書き込むとき、ファイル名のプレフィックスを指定します。結果的に <fileNamePrefix>_00000.<fileExtension> のパターンになります。 指定されていない場合、ファイル名プレフィックスは自動生成されます。 このプロパティは、ソースがファイルベース ストアかパーティション オプション対応データ ストアの場合、適用されません。
いいえ

Mapping Data Flow のプロパティ

マッピング データ フローでは、Azure Blob StorageAzure Data Lake Storage Gen1Azure Data Lake Storage Gen2 および SFTP のデータ ストアで Parquet 形式での読み取りと書き込みを実行でき、Amazon S3 で Parquet 形式を読み取ることができます。

ソースのプロパティ

次の表に、Parquet ソースでサポートされるプロパティの一覧を示します。 これらのプロパティは、 [ソース オプション] タブで編集できます。

名前 説明 必須 使用できる値 データ フロー スクリプトのプロパティ
Format 形式は parquet である必要があります はい parquet format
Wild card paths (ワイルドカード パス) ワイルドカードのパスに一致するすべてのファイルが処理されます。 データセットで設定されているフォルダーとファイル パスはオーバーライドされます。 no String[] wildcardPaths
パーティションのルート パス パーティション分割されたファイル データについては、パーティション フォルダーを列として読み取るためにパーティションのルート パスを入力できます no String partitionRootPath
ファイルの一覧 処理するファイルを一覧表示しているテキスト ファイルをソースが指しているかどうか no true または false fileList
ファイル名を格納する列 ソース ファイル名とパスを使用して新しい列を作成します no String rowUrlColumn
完了後 処理後にファイルを削除または移動します。 ファイル パスはコンテナー ルートから始まります no 削除: true または false
移動: [<from>, <to>]
purgeFiles
moveFiles
最終更新日時でフィルター処理 最後に変更された日時に基づいてファイルをフィルター処理する場合に選択 no Timestamp modifiedAfter
modifiedBefore
[Allow no files found](ファイルの未検出を許可) true の場合、ファイルが見つからない場合でもエラーはスローされない no true または false ignoreNoFilesFound

ソースの例

次の図は、マッピング データ フローにおける Parquet ソースの構成例です。

Parquet source

関連付けられているデータ フロー スクリプトは次のとおりです。

source(allowSchemaDrift: true,
    validateSchema: false,
    rowUrlColumn: 'fileName',
    format: 'parquet') ~> ParquetSource

シンクのプロパティ

次の表に、Parquet シンクでサポートされるプロパティの一覧を示します。 これらのプロパティは、 [設定] タブで編集できます。

名前 説明 必須 使用できる値 データ フロー スクリプトのプロパティ
Format 形式は parquet である必要があります はい parquet format
Clear the folder (フォルダーのクリア) 書き込みの前に宛先フォルダーがクリアされるかどうか no true または false truncate
ファイル名のオプション 書き込まれたデータの名前付け形式です。 既定では、part-#####-tid-<guid> という形式で、パーティションごとに 1 ファイルです いいえ パターン: String
パーティションあたり: String[]
列内のデータとして: String
1 つのファイルに出力する: ['<fileName>']
filePattern
partitionFileNames
rowUrlColumn
partitionFileNames

シンクの例

次の図は、マッピング データ フローにおける Parquet シンクの構成例です。

Parquet sink

関連付けられているデータ フロー スクリプトは次のとおりです。

ParquetSource sink(
    format: 'parquet',
    filePattern:'output[n].parquet',
    truncate: true,
    allowSchemaDrift: true,
    validateSchema: false,
    skipDuplicateMapInputs: true,
    skipDuplicateMapOutputs: true) ~> ParquetSink

データ型のサポート

Parquet 複合データ型 (MAP、LIST、STRUCT など) は、現在、コピー アクティビティではなくデータ フローでのみサポートされています。 データ フローで複合型を使用するには、データセットにファイル スキーマをインポートしないで、データセット内のスキーマを空白のままにしておきます。 次に、ソース変換で、プロジェクションをインポートします。