

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# AWS Glue 將 Spark 任務遷移至 4.0 AWS Glue 版
<a name="migrating-version-40"></a>

本主題說明 0.9、1.0、2.0 和 3.0 AWS Glue 版之間的變更，以允許您將 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)
+ [連接器和 JDBC 驅動程式遷移 for AWS Glue 4.0](#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>

本節說明 4.0 AWS Glue 版的新功能和優點。
+ 其基於 Apache Spark 3.3.0，但包括 AWS Glue和 Amazon EMR 中的最佳化，例如調整式查詢執行、向量化讀取器，以及最佳化的隨機和分割區合併。
+ 升級所有原生來源的 JDBC AWS Glue 驅動程式，包括 MySQL、Microsoft SQL Server、Oracle、PostgreSQL、MongoDB，以及 Spark 3.3.0 引進的升級 Spark 程式庫和相依性。
+ 以新的 Amazon Redshift 連接器和 JDBC 驅動程式進行更新。
+ 透過升級的 EMR File System (EMRFS) 最佳化 Amazon S3 存取，並預設啟用 Amazon S3 最佳化的輸出提交器。
+ 最佳化 Data Catalog 存取與分割區索引、下推述詞、分割區清單，以及升級的 Hive 中繼存放區用戶端。
+ 與 Lake Formation 整合，以控管的目錄資料表具有儲存格層級篩選和資料湖交易。
+ 減少啟動延遲，可改善整體任務完成時間和互動性。
+ Spark 任務以 1 秒的增量計費，最短計費持續時間變為原來的十分之一，即從最短 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.AvailableNow，以執行分成多批次執行的 Trigger.Once 等串流查詢 ([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/文件中加入 Python 3.6 支援的參考 ([SPARK-36977](https://issues.apache.org/jira/browse/SPARK-36977))。
  + 將內建 pickle 更換成 cloudpickle，以移除命名的 tuple hack ([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 4.0 - Supports Spark 3.3, Scala 2, Python 3`中，選擇 `Glue version`。
+ 在 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 4.0 - Supports Spark 3.3, Scala 2, Python 3`中，選擇 `Glue version`。
+ 在 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 啟動升級的 Spark 歷史記錄伺服器 for AWS Glue 4.0。](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？
  + 將相依程式庫從 Python 2.7/3.6 更新為 Python 3.10，因為 Spark 3.3.0 完全刪除了 Python 2.7 和 3.6 的支援。

## 從 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 任務都將使用 3.10 版。先前，Python 3.7 已在 AWS Glue 3.0 中使用。

  因此， out-of-the-box可用的某些 pymodule AWS Glue 會升級。
+ Log4j 已升級到 Log4j2。
  + 如需 Log4j2 移轉路徑的資訊，請參閱 [Log4j 文件](https://logging.apache.org/log4j/2.x/manual/migration.html#Log4j2API)。
  + 您必須以適當的 log4j2 屬性將任何自訂 log4j 屬性檔案重新命名為 log4j2.properties 檔案。
+ 如需移轉某些連接器，請參閱[連接器和 JDBC 驅動程式遷移 for AWS Glue 4.0](#migrating-version-40-connector-driver-migration)。
+  AWS 加密 SDK 已從 1.x 升級至 2.x。 AWS Glue 使用 AWS Glue 安全組態的任務，以及取決於執行時間提供的 AWS 加密 SDK 相依性的任務都會受到影響。請參閱 AWS Glue 任務遷移的說明。

  您可以安全地將 AWS Glue 2.0/3.0 任務升級至 AWS Glue 4.0 任務，因為 AWS Glue 2.0/3.0 已包含 AWS 加密 SDK 橋接器版本。

請參閱 Spark 移轉文件：
+ [從 Spark SQL 3.1 升級到 3.2](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-31-to-32)
+ [從 Spark SQL 3.2 升級到 3.3](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-32-to-33)

## 從 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-optimized遞交者預設為自 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 驅動程式，以及 提供的 Spark 本身的其他最佳化內容 AWS Glue。
+ Scala 從 2.11 更新到 2.12，而 Scala 2.12 不回溯相容 Scala 2.11。
+ Python 3.10 也是用於 Python 指令碼的預設版本，因為 AWS Glue 2.0 只利用 Python 3.7 和 2.7。
  + Python 2.7 不支援 Spark 3.3.0。在任務組態中請求 Python 2 的任何任務都將失敗，並出現 IllegalArgumentException。
  + 安裝其他 Python 模組的新機制自 AWS Glue 2.0 起已推出。
+ 數個相依性更新，在 [附錄 A：值得注意的相依性升級](#migrating-version-40-appendix-dependencies) 中反白顯示。
+ 在現有 AWS Glue 2.0 任務中提供的任何額外 JAR 檔案可能會導致相互衝突的相依性，因為 4.0 中的數個相依性從 2.0 升級。您可以避免 classpath 在 AWS Glue 4.0 中與`--user-jars-first` AWS Glue 任務參數衝突。
+ AWS Glue 4.0 使用 Spark 3.3。從 Spark 3.1 開始，從 Parquet 檔案載入時間戳記以及將時間戳記儲存至此類檔案的行為發生了變化。有關更多詳細資訊，請參閱[從 Spark SQL 3.0 升級到 3.1](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-30-to-31)。

  建議在讀取/寫入包含時間戳記資料行的 parquet 資料時設定以下參數。設定這些參數可以解決 AWS Glue 動態影格和 Spark 資料影格在 Spark 2 升級至 Spark 3 期間發生的行事曆不相容問題。使用「更正」選項原樣讀取 datetime 值；使用「舊式」選項可以在讀取過程中針對行事曆差異重新設定 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]
  ```
+ 如需移轉某些連接器，請參閱[連接器和 JDBC 驅動程式遷移 for AWS Glue 4.0](#migrating-version-40-connector-driver-migration)。
+  AWS 加密 SDK 已從 1.x 升級至 2.x。 AWS Glue 使用 AWS Glue 安全組態的任務，以及取決於執行時間提供的 AWS 加密 SDK 相依性的任務都會受到影響。請參閱這些 AWS Glue 任務遷移的說明：
  + 您可以安全地將 AWS Glue 2.0 任務升級至 AWS Glue 4.0 任務，因為 AWS Glue 2.0 已包含 AWS 加密 SDK 橋接器版本。

請參閱 Spark 移轉文件：
+ [從 Spark SQL 2.4 升級到 3.0](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-24-to-30)
+ [從 Spark SQL 3.1 升級到 3.2](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-31-to-32)
+ [從 Spark SQL 3.2 升級到 3.3](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-32-to-33)
+ [自 Spark 3.0 以來預期日期時間行為的變化。](https://issues.apache.org/jira/browse/SPARK-31408)

## 從 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 中的所有任務都會以大幅改善的啟動時間執行。Spark 任務將以 1 秒的增量計費，最短計費持續時間變為原來的十分之一，因為啟動延遲將從最大 10 分鐘到最大 1 分鐘。
+ 記錄行為已在 AWS Glue 4.0 中大幅變更，Spark 3.3.0 的最低需求為 Log4j2。
+ 數個相依性更新，在附錄中反白顯示。
+ Scala 也從 2.11 更新到 2.12，而 Scala 2.12 不回溯相容 Scala 2.11。
+ Python 3.10 也是用於 Python 指令碼的預設版本，因為 AWS Glue 0.9 只利用 Python 2。

  Python 2.7 不支援 Spark 3.3.0。在任務組態中請求 Python 2 的任何任務都將失敗，並出現 IllegalArgumentException。
+ 從 AWS Glue 2.0 起，已推出透過 pip 安裝其他 Python 模組的新機制。如需詳細資訊，請參閱[使用 pip 在 AWS Glue 2.0\+ 中安裝其他 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 後，將提供 ExecutorAllocationManager 指標。
+ 在 4.0 AWS Glue 版任務中，您可以指定工作者數量和工作者類型，但不指定 `maxCapacity`。
+ AWS Glue 4.0 版尚不支援機器學習轉換。
+ 如需移轉某些連接器，請參閱[連接器和 JDBC 驅動程式遷移 for AWS Glue 4.0](#migrating-version-40-connector-driver-migration)。
+  AWS 加密 SDK 已從 1.x 升級至 2.x。 AWS Glue 使用 AWS Glue 安全組態的任務，以及取決於執行時間提供的 AWS 加密 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 任務。執行任務一次，以利用 AWS 加密 SDK 橋接器版本。
  + 完成後，您可以安全地將 AWS Glue 2.0/3.0 任務遷移至 AWS Glue 4.0。

請參閱 Spark 移轉文件：
+ [從 Spark SQL 2.4 升級到 3.0](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-24-to-30)
+ [從 Spark SQL 3.0 升級到 3.1](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-30-to-31)
+ [從 Spark SQL 3.1 升級到 3.2](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-31-to-32)
+ [從 Spark SQL 3.2 升級到 3.3](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-32-to-33)
+ [自 Spark 3.0 以來預期日期時間行為的變化。](https://issues.apache.org/jira/browse/SPARK-31408)

## 從 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 中的所有任務都會以大幅改善的啟動時間執行。Spark 任務將以 1 秒的增量計費，最短計費持續時間變為原來的十分之一，因為啟動延遲將從最大 10 分鐘變為最大 1 分鐘。
+ 記錄行為自 AWS Glue 4.0 起已大幅變更，Spark 3.3.0 的最低需求為 Log4j2，如此處所述 (https://spark.apache.org/docs/latest/core-migration-guide.html\#upgrading-from-core-32-to-33：//)。
+ 數個相依性更新，在附錄中反白顯示。
+ Scala 也從 2.11 更新到 2.12，而 Scala 2.12 不回溯相容 Scala 2.11。
+ Python 3.10 也是用於 Python 指令碼的預設版本，因為 AWS Glue 0.9 只利用 Python 2。
  + Python 2.7 不支援 Spark 3.3.0。在任務組態中請求 Python 2 的任何任務都將失敗，並出現 IllegalArgumentException。
  + 提供透過 pip 安裝其他 Python 模組的新機制。
+ AWS Glue 4.0 不會在 Apache YARN 上執行，因此 YARN 設定不適用。
+ AWS Glue 4.0 沒有 Hadoop 分散式檔案系統 (HDFS)。
+ 在現有 AWS Glue 0.9 任務中提供的任何額外 JAR 檔案都可能會導致相互衝突的相依性，因為 3.0 中的數個相依性從 0.9 升級。您可以避免 AWS Glue 3.0 中的 classpath 與`--user-jars-first` AWS Glue 任務參數衝突。
+ AWS Glue 4.0 支援自動擴展。因此，啟用 Auto Scaling 後，將提供 ExecutorAllocationManager 指標。
+ 在 4.0 AWS Glue 版任務中，您可以指定工作者數量和工作者類型，但不指定 `maxCapacity`。
+ AWS Glue 4.0 版尚不支援機器學習轉換。
+ 如需移轉某些連接器，請參閱[連接器和 JDBC 驅動程式遷移 for AWS Glue 4.0](#migrating-version-40-connector-driver-migration)。
+  AWS 加密 SDK 已從 1.x 升級至 2.x。 AWS Glue 使用 AWS Glue 安全組態的任務，以及取決於執行時間提供的 AWS 加密 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 任務。執行任務一次，以利用 AWS 加密 SDK 橋接器版本。
  + 完成後，您可以安全地將 AWS Glue 2.0/3.0 任務遷移至 AWS Glue 4.0。

請參閱 Spark 移轉文件：
+ [從 Spark SQL 2.2 升級到 2.3](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-22-to-23)
+ [從 Spark SQL 2.3 升級到 2.4](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-23-to-24)
+ [從 Spark SQL 2.4 升級到 3.0](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-24-to-30)
+ [從 Spark SQL 3.0 升級到 3.1](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-30-to-31)
+ [從 Spark SQL 3.1 升級到 3.2](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-31-to-32)
+ [從 Spark SQL 3.2 升級到 3.3](https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-32-to-33)
+ [自 Spark 3.0 以來預期日期時間行為的變化。](https://issues.apache.org/jira/browse/SPARK-31408)

## 連接器和 JDBC 驅動程式遷移 for AWS Glue 4.0
<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` 命令新增升級、降級、引導、清理和維修的支援。`Create/Drop/Show/Refresh Index` 語法可在 Spark SQL 中使用。
  + 透過 Spark DataSource 的使用消除對照於 Spark SQL 的效能落差。過去的 Datasource 寫入曾比 SQL 快。
  + 所有內建金鑰產生器都會實作更多效能 Spark 特定 API 操作。
  + 用 RDD 轉換取代大量 `insert` 操作中的 UDF 轉換，以削減使用 SerDe 的成本。
  + 使用 Hudi 的 Spark SQL 需要由 `tblproperites` 或 SQL 陳述式中的選項指定 `primaryKey`。更新和刪除操作也需要 `preCombineField`。
+ 自 0.10.0 版起，在 0.10.0 版之前建立且無 `primaryKey` 的任何 Hudi 資料表都需要使用 `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 部落格](https://www.mongodb.com/docs/spark-connector/current/configuration/)。
+ 使用由 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`。該選項不能將預設 `SamplePartitioner` 和 `PaginateBySizePartitioner` 用於 Amazon DocumentDB，因為階段運算子不支援 MongoDB API。如需詳細資訊，請參閱 [Supported MongoDB APIs, Operations, and Data Types](https://docs.aws.amazon.com/documentdb/latest/developerguide/mongo-apis.html) (支援的 MongoDB API、操作和資料類型)。

### 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.AvailableNow](https://issues.apache.org/jira/browse/SPARK-36533)，以執行串流查詢 (等同於用於批次查詢的 `Trigger.Once`)。使用 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。
+ 最佳化效能改善項目：
  + 設定組態選項 `spark.databricks.delta.optimize.repartition.enabled=true` 以在 Optimize 命令中使用 `repartition(1)` 而非 `coalesce(1)`，以便在精簡小型檔案時實現更高的效能。
  + 使用佇列式方法平行化精簡任務，從而[改善效能](https://github.com/delta-io/delta/pull/1315)。
+ 其他顯著的變更：
  + [支援將變數用於](https://github.com/delta-io/delta/issues/1267) VACUUM 和 OPTIMIZE SQL 命令。
  + 目錄資料表 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-order 重新寫入分割區的支援。
+ 已新增 Puffin 的規格和實作，此為大型統計資料和索引 blob 的格式，就像是 [Theta 示意圖](https://datasketches.apache.org/docs/Theta/InverseEstimate.html)或 bloom 篩選條件。
+ 已新增遞增取用資料的新介面 (附加和變更日誌掃描)。
+ 已新增對於大量操作和遠端讀取 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 具有新的 Amazon Redshift 連接器和新的 JDBC 驅動程式。如需增強功能以及如何從舊版遷移的相關資訊 AWS Glue ，請參閱 [Redshift 連線](aws-glue-programming-etl-connect-redshift-home.md)。

## 附錄 A：值得注意的相依性升級
<a name="migrating-version-40-appendix-dependencies"></a>

以下是相依性升級：


| 相依性 | in AWS Glue 4.0 版本 | in AWS Glue 3.0 版本 | in AWS Glue 2.0 版本 | in 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 Data Catalog 用戶端 | 3.7.0 | 3.0.0 | 1.10.0 | N/A | 
| Python | 3.10 | 3.7 | 2.7 和 3.6 | 2.7 和 3.6 | 
| Boto | 1.26 | 1.18 | 1.12 | N/A | 

## 附錄 B：JDBC 驅動程式升級
<a name="migrating-version-40-appendix-jdbc-driver"></a>

以下是 JDBC 驅動程式升級：


| 驅動程式 | 過去版本的 JDBC 驅動程式 AWS Glue 版本 | JDBC 驅動程式 in AWS Glue 3.0 版 |  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 資料庫 | 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>

以下是連接器升級：


| 驅動程式 | 連接器 in 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 | 