

# Spark ジョブの AWS Glue の AWS Glue バージョン 4.0 への移行
<a name="migrating-version-40"></a>

このトピックでは、AWS Glue バージョン 0.9、1.0、2.0、および 3.0 の間の変更について説明し、Spark アプリケーションと ETL ジョブを AWS Glue 4.0 に移行できるようにします。また、AWS Glue 4.0 の機能とそれを使用する利点についても説明します。

この機能を AWS Glue ETL ジョブに使用するには、ジョブを作成するとき、`Glue version` として **4.0** を選択します。

**Topics**
+ [サポートされる新機能](#migrating-version-40-features)
+ [AWS Glue 4.0 に移行するためのアクション](#migrating-version-40-actions)
+ [移行チェックリスト](#migrating-version-40-checklist)
+ [AWS Glue 3.0 から AWS Glue 4.0 への移行](#migrating-version-40-from-30)
+ [AWS Glue 2.0 から AWS Glue 4.0 への移行](#migrating-version-40-from-20)
+ [AWS Glue 1.0 から AWS Glue 4.0 への移行](#migrating-version-40-from-10)
+ [AWS Glue 0.9 から AWS Glue 4.0 への移行](#migrating-version-40-from-09)
+ [AWS Glue 4.0 向けのコネクタと JDBC ドライバーの移行](#migrating-version-40-connector-driver-migration)
+ [付録 A: 注目すべき依存関係のアップグレード](#migrating-version-40-appendix-dependencies)
+ [付録 B: JDBC ドライバーのアップグレード](#migrating-version-40-appendix-jdbc-driver)
+ [付録 C: コネクタのアップグレード](#migrating-version-40-appendix-connector)

## サポートされる新機能
<a name="migrating-version-40-features"></a>

このセクションでは、AWS Glue バージョン 4.0 の新機能と利点について説明します。
+ これは Apache Spark 3.3.0 に基づいていますが、アダプティブクエリ実行、ベクトル化されたリーダー、最適化されたシャッフルとパーティション結合など、AWS Glue での最適化や Amazon EMR が含まれています。
+ MySQL、Microsoft SQL Server、Oracle、PostgreSQL、MongoDB、アップグレードされた Spark ライブラリなど、すべての AWS Glue ネイティブソース用に JDBC ドライバーをアップグレードしました。依存関係は Spark 3.3.0 によって取り込まれています。
+ 新しい Amazon Redshift コネクタと JDBC ドライバーで更新されました。
+ EMR File System (EMRFS) をアップグレードして Amazon S3 アクセスを最適化し、デフォルトで Amazon S3 に最適化された出力コミッターが有効になりました。
+ パーティションインデックス、プッシュダウン述語、パーティションリスト、アップグレードされた Hive メタストアクライアントにより、データカタログアクセスを最適化しました。
+ セルレベルのフィルタリングとデータレイクトランザクションを備えた管理されたカタログテーブル用の Lake Formation と統合しました。
+ スタートアップレイテンシーが短縮され、ジョブ全体の完了時間と対話性が改善されます。
+ Spark ジョブは、1 秒単位で課金され、最小課金時間は 1/10 になります。つまり、最小 10 分が最小 1 分になります。
+ Apache Hudi、Delta Lake、および Apache Iceberg によるオープンデータレイクフレームワークのネイティブサポート。
+ Amazon S3 ベースのクラウドシャッフルストレージプラグイン (Apache Spark プラグイン) のネイティブサポート。これにより、Amazon S3 によるシャッフルと伸縮自在なストレージ容量が使用できるようになります。

**Spark 3.1.1 から Spark 3.3.0 への主な機能強化**  
次の機能強化があります。
+ 行レベルのランタイムフィルタリング ([SPARK-32268](https://issues.apache.org/jira/browse/SPARK-32268))。
+ ANSI 拡張機能 ([SPARK-38860](https://issues.apache.org/jira/browse/SPARK-38860))。
+ エラーメッセージの改善 ([SPARK-38781](https://issues.apache.org/jira/browse/SPARK-38781))。
+ Parquet ベクトル化リーダーの複合型のサポート ([SPARK-34863](https://issues.apache.org/jira/browse/SPARK-34863))。
+ Spark SQL の隠しファイルメタデータのサポート ([SPARK-37273](https://issues.apache.org/jira/browse/SPARK-37273))。
+ Python/Pandas UDF 用のプロファイラーを提供 ([SPARK-37443](https://issues.apache.org/jira/browse/SPARK-37443))。
+ Trigger.Once のようなストリーミングクエリを複数のバッチで実行できるように、Trigger.AvailableNow を導入 ([SPARK-36533](https://issues.apache.org/jira/browse/SPARK-36533))。
+ より包括的な Datasource V2 プッシュダウン機能 ([SPARK-38788](https://issues.apache.org/jira/browse/SPARK-38788))。
+ log4j 1 から log4j 2 への移行 ([SPARK-37814](https://issues.apache.org/jira/browse/SPARK-37814))。

**その他の注目すべき変更**  
次の変更があります。
+ 重要な変更
  + Python 3.6 サポートへの参照を docs と Python/docs から削除 ([SPARK-36977](https://issues.apache.org/jira/browse/SPARK-36977))。
  + 組み込みの pickle を cloudpickle に置き換えることで、名前付きタプルハックを削除 ([SPARK-32079](https://issues.apache.org/jira/browse/SPARK-32079))。
  + Pandas の最小バージョンを 1.0.5 に引き上げ ([SPARK-37465](https://issues.apache.org/jira/browse/SPARK-37465))。

## AWS Glue 4.0 に移行するためのアクション
<a name="migrating-version-40-actions"></a>

既存のジョブについては、ジョブ設定で、`Glue version` を以前のバージョンから `Glue 4.0` に変更します。
+ AWS Glue Studio では、`Glue version` で `Glue 4.0 - Supports Spark 3.3, Scala 2, Python 3` を選択します。
+ API では、[https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-jobs-job.html#aws-glue-api-jobs-job-UpdateJob](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-jobs-job.html#aws-glue-api-jobs-job-UpdateJob) API オペレーションの `GlueVersion` パラメータで **4.0** を選択します。

新しいジョブについては、ジョブを作成するときに `Glue 4.0` を選択します。
+ コンソールでは、`Glue version` で `Spark 3.3, Python 3 (Glue Version 4.0) or Spark 3.3, Scala 2 (Glue Version 3.0)` を選択します。
+ AWS Glue Studio では、`Glue version` で `Glue 4.0 - Supports Spark 3.3, Scala 2, Python 3` を選択します。
+ API では、[https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-jobs-job.html#aws-glue-api-jobs-job-CreateJob](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-jobs-job.html#aws-glue-api-jobs-job-CreateJob) API オペレーションの `GlueVersion` パラメータで **4.0** を選択します。

AWS Glue 2.0 以前で生成された AWS Glue 4.0 Spark イベントログを表示するには、[CloudFormation または Docker を使用して AWS Glue 4.0 用にアップグレードされた Spark 履歴サーバーを起動します](https://docs.aws.amazon.com/glue/latest/dg/monitor-spark-ui-history.html)。

## 移行チェックリスト
<a name="migrating-version-40-checklist"></a>
+ ジョブの外部 Python ライブラリが Python 2.7/3.6 に依存していますか。
  + Spark 3.3.0 では Python 2.7 と 3.6 のサポートが完全に削除されたため、依存ライブラリを Python 2.7/3.6 から Python 3.10 に更新してください。

## AWS Glue 3.0 から AWS Glue 4.0 への移行
<a name="migrating-version-40-from-30"></a>

移行時には、次の変更点に注意してください。
+ AWS Glue 3.0 に存在する既存のすべてのジョブパラメータと主要な機能は、AWS Glue 4.0 に存在します。
+ AWS Glue 3.0 では、Amazon EMR に最適化された Spark 3.1.1 を使用していますが、AWS Glue 4.0 では、Amazon EMR に最適化された Spark 3.3.0 を使用しています。

  一部の Spark の変更のみについてですが、削除された機能が参照されないように、スクリプトの修正が必要になる場合があります。
+ AWS Glue 4.0 には EMRFS と Hadoop のアップデートも含まれています。特定のバージョンについては、「[付録 A: 注目すべき依存関係のアップグレード](#migrating-version-40-appendix-dependencies)」を参照してください。
+ ETL ジョブで提供される AWS SDK が 1.11 から 1.12 にアップグレードされました。
+ すべての Python ジョブは Python バージョン 3.10 を使用します。以前、AWS Glue 3.0 では、Python 3.7 が使用されていました。

  その結果、AWS Glue に用意されている pymodule の一部はアップグレードされます。
+ Log4j は Log4j2 にアップグレードされました。
  + Log4j2 マイグレーションパスについては、「[Log4j のドキュメント](https://logging.apache.org/log4j/2.x/manual/migration.html#Log4j2API)」を参照してください。
  + カスタム log4j.properties ファイルの名前を log4j2.properties ファイルに変更し、適切な log4j2 プロパティを使用する必要があります。
+ 特定のコネクタの移行については、「[AWS Glue 4.0 向けのコネクタと JDBC ドライバーの移行](#migrating-version-40-connector-driver-migration)」を参照してください。
+ AWS Encryption SDK が 1.x から 2.x にアップグレードされました。AWS Glue セキュリティ設定を使用する AWS Glue ジョブや、AWS Encryption SDK の実行時に提供される依存関係に依存するジョブが影響を受けます。AWS Glue ジョブの移行については、次の説明を参照してください。

  AWS Glue 2.0/3.0 には既に AWS Encryption SDK ブリッジバージョンが含まれているため、AWS Glue 2.0/3.0 ジョブを AWS Glue 4.0 ジョブに安全にアップグレードできます。

Spark の移行ドキュメントを参照してください。
+ 「[Upgrading from Spark SQL 3.1 to 3.2](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-31-to-32)」(Spark SQL 3.1 から 3.2 へのアップグレード)
+ 「[Upgrading from Spark SQL 3.2 to 3.3](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-32-to-33)」(Spark SQL 3.2 から 3.3 へのアップグレード)

## AWS Glue 2.0 から AWS Glue 4.0 への移行
<a name="migrating-version-40-from-20"></a>

移行時には、次の変更点に注意してください。

**注記**  
AWS Glue 3.0 に関連する移行手順については、「[AWS Glue 3.0 から AWS Glue 4.0 への移行](#migrating-version-40-from-30)」を参照してください。
+ AWS Glue 2.0 に存在する既存のすべてのジョブパラメータと主要な機能は、AWS Glue 4.0 に存在します。
+ Parquet データを Amazon S3 に書き込むための EMRFS S3 最適化コミッターは、AWS Glue 3.0 以降デフォルトで有効になっています。ただし、`--enable-s3-parquet-optimized-committer` を `false` にすることで無効化することができます。
+ AWS Glue 2.0 では、オープンソースの Spark 2.4 を使用していますが、AWS Glue 4.0 では、Amazon EMR で最適化された Spark 3.3.0 を使用しています。
  + 一部の Spark の変更のみについてですが、削除された機能が参照されないように、スクリプトの修正が必要になる場合があります。
  + 例えば、Spark 3.3.0 では Scala 型指定されていない UDF は有効になりませんが、Spark 2.4 では有効になります。
+ ETL ジョブで提供される AWS SDK が 1.11 から 1.12 にアップグレードされました。
+ また、AWS Glue 4.0 の特徴として、EMRFS への更新や JDBC ドライバーの更新が行われ、AWS Glue により Spark 自体に追加された最適化も組み込まれています。
+ Scala は 2.11 から 2.12 に更新されており、Scala 2.12 には Scala 2.11 との下位互換性がありません。
+ AWS Glue 2.0 は Python 3.7 と 2.7 しか利用していませんでしたが、Python スクリプトで使用されるデフォルトのバージョンは Python 3.10 になりました。
  + Python 2.7 は、Spark 3.3.0 ではサポートされていません。ジョブ設定で Python 2 をリクエストするジョブはすべて、IllegalArgumentException が発生して失敗します。
  + AWS Glue 2.0 以降、追加の Python モジュールをインストールする新しいメカニズムが利用可能です。
+ 依存関係の更新については、[付録 A: 注目すべき依存関係のアップグレード](#migrating-version-40-appendix-dependencies) を参照してください。
+ 既存の AWS Glue 2.0 ジョブで使用されている追加の JAR ファイルは、4.0 で一部の依存関係が 2.0 からアップグレードされたため、依存関係の競合を引き起こす可能性があります。`--user-jars-first` AWS Glue ジョブパラメータによって、AWS Glue 4.0 でのクラスパスの競合を避けることができます。
+ AWS Glue 4.0 は Spark 3.3 を使用します。Spark 3.1 以降、parquet ファイルから、または parquet ファイルへのタイムスタンプのロード/保存の動作が変更されています。詳細は「[Upgrading from Spark SQL 3.0 to 3.1](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-30-to-31)」を参照してください。

  タイムスタンプ列を含むパーケットデータを読み書きする場合は、次のパラメータを設定することをお勧めします。これらのパラメータを設定すると、Spark 2 から Spark 3 へのアップグレード中に発生するカレンダーの非互換性の問題を、AWS Glue ダイナミックフレームとパークデータフレームの両方で解決することができます。CORRECTED オプションは、datetime 値をそのまま読み込むために使用し、LEGACY オプションは読み込む際にカレンダーの違いを考慮して datetime 値をリベースするために使用します。

  ```
  - Key: --conf
  - Value: spark.sql.legacy.parquet.int96RebaseModeInRead=[CORRECTED|LEGACY] --conf spark.sql.legacy.parquet.int96RebaseModeInWrite=[CORRECTED|LEGACY] --conf spark.sql.legacy.parquet.datetimeRebaseModeInRead=[CORRECTED|LEGACY]
  ```
+ 特定のコネクタの移行については、「[AWS Glue 4.0 向けのコネクタと JDBC ドライバーの移行](#migrating-version-40-connector-driver-migration)」を参照してください。
+ AWS Encryption SDK が 1.x から 2.x にアップグレードされました。AWS Glue セキュリティ設定を使用する AWS Glue ジョブや、AWS Encryption SDK の実行時に提供される依存関係に依存するジョブが影響を受けます。AWS Glue ジョブの移行については、次の説明を参照してください。
  + AWS Glue 2.0 には既に AWS Encryption SDK ブリッジバージョンが含まれているため、AWS Glue 2.0 ジョブを AWS Glue 4.0 ジョブに安全にアップグレードできます。

Spark の移行ドキュメントを参照してください。
+ 「[Upgrading from Spark SQL 2.4 to 3.0](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-24-to-30)」(Spark SQL 2.4 から 3.0 へのアップグレード)
+ 「[Upgrading from Spark SQL 3.1 to 3.2](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-31-to-32)」(Spark SQL 3.1 から 3.2 へのアップグレード)
+ 「[Upgrading from Spark SQL 3.2 to 3.3](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-32-to-33)」(Spark SQL 3.2 から 3.3 へのアップグレード)
+ 「[Changes in Datetime behavior to be expected since Spark 3.0](https://issues.apache.org/jira/browse/SPARK-31408)」(Spark 3.0 以降で予想される日時に関する動作の変化)

## AWS Glue 1.0 から AWS Glue 4.0 への移行
<a name="migrating-version-40-from-10"></a>

移行時には、次の変更点に注意してください。
+ AWS Glue 1.0 では、オープンソースの Spark 2.4 を使用していますが、AWS Glue 4.0 では、Amazon EMR で最適化された Spark 3.3.0 を使用しています。
  + 一部の Spark の変更のみについてですが、削除された機能が参照されないように、スクリプトの修正が必要になる場合があります。
  + 例えば、Spark 3.3.0 では Scala 型指定されていない UDF は有効になりませんが、Spark 2.4 では有効になります。
+ AWS Glue 4.0 のすべてのジョブの実行におけるスタートアップ時間は、大幅に改善されています。スタートアップのレイテンシーが最大 10 分から最大 1 分になるため、Spark ジョブは 1 秒単位で課金され、最小課金時間は 1/10 になります。
+ AWS Glue 4.0 でログ記録の動作は大幅に変更されました。Spark 3.3.0 では最低でも Log4j2 が必須です。
+ 一部の依存関係の更新があり、付録に記載されています。
+ Scala も 2.11 から 2.12 に更新されており、Scala 2.12 には Scala 2.11 との下位互換性がありません。
+ また、AWS Glue 0.9 は Python 2 しか使用していませんでしたが、Python スクリプトで使用されるデフォルトのバージョンは Python 3.10 になりました。

  Python 2.7 は、Spark 3.3.0 ではサポートされていません。ジョブ設定で Python 2 をリクエストするジョブはすべて、IllegalArgumentException が発生して失敗します。
+ AWS Glue 2.0 以降、追加の Python モジュールを pip を通じてインストールする新しいメカニズムが利用可能です。詳細については、「[AWS Glue 2.0\+ の pip を使用した追加 Python モジュールのインストール](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-libraries.html#addl-python-modules-support)」を参照してください。
+ AWS Glue 4.0 は Apache YARN では実行されないため、YARN の設定は適用されません。
+ AWS Glue 4.0 には、Hadoop 分散ファイルシステム (HDFS) はありません。
+ 既存の AWS Glue 1.0 ジョブで使用されている追加の JAR ファイルは、4.0 で一部の依存関係が 1.0 からアップグレードされたため、依存関係の競合を引き起こす可能性があります。この問題を避けるため、デフォルトで `--user-jars-first` AWS Glue ジョブパラメータで AWS Glue 4.0 を有効にしています。
+ AWS Glue 4.0 は Auto Scaling をサポートしています。そのため、Auto Scaling が有効になっていると、ExecutorAllocationManager メトリクスが使用可能になります。
+ AWS Glue バージョン 4.0 ジョブでは、ワーカーの数とワーカータイプを指定しますが、`maxCapacity` は指定しません。
+ AWS Glue 4.0 はまだ機械学習変換をサポートしていません。
+ 特定のコネクタの移行については、「[AWS Glue 4.0 向けのコネクタと JDBC ドライバーの移行](#migrating-version-40-connector-driver-migration)」を参照してください。
+ AWS Encryption SDK が 1.x から 2.x にアップグレードされました。AWS Glue セキュリティ設定を使用する AWS Glue ジョブや、AWS Encryption SDK の実行時に提供される依存関係に依存するジョブが影響を受けます。AWS Glue ジョブの移行については、次の説明を参照してください。
  + AWS Glue 0.9/1.0 ジョブを AWS Glue 4.0 ジョブに直接移行することはできません。バージョン 2.x 以降に直接アップグレードしてすべての新機能をすぐに有効にすると、AWS Encryption SDK では、AWS Encryption SDK の古いバージョンで暗号化された暗号文の復号ができないからです。
  + 安全にアップグレードするには、AWS Encryption SDK ブリッジバージョンが含まれている AWS Glue 2.0/3.0 ジョブにまず移行することをお勧めします。ジョブを 1 回実行して AWS Encryption SDK ブリッジバージョンを利用します。
  + 完了したら、AWS Glue 2.0/3.0 ジョブを AWS Glue 4.0 に安全に移行できます。

Spark の移行ドキュメントを参照してください。
+ 「[Upgrading from Spark SQL 2.4 to 3.0](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-24-to-30)」(Spark SQL 2.4 から 3.0 へのアップグレード)
+ 「[Upgrading from Spark SQL 3.0 to 3.1](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-30-to-31)」(Spark SQL 3.0 から 3.1 へのアップグレード)
+ 「[Upgrading from Spark SQL 3.1 to 3.2](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-31-to-32)」(Spark SQL 3.1 から 3.2 へのアップグレード)
+ 「[Upgrading from Spark SQL 3.2 to 3.3](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-32-to-33)」(Spark SQL 3.2 から 3.3 へのアップグレード)
+ 「[Changes in Datetime behavior to be expected since Spark 3.0](https://issues.apache.org/jira/browse/SPARK-31408)」(Spark 3.0 以降で予想される日時に関する動作の変化)

## AWS Glue 0.9 から AWS Glue 4.0 への移行
<a name="migrating-version-40-from-09"></a>

移行時には、次の変更点に注意してください。
+ AWS Glue 0.9 では、オープンソースの Spark 2.2.1 を使用していますが、AWS Glue 4.0 では、Amazon EMR で最適化された Spark 3.3.0 を使用しています。
  + 一部の Spark の変更のみについてですが、削除された機能が参照されないように、スクリプトの修正が必要になる場合があります。
  + 例えば、Spark 3.3.0 では Scala 型指定されていない UDF は有効になりませんが、Spark 2.2 では有効になります。
+ AWS Glue 4.0 のすべてのジョブの実行におけるスタートアップ時間は、大幅に改善されています。スタートアップのレイテンシーが最大 10 分から最大 1 分になるため、Spark ジョブは 1 秒単位で課金され、最小課金時間は 1/10 になります。
+ AWS Glue 4.0 以降、ログ記録の動作は大幅に変更されました。ここ (https://spark.apache.org/docs/latest/core-migration-guide.html\#upgrading-from-core-32-to-33) に記載されているように、Spark 3.3.0 では最低でも Log4j2 が必須です。
+ 一部の依存関係の更新があり、付録に記載されています。
+ Scala も 2.11 から 2.12 に更新されており、Scala 2.12 には Scala 2.11 との下位互換性がありません。
+ また、AWS Glue 0.9 は Python 2 しか使用していませんでしたが、Python スクリプトで使用されるデフォルトのバージョンは Python 3.10 になりました。
  + Python 2.7 は、Spark 3.3.0 ではサポートされていません。ジョブ設定で Python 2 をリクエストするジョブはすべて、IllegalArgumentException が発生して失敗します。
  + 追加の Python モジュールを pip を通じてインストールする新しいメカニズムが利用可能です。
+ AWS Glue 4.0 は Apache YARN では実行されないため、YARN の設定は適用されません。
+ AWS Glue 4.0 には、Hadoop 分散ファイルシステム (HDFS) はありません。
+ 既存の AWS Glue 0.9 ジョブで使用されている追加の JAR ファイルは、3.0 で一部の依存関係が 0.9 からアップグレードされたため、依存関係の競合を引き起こす可能性があります。`--user-jars-first` AWS Glue ジョブパラメータによって、AWS Glue 3.0 でのクラスパスの競合を避けることができます。
+ AWS Glue 4.0 は Auto Scaling をサポートしています。そのため、Auto Scaling が有効になっていると、ExecutorAllocationManager メトリクスが使用可能になります。
+ AWS Glue バージョン 4.0 ジョブでは、ワーカーの数とワーカータイプを指定しますが、`maxCapacity` は指定しません。
+ AWS Glue 4.0 はまだ機械学習変換をサポートしていません。
+ 特定のコネクタの移行については、「[AWS Glue 4.0 向けのコネクタと JDBC ドライバーの移行](#migrating-version-40-connector-driver-migration)」を参照してください。
+ AWS Encryption SDK が 1.x から 2.x にアップグレードされました。AWS Glue セキュリティ設定を使用する AWS Glue ジョブや、AWS Encryption SDK の実行時に提供される依存関係に依存するジョブが影響を受けます。AWS Glue ジョブの移行については、次の説明を参照してください。
  + AWS Glue 0.9/1.0 ジョブを AWS Glue 4.0 ジョブに直接移行することはできません。バージョン 2.x 以降に直接アップグレードしてすべての新機能をすぐに有効にすると、AWS Encryption SDK では、AWS Encryption SDK の古いバージョンで暗号化された暗号文の復号ができないからです。
  + 安全にアップグレードするには、AWS Encryption SDK ブリッジバージョンが含まれている AWS Glue 2.0/3.0 ジョブにまず移行することをお勧めします。ジョブを 1 回実行して AWS Encryption SDK ブリッジバージョンを利用します。
  + 完了したら、AWS Glue 2.0/3.0 ジョブを AWS Glue 4.0 に安全に移行できます。

Spark の移行ドキュメントを参照してください。
+ 「[Upgrading from Spark SQL 2.2 to 2.3](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-22-to-23)」(Spark SQL 2.2 から 2.3 へのアップグレード)
+ 「[Upgrading from Spark SQL 2.3 to 2.4](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-23-to-24)」(Spark SQL 2.3 から 2.4 へのアップグレード)
+ 「[Upgrading from Spark SQL 2.4 to 3.0](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-24-to-30)」(Spark SQL 2.4 から 3.0 へのアップグレード)
+ 「[Upgrading from Spark SQL 3.0 to 3.1](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-30-to-31)」(Spark SQL 3.0 から 3.1 へのアップグレード)
+ 「[Upgrading from Spark SQL 3.1 to 3.2](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-31-to-32)」(Spark SQL 3.1 から 3.2 へのアップグレード)
+ 「[Upgrading from Spark SQL 3.2 to 3.3](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-32-to-33)」(Spark SQL 3.2 から 3.3 へのアップグレード)
+ 「[Changes in Datetime behavior to be expected since Spark 3.0](https://issues.apache.org/jira/browse/SPARK-31408)」(Spark 3.0 以降で予想される日時に関する動作の変化)

## AWS Glue 4.0 向けのコネクタと JDBC ドライバーの移行
<a name="migrating-version-40-connector-driver-migration"></a>

アップグレードされた JDBC コネクタとデータレイクコネクタのバージョンについては、次を参照してください。
+ [付録 B: JDBC ドライバーのアップグレード](#migrating-version-40-appendix-jdbc-driver)
+ [付録 C: コネクタのアップグレード](#migrating-version-40-appendix-connector)

### Hudi
<a name="migrating-version-40-connector-driver-migration-hudi"></a>
+ Spark SQL サポートの強化:
  + `Call Procedure` コマンドにより、アップグレード、ダウングレード、ブートストラップ、クリーニング、および修復のサポートが追加されます。Spark SQL で `Create/Drop/Show/Refresh Index` 構文が可能です。
  + Spark DataSource を経由して使用する場合、Spark SQL に対してパフォーマンスのギャップがありましたが、解消されました。過去には、データソースの書き込みは、SQL よりも高速でした。
  + 組み込みキージェネレーターはすべて、より高性能な Spark 固有の API 操作を実装しています。
  + SerDe の使用コストを削減するため、一括 `insert` 操作の UDF 変換を RDD 変換に置き換えました。
  + Hudi の Spark SQL では、SQL ステートメントの `tblproperites` またはオプションで指定される `primaryKey` が必要です。更新と削除のオペレーションには、`preCombineField` も必要です。
+ バージョン 0.10.0 より前に `primaryKey` なしで作成された Hudi テーブルは、バージョン 0.10.0 以降、`primaryKey` フィールドつきで再作成する必要があります。

### PostgreSQL
<a name="migrating-version-40-connector-driver-migration-postgresql"></a>
+ いくつかの脆弱性 (CVE) に対応しました。
+ Java 8 はネイティブにサポートされています。
+ ジョブが配列の配列を使用している場合、バイト配列を除き、この状況は多次元配列として扱うことができます。

### MongoDB
<a name="migrating-version-40-connector-driver-migration-mongodb"></a>
+ 現在の MongoDB コネクタは Spark バージョン 3.1 以降と MongoDB バージョン 4.0 以降をサポートしています。
+ コネクタのアップグレードにより、いくつかのプロパティ名が変更されました。例えば、URI プロパティ名が `connection.uri` に変更されました。現在のオプションの詳細については、「[MongoDB Spark Connector blog](https://www.mongodb.com/docs/spark-connector/current/configuration/)」(MongoDB Spark コネクタブログ) を参照してください。
+ Amazon DocumentDB によってホストされている MongoDB 4.0 を使用することには、いくつかの機能上の違いがあります。詳細については、以下のトピックを参照してください。
  + [機能の違い: Amazon DocumentDB と MongoDB](https://docs.aws.amazon.com/documentdb/latest/developerguide/functional-differences.html)
  +  [サポートされている MongoDB API、オペレーション、およびデータ型](https://docs.aws.amazon.com/documentdb/latest/developerguide/mongo-apis.html)
+ 「partitioner」オプションは `ShardedPartitioner`、`PaginateIntoPartitionsPartitioner`、および `SinglePartitionPartitioner` に制限されています。ステージ演算子は MongoDB API をサポートしていないため、Amazon DocumentDB にはデフォルトの `SamplePartitioner` と `PaginateBySizePartitioner` を使用できません。詳細については、「[サポートされている MongoDB API、オペレーション、およびデータ型](https://docs.aws.amazon.com/documentdb/latest/developerguide/mongo-apis.html)」を参照してください。

### Delta Lake
<a name="migrating-version-40-connector-driver-migration-delta"></a>
+ Delta Lake は [SQL でのタイムトラベル](https://docs.delta.io/2.1.0/delta-batch.html#query-an-older-snapshot-of-a-table-time-travel)をサポートし、古いデータを簡単にクエリできるようになりました。今回の更新により、タイムトラベルは Spark SQL と DataFrame API の両方で利用できるようになりました。SQL の現在のバージョンの TIMESTAMP のサポートが追加されました。
+ Spark 3.3 では、バッチクエリに対する `Trigger.Once` と同様に、ストリーミングクエリを実行するための [Trigger.AvailableNow](https://issues.apache.org/jira/browse/SPARK-36533) が導入されています。このサポートは、Delta テーブルをストリーミングソースとして使用する場合にも利用できます。
+ テーブル内の列のリストを返す SHOW COLUMNS のサポート。
+ Scala と Python の DeltaTable API での [DESCRIBE DETAIL](https://docs.delta.io/2.1.0/delta-utility.html#retrieve-delta-table-details) のサポート。DeltaTable API または Spark SQL のいずれかを使用して、Delta テーブルに関する詳細情報を取得します。
+ SQL [Delete](https://github.com/delta-io/delta/pull/1328)、[Merge](https://github.com/delta-io/delta/pull/1327)、および [Update](https://github.com/delta-io/delta/pull/1331) コマンドからオペレーションメトリクスを返すことのサポート。以前は、これらの SQL コマンドは空の DataFrame を返していましたが、実行されたオペレーションに関する有用なメトリクスを含む DataFrame を返すようになりました。
+ パフォーマンス向上の最適化:
  + Optimize コマンドの設定オプションを `spark.databricks.delta.optimize.repartition.enabled=true` に設定して `coalesce(1)` ではなく `repartition(1)` を使用するようにすると、多数の小さなファイルを圧縮するときのパフォーマンスが向上します。
  + キューベースのアプローチを使用して圧縮ジョブを並列化すると、[パフォーマンスが向上](https://github.com/delta-io/delta/pull/1315)します。
+ その他の注目すべき変更点:
  + VACUUM および OPTIMIZE SQL コマンドでの[変数の使用をサポート](https://github.com/delta-io/delta/issues/1267)。
  + カタログテーブルによる CONVERT TO DELTA の改善:
    + パーティションスキーマが指定されていない場合は、カタログから[パーティションスキーマを自動入力](https://github.com/delta-io/delta/commit/18d4d12ed06f973006501f6c39c8785db51e2b1f)します。
    + ディレクトリ全体をスキャンせずに、カタログの[パーティション情報を使用](https://github.com/delta-io/delta/commit/ebff29904f3ababb889897343f8f8f7a010a1f71)してコミットするデータファイルを検索します。テーブルディレクトリ内のすべてのデータファイルをコミットせずに、アクティブなパーティションのディレクトリにあるデータファイルのみがコミットされます。
  + DROP COLUMN と RENAME COLUMN が使用されていない場合、列マッピングが有効なテーブルでの[変更データフィード (CDF) バッチ読み取りをサポート](https://github.com/delta-io/delta/issues/1349)。詳細については、[Delta Lake のドキュメント](https://docs.delta.io/2.1.0/delta-change-data-feed.html#known-limitations)を参照してください。
  + 最初のパスでスキーマのプルーニングを有効にすることで、[Update コマンドのパフォーマンスを改善](https://github.com/delta-io/delta/pull/1202)。

### Apache Iceberg
<a name="migrating-version-40-connector-driver-migration-iceberg"></a>
+ スキャンプランニングと Spark クエリの[パフォーマンス改善](https://iceberg.apache.org/releases/#performance-improvements)をいくつか追加。
+ 変更ベースのコミットを使用してサービス側のコミット競合を解決する一般的な REST カタログクライアントを追加。
+ SQL タイムトラベルクエリの `AS OF` 構文をサポート。
+ MERGE クエリと UPDATE クエリの読み取り時マージのサポートを追加。
+ Z オーダーを使用してパーティションを書き換えるサポートを追加。
+ [Theta スケッチ](https://datasketches.apache.org/docs/Theta/InverseEstimate.html)やブルームフィルターのような大きな統計やインデックス blob 用の形式である Puffin の仕様と実装を追加。
+ データを段階的に使用するための新しいインターフェイスを追加 (追加スキャンと変更ログスキャンの両方)。
+ FileIO インターフェイスへの一括オペレーションと範囲読み取りのサポートを追加。
+ メタデータツリーに削除ファイルを表示するメタデータテーブルをさらに追加。
+ ドロップテーブルの動作を変更。Iceberg 0.13.1 では、`DROP TABLE` を実行するとカタログからテーブルが削除され、テーブルの内容も削除されます。Iceberg 1.0.0 では、`DROP TABLE` を実行してもカタログからテーブルが削除されるだけです。テーブルの内容を削除するには、`DROP TABLE PURGE` を使用します。
+ Iceberg 1.0.0 では、Parquet のベクトル化された読み取りがデフォルトで有効になっています。ベクトル化された読み取りを無効にする場合は、`read.parquet.vectorization.enabled` を `false` に設定します。

### Oracle
<a name="migrating-version-40-connector-driver-migration-oracle"></a>

変更は軽微です。

### MySQL
<a name="migrating-version-40-connector-driver-migration-mysql"></a>

変更は軽微です。

### Amazon Redshift
<a name="migrating-version-40-connector-driver-migration-redshift"></a>

AWS Glue 4.0 には、新しい JDBC ドライバーを備えた新しい Amazon Redshift コネクタが搭載されています。機能強化と以前の AWS Glue バージョンからの移行方法については、「[Redshift 接続](aws-glue-programming-etl-connect-redshift-home.md)」を参照してください。

## 付録 A: 注目すべき依存関係のアップグレード
<a name="migrating-version-40-appendix-dependencies"></a>

依存関係のアップグレードは次のとおりです。


| 依存関係 | AWS Glue 4.0 でのバージョン | AWS Glue 3.0 でのバージョン | AWS Glue 2.0 でのバージョン | AWS Glue 1.0 でのバージョン | 
| --- | --- | --- | --- | --- | 
| Spark | 3.3.0-amzn-1 | 3.1.1-amzn-0 | 2.4.3 | 2.4.3 | 
| Hadoop | 3.3.3-amzn-0 | 3.2.1-amzn-3 | 2.8.5-amzn-5 | 2.8.5-amzn-1 | 
| Scala | 2.12 | 2.12 | 2.11 | 2.11 | 
| Jackson | 2.13.3 | 2.10.x | 2.7.x | 2.7.x | 
| [Hive] | 2.3.9-amzn-2 | 2.3.7-amzn-4 | 1.2 | 1.2 | 
| EMRFS | 2.54.0 | 2.46.0 | 2.38.0 | 2.30.0 | 
| Json4s | 3.7.0-M11 | 3.6.6 | 3.5.x | 3.5.x | 
| Arrow | 7.0.0 | 2.0.0 | 0.10.0 | 0.10.0 | 
| AWS Glue データカタログクライアント | 3.7.0 | 3.0.0 | 1.10.0 | 該当なし | 
| Python | 3.10 | 37 | 2.7 と 3.6 | 2.7 と 3.6 | 
| Boto | 1.26 | 1.18 | 1.12 | 該当なし | 

## 付録 B: JDBC ドライバーのアップグレード
<a name="migrating-version-40-appendix-jdbc-driver"></a>

JDBC ドライバーのアップグレードは次のとおりです。


| ドライバー | 過去の AWS Glue バージョンでの JDBC ドライバーのバージョン | AWS Glue 3.0 での JDBC ドライバーのバージョン | AWS Glue 4.0 での JDBC ドライバーのバージョン | 
| --- | --- | --- | --- | 
| MySQL | 5.1 | 8.0.23 | 8.0.23 | 
| Microsoft SQL Server | 6.1.0 | 7.0.0 | 9.4.0 | 
| Oracle Database | 11.2 | 21.1 | 21.7 | 
| PostgreSQL | 42.1.0 | 42.2.18 | 42.3.6 | 
| MongoDB | 2.0.0 | 4.0.0 | 4.7.2 | 
| Amazon Redshift | redshift-jdbc41-1.2.12.1017  | redshift-jdbc41-1.2.12.1017  | redshift-jdbc42-2.1.0.16 | 

## 付録 C: コネクタのアップグレード
<a name="migrating-version-40-appendix-connector"></a>

コネクタのアップグレードは次のとおりです。


| ドライバー | AWS Glue 3.0 のコネクタバージョン | AWS Glue 4.0 のコネクタバージョン | 
| --- | --- | --- | 
| MongoDB | 3.0.0 | 10.0.4 | 
| Hudi | 0.10.1 | 0.12.1 | 
| Delta Lake | 1.0.0 | 2.1.0 | 
| Iceberg | 0.13.1 | 1.0.0 | 
| DynamoDB | 1.11 | 1.12 | 