

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

# Redshift 連線
<a name="aws-glue-programming-etl-connect-redshift-home"></a>

您可以使用 AWS Glue for Spark 從 Amazon Redshift 資料庫中讀取和寫入資料表。連線至 Amazon Redshift 資料庫時， AWS Glue 會使用 Amazon Redshift SQL `COPY`和 `UNLOAD` 命令，透過 Amazon S3 移動資料以達到最大輸送量。在 AWS Glue 4.0 和更新版本中，您可以使用適用於 [Apache Spark 的 Amazon Redshift 整合](https://docs.aws.amazon.com/redshift/latest/mgmt/spark-redshift-connector.html)來讀取和寫入 Amazon Redshift 特定的最佳化和功能，除了透過舊版連線時可用的功能之外。

了解 AWS Glue 如何讓 Amazon Redshift 使用者更輕鬆地遷移到 Glue AWS 以進行無伺服器資料整合和 ETL。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/ZapycBq8TKU/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/ZapycBq8TKU)


## 設定 Redshift 連線
<a name="aws-glue-programming-etl-connect-redshift-configure"></a>

若要在 Glue AWS 中使用 Amazon Redshift 叢集，您需要一些先決條件：
+ 從資料庫讀取和寫入資料庫時用於暫存空間的 Amazon S3 目錄。
+ 啟用 Amazon Redshift 叢集、Glue AWS 任務和 Amazon S3 目錄之間通訊的 Amazon VPC。
+ Glue 任務和 Amazon Redshift AWS 叢集的適當 IAM 許可。

### 設定 IAM 角色
<a name="aws-glue-programming-etl-redshift-config-iam"></a>

**設定 Amazon Redshift 叢集的角色**  
您的 Amazon Redshift 叢集需要能夠讀取和寫入 Amazon S3，才能與 Glue AWS 任務整合。若要允許這項功能，您可以將 IAM 角色與想要連線的 Amazon Redshift 叢集建立關聯。您的角色應具有允許從 Amazon S3 臨時目錄讀取和寫入該目錄的政策。您的角色應具有允許 `redshift.amazonaws.com` 服務 `AssumeRole` 的信任關係。

**將 IAM 角色與 Amazon Redshift 建立關聯**

1. **先決條件：**用於檔案暫存空間的 Amazon S3 儲存貯體或目錄。

1. 確定您的 Amazon Redshift 叢集需要哪些 Amazon S3 許可。將資料移入和移出 Amazon Redshift 叢集時， AWS Glue 任務會針對 Amazon Redshift 發出 COPY 和 UNLOAD 陳述式。如果您的任務修改 Amazon Redshift 中的資料表， AWS Glue 也會發出 CREATE LIBRARY 陳述式。如需 Amazon Redshift 執行這些陳述式所需的特定 Amazon S3 許可資訊，請參閱 Amazon Redshift 文件：[Amazon Redshift：存取其他 AWS 資源的許可](https://docs.aws.amazon.com/redshift/latest/dg/copy-usage_notes-access-permissions.html)。

1. 在 IAM 主控台中，建立具有必要許可的 IAM 政策。如需有關建立政策的詳細資訊，請參閱[建立 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

1. 在 IAM 主控台中，建立角色和信任關係，以允許 Amazon Redshift 擔任該角色。遵循 IAM 文件中的指示[為 AWS 服務建立角色 （主控台） ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console)
   + 當系統要求選擇 AWS 服務使用案例時，請選擇「Redshift - Customizable」。
   + 當系統要求您附加政策時，請選擇您先前定義的政策。
**注意**  
如需設定 Amazon Redshift 角色的詳細資訊，請參閱[《Amazon Redshift 文件》中的授權 Amazon Redshift 代表您存取其他 AWS 服務](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html)。

1. 在 Amazon Redshift 主控台中，將角色與您的 Amazon Redshift 叢集建立關聯。請按照 [Amazon Redshift 文件](https://docs.aws.amazon.com/redshift/latest/mgmt/copy-unload-iam-role.html)中的說明進行操作。

   在 Amazon Redshift 主控台中選取反白顯示的選項，以進行此設定：  
![\[範例說明在 Amazon Redshift 主控台中管理 IAM 許可的位置。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/RS-role-config.png)

**注意**  
 根據預設， AWS Glue 任務會傳遞使用您指定執行任務的角色建立的 Amazon Redshift 臨時登入資料。我們不建議使用這些憑證。基於安全考量，這些憑證會在 1 小時後過期。

**設定 Glue AWS 任務的角色**  
Glue AWS 任務需要角色才能存取 Amazon S3 儲存貯體。您不需要 Amazon Redshift 叢集的 IAM 許可，您的存取是由 Amazon VPC 中的連線和資料庫憑證來控制。

### 設定 Amazon VPC
<a name="aws-glue-programming-etl-redshift-config-vpc"></a>

**設定 Amazon Redshift 資料存放區存取**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)：// 開啟 Amazon Redshift 主控台。

1. 在左側導覽窗格中選擇**叢集**。

1. 選擇您想要從 AWS Glue 存取的叢集名稱。

1. 在 **Cluster Properties (叢集屬性)** 區段中，選擇 **VPC security groups (VPC 安全群組)** 中的安全群組，以允許 AWS Glue 使用。記錄所選的安全群組名稱，供日後參考。選擇安全群組後，將開啟 Amazon EC2 主控台**安全群組**清單。

1. 選擇要修改的安全群組並導覽至 **Inbound** (傳入) 索引標籤。

1. 新增自我參考規則，以允許 AWS Glue 元件進行通訊。具體來說，新增或確認有**類型** `All TCP`、**通訊協定**為 `TCP`，**連接埠範圍**包含所有連接埠，且其**來源**與**群組 ID** 為相同安全群組名稱的規則。

   傳入規則類似如下：  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/aws-glue-programming-etl-connect-redshift-home.html)

   例如：  
![\[自我參考的傳入規則範例。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/SetupSecurityGroup-Start.png)

1. 同時新增一個規則，以用於傳出流量。您可以開啟傳出流量到所有連接埠，例如：  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/aws-glue-programming-etl-connect-redshift-home.html)

   或建立 **Type** (類型) `All TCP`、**Protocol** (通訊協定) 為 `TCP`、**Port Range** (連接埠範圍) 包含所有連接埠，且其 **Destination** (目的地) 與 **Group ID** (群組 ID) 為相同安全群組名稱的自我參考規則。如果使用 Amazon S3 VPC 端點，也可以針對 Amazon S3 存取新增 HTTPS 規則。安全群組規則需 *s3-prefix-list-id*，以允許該 VPC 至 Amazon S3 VPC 端點間的流量。

   例如：  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/aws-glue-programming-etl-connect-redshift-home.html)

### 設定 AWS Glue
<a name="aws-glue-programming-etl-redshift-config-glue"></a>

您需要建立提供 AWS Amazon VPC 連線資訊的 Glue Data Catalog 連線。

**在主控台中設定 Amazon Redshift Amazon VPC 與 Glue AWS 的連線**

1. 依照下列步驟建立資料目錄連線：[新增 AWS Glue 連線](console-connections.md)。建立連線之後，請保留連線名稱 *connectionName*，以便進行下一個步驟。
   + 選取**連線類型**時，請選取 **Amazon Redshift**。
   + 選取 **Redshift 叢集**時，請依名稱選取您的叢集。
   + 為叢集上的 Amazon Redshift 使用者提供預設連線資訊。
   + 系統會自動進行 Amazon VPC 設定。
**注意**  
當您透過 AWS SDK 建立 **Amazon Redshift** 連線時，您需要手動為 Amazon VPC 提供 `PhysicalConnectionRequirements`。

1. 在您的 AWS Glue 任務組態中，提供 *connectionName* 作為**其他網路連線**。

## 範例：從 Amazon Redshift 資料表讀取
<a name="aws-glue-programming-etl-connect-redshift-read"></a>

 您可以從 Amazon Redshift 叢集和 Amazon Redshift Serverless 環境讀取。

**先決條件：**您想要讀取的 Amazon Redshift 資料表。請按照上一節 [設定 Redshift 連線](#aws-glue-programming-etl-connect-redshift-configure) 中的步驟進行操作，之後您應該擁有用於臨時目錄、*temp-s3-dir* 和 IAM 角色 *rs-role-name* (在帳戶 *role-account-id* 中) 的 Amazon S3 URI。

------
#### [ Using the Data Catalog ]

**其他先決條件：**您想要讀取的 Amazon Redshift 資料表的資料目錄資料庫和資料表。如需有關資料目錄的詳細資訊，請參閱 [中的資料探索和目錄編製 AWS Glue](catalog-and-crawler.md)。為您的 Amazon Redshift 資料表建立項目之後，您需使用 *redshift-dc-database-name* 和 *redshift-table-name* 識別您的連線。

**組態：**在函數選項中，您需使用 `database` 和 `table_name` 參數識別資料目錄資料表。您需使用 `redshift_tmp_dir` 識別 Amazon S3 臨時目錄。您還需使用 `additional_options` 參數中的 `aws_iam_role` 金鑰提供 *rs-role-name*。

```
 glueContext.create_dynamic_frame.from_catalog(
    database = "redshift-dc-database-name", 
    table_name = "redshift-table-name", 
    redshift_tmp_dir = args["temp-s3-dir"], 
    additional_options = {"aws_iam_role": "arn:aws:iam::role-account-id:role/rs-role-name"})
```

------
#### [ Connecting directly ]

**其他先決條件：**您將需要 Amazon Redshift 資料表的名稱 (*redshift-table-name*)。您將需要存放該資料表之 Amazon Redshift 叢集的 JDBC 連線資訊。您需提供 *host*、*port*、*redshift-database-name*、*username* 和 *password* 等連線資訊。

使用 Amazon Redshift 叢集時，您可以從 Amazon Redshift 主控台擷取連線資訊。使用 Amazon Redshift Serverless 時，請參閱 Amazon Redshift 文件中的 [Connecting to Amazon Redshift Serverless](https://docs.aws.amazon.com//redshift/latest/mgmt/serverless-connecting.html)。

**組態：**在函數選項中，您需使用 `url`、`dbtable`、`user` 和 `password` 識別連線參數。您需使用 `redshift_tmp_dir` 識別 Amazon S3 臨時目錄。您可以在使用 `from_options` 時透過 `aws_iam_role` 指定 IAM 角色。語法與透過資料目錄連線類似，但您可以將參數放入 `connection_options` 地圖中。

將密碼硬式編碼到 Glue AWS 指令碼是不好的做法。請考慮將密碼儲存在 中 AWS Secrets Manager ，並使用適用於 Python 的 SDK (Boto3) 擷取指令碼中的密碼。

```
my_conn_options = {  
    "url": "jdbc:redshift://host:port/redshift-database-name",
    "dbtable": "redshift-table-name",
    "user": "username",
    "password": "password",
    "redshiftTmpDir": args["temp-s3-dir"],
    "aws_iam_role": "arn:aws:iam::account id:role/rs-role-name"
}

df = glueContext.create_dynamic_frame.from_options("redshift", my_conn_options)
```

------

## 範例：寫入 Amazon Redshift 資料表
<a name="aws-glue-programming-etl-connect-redshift-write"></a>

 您可以寫入 Amazon Redshift 叢集和 Amazon Redshift Serverless 環境。

**先決條件：**Amazon Redshift 叢集，並按照上一節 [設定 Redshift 連線](#aws-glue-programming-etl-connect-redshift-configure) 中的步驟進行操作，之後您應該擁有用於臨時目錄、*temp-s3-dir* 和 IAM 角色 *rs-role-name* (在帳戶 *role-account-id* 中) 的 Amazon S3 URI。您還需要一個 `DynamicFrame`，其內容要寫入資料庫。

------
#### [ Using the Data Catalog ]

**其他先決條件：**您想要寫入的 Amazon Redshift 叢集和資料表的資料目錄資料庫。如需有關資料目錄的詳細資訊，請參閱 [中的資料探索和目錄編製 AWS Glue](catalog-and-crawler.md)。您需使用 *redshift-dc-database-name* 識別您的連線，並使用 *redshift-table-name* 識別目標資料表。

**組態：**在函數選項中，您需使用 `database` 參數識別資料目錄資料庫，然後為資料表提供 `table_name`。您需使用 `redshift_tmp_dir` 識別 Amazon S3 臨時目錄。您還需使用 `additional_options` 參數中的 `aws_iam_role` 金鑰提供 *rs-role-name*。

```
 glueContext.write_dynamic_frame.from_catalog(
    frame = input dynamic frame, 
    database = "redshift-dc-database-name", 
    table_name = "redshift-table-name", 
    redshift_tmp_dir = args["temp-s3-dir"], 
    additional_options = {"aws_iam_role": "arn:aws:iam::account-id:role/rs-role-name"})
```

------
#### [ Connecting through a AWS Glue connection ]

您可以使用 `write_dynamic_frame.from_options` 方法直接連線到 Amazon Redshift。但是，您可以使用 `from_jdbc_conf` 方法參考存放在資料目錄連線中的連線詳細資訊，而不是直接將連線詳細資訊插入指令碼。您無需為資料庫進行網路爬取或建立資料目錄資料表即可執行此操作。如需有關資料目錄連線的詳細資訊，請參閱 [連線至資料](glue-connections.md)。

**其他先決條件：**資料庫的資料目錄連線、您想要讀取的 Amazon Redshift 資料表

**組態：**您需使用 *dc-connection-name* 識別資料目錄連線。您需使用 *redshift-table-name* 和 *redshift-database-name* 識別 Amazon Redshift 資料庫和資料表。您需提供包含 `catalog_connection` 的資料目錄連線資訊，以及包含 `dbtable` 和 `database` 的 Amazon Redshift 資訊。語法與透過資料目錄連線類似，但您可以將參數放入 `connection_options` 地圖中。

```
my_conn_options = {
    "dbtable": "redshift-table-name",
    "database": "redshift-database-name",
    "aws_iam_role": "arn:aws:iam::role-account-id:role/rs-role-name"
}

glueContext.write_dynamic_frame.from_jdbc_conf(
    frame = input dynamic frame, 
    catalog_connection = "dc-connection-name", 
    connection_options = my_conn_options, 
    redshift_tmp_dir = args["temp-s3-dir"])
```

------

## Amazon Redshift 連線選項參考
<a name="w2aac67c11c24b8c21c15"></a>

用於所有 AWS Glue JDBC 連線的基本連線選項，用於設定 等資訊`url`，`user`且在所有 JDBC 類型之間`password`保持一致。如需有關標準 JDBC 參數的詳細資訊，請參閱 [JDBC 連線選項參考](aws-glue-programming-etl-connect-jdbc-home.md#aws-glue-programming-etl-connect-jdbc)。

Amazon Redshift 連線類型需要一些額外的連接選項：
+ `"redshiftTmpDir"`：(必要) 從資料庫複製時，可用來暫存臨時資料的 Amazon S3 路徑。
+ `"aws_iam_role"`：(選用) IAM 角色的 ARN。Glue AWS 任務會將此角色傳遞給 Amazon Redshift 叢集，以授予完成任務指示所需的叢集許可。

### Glue 4.0\$1 AWS 中可用的其他連線選項
<a name="aws-glue-programming-etl-redshift-enhancements"></a>

您也可以透過 Glue AWS 連線選項，傳遞新 Amazon Redshift 連接器的選項。如需支援的連接器選項完整清單，請參閱 [Amazon Redshift integration for Apache Spark](https://docs.aws.amazon.com/redshift/latest/mgmt/spark-redshift-connector.html) (Apache Spark 的 Amazon Redshift 整合) 中的 *Spark SQL 參數*部分。

為方便起見，我們在此重申某些新選項：


| 名稱 | 必要 | 預設 | Description | 
| --- | --- | --- | --- | 
|  autopushdown  | 否 | TRUE |  擷取和分析 SQL 操作的 Spark 邏輯計畫，以套用述詞和查詢下推。這些操作會轉換成 SQL 查詢，然後在 Amazon Redshift 中執行以提高效能。  | 
|  autopushdown.s3\$1result\$1cache  | 否 | FALSE |  快取 SQL 查詢以卸載記憶體中 Amazon S3 路徑對應的資料，因此不需要在相同的 Spark 工作階段中再次執行相同的查詢。僅在啟用 `autopushdown` 時提供支援。  | 
|  unload\$1s3\$1format  | 否 | PARQUET |  PARQUET – 以 Parquet 格式卸載查詢結果。 TEXT – 以管道分隔的文字格式卸載查詢結果。  | 
|  sse\$1kms\$1key  | 否 | N/A |  在`UNLOAD`操作期間用於加密的 AWS SSE-KMS 金鑰，而非預設加密 AWS。  | 
|  extracopyoptions  | 否 | N/A |  載入資料時要附加至 Amazon Redshift `COPY` 命令的額外選項清單，例如 `TRUNCATECOLUMNS` 或 `MAXERROR n` (如需其他選項，請參閱 [COPY：選用參數](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html#r_COPY-syntax-overview-optional-parameters))。 請注意，由於這些選項會附加到 `COPY` 命令的結尾，因此只能使用在命令結尾上具有意義的選項。這應該涵蓋大多數可能的使用案例。  | 
|  csvnullstring (實驗性)  | 否 | NULL |  使用 CSV `tempformat` 時為 Null 值寫入的字串值。這應該是不會出現在實際資料中的值。  | 

這些新參數可以透過以下方式使用。

**提升效能的全新選項**  
新的連接器引入了一些新的效能提升選項：
+ `autopushdown`：預設為啟用。
+ `autopushdown.s3_result_cache`：預設為停用。
+ `unload_s3_format`：預設為 `PARQUET`。

如需有關使用這些選項的資訊，請參閱 [Apache Spark 的 Amazon Redshift 整合](https://docs.aws.amazon.com/redshift/latest/mgmt/spark-redshift-connector.html)。建議您在混合讀取和寫入操作時不要開啟 ` autopushdown.s3_result_cache`，因為快取的結果可能包含過時的資訊。依預設，`UNLOAD` 命令的選項 `unload_s3_format` 會設定為 `PARQUET`，以提高效能並降低儲存成本。若要使用 `UNLOAD` 命令預設行為，請將選項重設為 `TEXT`。

**新的讀取加密選項**  
預設情況下，從 Amazon Redshift 資料表讀取資料時，由 AWS Glue 使用之臨時資料夾中的資料會使用 `SSE-S3` 加密來加密。若要使用來自 AWS Key Management Service (AWS KMS) 的客戶受管金鑰來加密您的資料，您可以在`("sse_kms_key" → kmsKey)`其中設定 ksmKey 是[金鑰 ID AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/find-cmk-id-arn.html)，而不是 3.0 AWS Glue版`("extraunloadoptions" → s"ENCRYPTED KMS_KEY_ID '$kmsKey'")`中的舊版設定選項。

```
datasource0 = glueContext.create_dynamic_frame.from_catalog(
  database = "database-name", 
  table_name = "table-name", 
  redshift_tmp_dir = args["TempDir"],
  additional_options = {"sse_kms_key":"<KMS_KEY_ID>"}, 
  transformation_ctx = "datasource0"
)
```

**支援 IAM 型 JDBC URL**  
新的連接器支援 IAM 型 JDBC URL，因此您不需要傳入使用者/密碼或機密。透過 IAM 型 JDBC URL，連接器會使用任務執行時間角色來存取 Amazon Redshift 資料來源。

步驟 1：將下列最小必要政策附加至您的 AWS Glue 任務執行時間角色。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "redshift:GetClusterCredentials",
            "Resource": [
                "arn:aws:redshift:us-east-1:111122223333:dbgroup:<cluster name>/*",
                "arn:aws:redshift:*:111122223333:dbuser:*/*",
                "arn:aws:redshift:us-east-1:111122223333:dbname:<cluster name>/<database name>"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "redshift:DescribeClusters",
            "Resource": "*"
        }
    ]
}
```

------

步驟 2：使用 IAM 型 JDBC URL (如下所示)。使用您要連線的 Amazon Redshift 使用者名稱指定新選項 `DbUser`。

```
conn_options = {
     // IAM-based JDBC URL
    "url": "jdbc:redshift:iam://<cluster name>:<region>/<database name>",
    "dbtable": dbtable,
    "redshiftTmpDir": redshiftTmpDir,
    "aws_iam_role": aws_iam_role,
    "DbUser": "<Redshift User name>" // required for IAM-based JDBC URL
    }

redshift_write = glueContext.write_dynamic_frame.from_options(
    frame=dyf,
    connection_type="redshift",
    connection_options=conn_options
)

redshift_read = glueContext.create_dynamic_frame.from_options(
    connection_type="redshift",
    connection_options=conn_options
)
```

**注意**  
`DynamicFrame` 目前只支援 `GlueContext.create_dynamic_frame.from_options` 工作流程中具有 ` DbUser` 的 IAM 型 JDBC URL。

## 從 AWS Glue 3.0 版本遷移至第 4.0 版
<a name="aws-glue-programming-etl-redshift-migrating"></a>

在 AWS Glue 4.0 中，ETL 任務可存取新的 Amazon Redshift Spark 連接器和具有不同選項和組態的新 JDBC 驅動程式。新 Amazon Redshift 連接器和驅動程式在寫入時考量效能，並維持資料的交易一致性。這些產品會記錄在 Amazon Redshift 文件中。如需詳細資訊，請參閱：
+ [Apache Spark 的 Amazon Redshift 整合](https://docs.aws.amazon.com/redshift/latest/mgmt/spark-redshift-connector.html)
+ [Amazon Redshift JDBC 驅動程式 2.1 版](https://docs.aws.amazon.com/redshift/latest/mgmt/jdbc20-download-driver.html)

**資料表/欄名稱和識別符限制**  
新的 Amazon Redshift Spark 連接器和驅動程式對 Redshift 資料表名稱的要求更加嚴格。如需詳細資訊，請參閱 [Names and identifiers](https://docs.aws.amazon.com/redshift/latest/dg/r_names.html) (名稱和識別符) 以定義您的 Amazon Redshift 資料表名稱。任務書籤工作流程可能無法使用不符合規則和具有特定字元 (例如空格) 的資料表名稱。

如果舊版資料表名稱不符合[名稱和識別符](https://docs.aws.amazon.com/redshift/latest/dg/r_names.html)規則，並且看到書籤問題 (任務會重新處理舊版 Amazon Redshift 資料表資料)，建議您重新命名資料表名稱。如需詳細資訊，請參閱 [ALTER TABLE 範例](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_TABLE_examples_basic.html)。

**Dataframe 中的預設 tempformat 變更**  
AWS Glue 3.0 版 Spark 連接器在寫入 Amazon Redshift 時將 `tempformat` 預設為 CSV。為了保持一致，在 AWS Glue 3.0 版本中，` DynamicFrame` 仍然將 `tempformat` 預設為使用 `CSV`。如果之前已將 Spark Dataframe API 直接與 Amazon Redshift Spark 連接器搭配使用，您可以在 `DataframeReader`/`Writer` 選項中將 `tempformat` 明確設定為 CSV。否則，`tempformat` 會在新 Spark 連接器中預設為 `AVRO`。

**行為變更：將 Amazon Redshift 資料類型 REAL 映射到 Spark 資料類型 FLOAT 而不是 DOUBLE**  
在 AWS Glue 3.0 版本中，Amazon Redshift `REAL` 會轉換為 Spark ` DOUBLE` 類型。新的 Amazon Redshift Spark 連接器已經更新行為，以便 Amazon Redshift ` REAL` 類型轉換為 Spark `FLOAT` 類型，並轉換回來。如果您仍有希望將 Amazon Redshift `REAL` 類型映射至 Spark `DOUBLE` 類型的舊版使用案例，則可以使用下列因應措施：
+ 對於 `DynamicFrame`，將 `Float` 類型映射至具有 `DynamicFrame.ApplyMapping` 的 `Double` 類型。對於 `Dataframe`，您需要使用 `cast`。

程式碼範例：

```
dyf_cast = dyf.apply_mapping([('a', 'long', 'a', 'long'), ('b', 'float', 'b', 'double')])
```

**處理 VARBYTE 資料類型**  
使用 AWS Glue 3.0 和 Amazon Redshift 資料類型時， AWS Glue 3.0 會將 Amazon Redshift 轉換為 `VARBYTE` Spark `STRING`類型。但是，最新的 Amazon Redshift Spark 連接器不支援 `VARBYTE` 資料類型。若要解決此限制，您可以[建立 Redshift 檢視](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_VIEW.html)，以將 `VARBYTE` 資料欄轉換為支援的資料類型。然後，使用新的連接器從該檢視而不是原始資料表載入資料，這確保了相容性，同時保持對 `VARBYTE` 資料的存取。

Redshift 查詢的範例：

```
CREATE VIEW view_name AS SELECT FROM_VARBYTE(varbyte_column, 'hex') FROM table_name
```