

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

# 使用 連線至 Snowflake 資料倉儲 AWS Schema Conversion Tool
<a name="CHAP_Source.Snowflake"></a>

您可以使用 AWS SCT 將結構描述、程式碼物件和應用程式程式碼從 Snowflake 轉換為 Amazon Redshift。

## Snowflake 做為來源資料庫的權限
<a name="CHAP_Source.Snowflake.Permissions"></a>

您可以使用角色和`SECURITYADMIN`工作階段內容，建立具有權限的角色，並將使用者名稱授予此`SECURITYADMIN`角色。

以下範例會建立最低權限，並將其授予`min_privs`使用者。

```
create role role_name;
grant role role_name to role sysadmin;
grant usage on database db_name to role role_name;
grant usage on schema db_name.schema_name to role role_name;             
grant usage on warehouse datawarehouse_name to role role_name;
grant monitor on database db_name to role role_name;
grant monitor on warehouse datawarehouse_name to role role_name;
grant select on all tables in schema db_name.schema_name to role role_name;
grant select on future tables in schema db_name.schema_name to role role_name;
grant select on all views in schema db_name.schema_name to role role_name;
grant select on future views in schema db_name.schema_name to role role_name;
grant select on all external tables in schema db_name.schema_name to role role_name;
grant select on future external tables in schema db_name.schema_name to role role_name;
grant usage on all sequences in schema db_name.schema_name to role role_name;
grant usage on future sequences in schema db_name.schema_name to role role_name;
grant usage on all functions in schema db_name.schema_name to role role_name;
grant usage on future functions in schema db_name.schema_name to role role_name;
grant usage on all procedures in schema db_name.schema_name to role role_name;
grant usage on future procedures in schema db_name.schema_name to role role_name;
create user min_privs password='real_user_password'  
DEFAULT_ROLE = role_name DEFAULT_WAREHOUSE = 'datawarehouse_name';
grant role role_name to user min_privs;
```

在上述範例中，取代預留位置，如下所示：
+ *`role_name`* 將 取代為具有唯讀權限的角色名稱。
+ `db_name` 將 取代為來源資料庫的名稱。
+ `schema_name` 將 取代為來源結構描述的名稱。
+ *`datawarehousename`* 將 取代為所需資料倉儲的名稱。
+ `min_privs` 將 取代為具有最低權限的使用者名稱。

`DEFAULT_ROLE` 和 `DEFAULT_WAREHOUSE` 參數區分金鑰。

## 設定 Amazon S3 的安全存取
<a name="CHAP_Source.Snowflake.IAM"></a>

Amazon S3 儲存貯體的安全和存取管理政策允許 Snowflake 存取、讀取資料，以及將資料寫入 S3 儲存貯體。您可以使用 Snowflake `STORAGE INTEGRATION` 物件類型設定私有 Amazon S3 儲存貯體的安全存取。Snowflake 儲存整合物件會將身分驗證責任委派給 Snowflake 身分和存取管理實體。

如需詳細資訊，請參閱 [Snowflake 文件中的設定 Snowflake 儲存體整合以存取 Amazon S3](https://docs.snowflake.com/en/user-guide/data-load-s3-config-storage-integration.html)。

## 以來源身分連線至 Snowflake
<a name="CHAP_Source.Snowflake.Connecting"></a>

使用下列程序，透過 連線至您的來源資料庫 AWS Schema Conversion Tool。

**連線至 Snowflake 來源資料庫**

1. 在 中 AWS Schema Conversion Tool，選擇**新增來源**。

1. 選擇 **Snowflake**，然後選擇**下一步**。

   新增**來源**對話方塊隨即出現。

1. 針對**連線名稱**，輸入資料庫的名稱。 會在左側面板的樹狀目錄中 AWS SCT 顯示此名稱。

1. 使用來自 的資料庫登入資料 AWS Secrets Manager 或手動輸入：
   + 若要從 Secrets Manager 使用資料庫登入資料，請使用下列指示：

     1. 針對**AWS 秘密**，選擇秘密的名稱。

     1. 選擇**填入**，從 Secrets Manager 自動填入資料庫連線對話方塊中的所有值。

     如需從 Secrets Manager 使用資料庫登入資料的資訊，請參閱 [在 AWS Secrets Manager 中設定 AWS Schema Conversion Tool](CHAP_UserInterface.SecretsManager.md)。
   + 若要手動輸入 Snowflake 來源資料倉儲連線資訊，請使用下列指示：  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/SchemaConversionTool/latest/userguide/CHAP_Source.Snowflake.html)

1. 選擇**測試連線**以驗證 AWS SCT 可以連接到您的來源資料庫。

1. 選擇**連線**以連線至來源資料庫。

## Snowflake 做為來源的限制
<a name="CHAP_Source.Snowflake.Limitations"></a>

以下是使用 Snowflake 做為 來源時的限制 AWS SCT：
+ 物件識別符在物件類型和父物件的內容中必須是唯一的：  
**資料庫**  
結構描述識別符在資料庫中必須是唯一的。  
**結構描述**  
資料表和檢視的 等物件識別符在結構描述中必須是唯一的。  
**資料表/檢視**  
資料欄識別符在資料表中必須是唯一的。
+ 大型和 xlarge 叢集節點類型的資料表數量上限為 9,900。對於 8xlarge 叢集節點類型，資料表數量上限為 100，000。此限制包括在查詢處理或系統維護期間由 Amazon Redshift 定義和建立的暫存資料表。如需詳細資訊，請參閱《[Amazon Redshift 叢集管理指南》中的 Amazon Redshift 配額](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html)。 **
+ 對於預存程序，輸入和輸出引數的數量上限為 32。

## Snowflake 的來源資料類型
<a name="CHAP_Source.Snowflake.DataTypes"></a>

您可以在下面找到使用 時支援的 Snowflake 來源資料類型， AWS SCT 以及 Amazon Redshift 目標的預設映射。


| Snowflake 資料類型 | Amazon Redshift 資料類型 | 
| --- | --- | 
|  NUMBER  |  NUMERIC(38)  | 
|  NUMBER(p)  |  如果 p =< 4，則 SMALLINT 如果 p => 5 且 =< 9，則 INTEGER 如果 p => 10 且 =< 18，則 BIGINT 如果 p => 19，則 NUMERIC(p)   | 
|  NUMBER(p， 0)  |  如果 p =< 4，則 SMALLINT 如果 p => 5 且 =< 9，則 INTEGER 如果 p => 10 且 =< 18，則 BIGINT 如果 p => 19，則：NUMERIC(p，0)  | 
|  NUMBER(p， s)  |  如果 p => 1 且 =< 38，且如果 s => 1 且 =< 37，則 NUMERIC(p,s)   | 
|  FLOAT  | FLOAT | 
|  TEXT Unicode 字元最多 16，777，216 個位元組；每個字元最多 4 個位元組。  |  VARCHAR(MAX)  | 
|  TEXT(p) Unicode 字元最多 65，535 個位元組；每個字元最多 4 個位元組。  |  如果 p =< 65，535，則 VARCHAR(p)  | 
|  TEXT(p) Unicode 字元最多 16，777，216 個位元組；每個字元最多 4 個位元組。  |  如果 p => 65，535 且 =< 16，777，216，則 VARCHAR(MAX)  | 
|  BINARY 單一位元組字元，最多 8，388，608 個位元組；每個字元 1 個位元組。  | VARCHAR(MAX) | 
|  BINARY(p) 單一位元組字元，最多 65，535 個位元組；每個字元 1 個位元組。  | VARCHAR(p) | 
|  BINARY(p) 單一位元組字元，最多 8，388，608 個位元組；每個字元 1 個位元組。  | VARCHAR(MAX) | 
|  BOOLEAN  | BOOLEAN | 
|  DATE  | DATE | 
|  TIME 時間值介於 00：00：00 和 23：59：59.999999999 之間。  | VARCHAR(18) | 
|  TIME(f) 介於 00：00：00 和 23：59：59.9(f) 之間的時間值。  | VARCHAR(n) – 9 \$1 dt-attr-1 | 
|  TIMESTAMP\$1NTZ  | TIMESTAMP | 
|  TIMESTAMP\$1TZ  | TIMESTAMPTZ | 

## Snowflake 到 Amazon Redshift 轉換設定
<a name="CHAP_Source.Snowflake.ConversionSettings"></a>

若要將 Snowflake 編輯為 Amazon Redshift 轉換設定，請選擇 中的**設定** AWS SCT，然後選擇 **轉換設定**。從上方清單中選擇 **Snowflake**，然後選擇 **Snowflake – Amazon Redshift**。 AWS SCT 顯示 Snowflake 到 Amazon Redshift 轉換的所有可用設定。

中的 Snowflake 到 Amazon Redshift 轉換設定 AWS SCT 包含下列項目的選項：
+ 限制轉換程式碼中具有動作項目的註解數量。

  針對**所選嚴重性及更高層級之動作項目的轉換後程式碼中新增註解**，請選擇動作項目的嚴重性。針對所選嚴重性及更高層級的動作項目，在轉換後程式碼中 AWS SCT 新增註解。

  例如，若要將已轉換程式碼中的註解數量降到最低，請選擇**僅限錯誤**。若要在已轉換的程式碼中包含所有動作項目的註解，請選擇**所有訊息**。
+ 設定 AWS SCT 可套用至目標 Amazon Redshift 叢集的資料表數量上限。

  針對**目標 Amazon Redshift 叢集的資料表數目上限**，選擇 AWS SCT 可套用至 Amazon Redshift 叢集的資料表數目。

  Amazon Redshift 的配額會限制不同叢集節點類型的使用資料表。如果您選擇**自動**， 會根據節點類型 AWS SCT ，決定要套用至目標 Amazon Redshift 叢集的資料表數目。或者，手動選擇 值。如需詳細資訊，請參閱《Amazon Redshift 管理指南》**中的 [Amazon Redshift 中的配額和限制](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html)。

  AWS SCT 會轉換您的所有來源資料表，即使這超過 Amazon Redshift 叢集可以存放的數量。 會將轉換後的程式碼 AWS SCT 存放在您的專案中，而不會將其套用至目標資料庫。如果您在套用轉換後的程式碼時達到資料表的 Amazon Redshift 叢集配額，則 AWS SCT 會顯示警告訊息。此外， 會將資料表 AWS SCT 套用至您的目標 Amazon Redshift 叢集，直到資料表數量達到限制為止。
+ 將壓縮套用至 Amazon Redshift 資料表資料欄。若要這樣做，請選取**使用壓縮編碼**。

  AWS SCT 使用預設 Amazon Redshift 演算法自動將壓縮編碼指派給資料欄。如需詳細資訊，請參閱《*Amazon Redshift 資料庫開發人員指南*》中的[壓縮編碼](https://docs.aws.amazon.com/redshift/latest/dg/c_Compression_encodings.html)。

  根據預設，Amazon Redshift 不會將壓縮套用至定義為排序和分佈索引鍵的資料欄。您可以變更此行為，並將壓縮套用至這些資料欄。若要這樣做，請選取**使用 KEY 資料欄的壓縮編碼**。只有在選取**使用壓縮編碼**選項時，才能選取此選項。

## Snowflake 到 Amazon Redshift 轉換最佳化設定
<a name="CHAP_Source.Snowflake.ConversionOptimizationSettings"></a>

若要將 Snowflake 編輯為 Amazon Redshift 轉換最佳化設定，請選擇**設定** AWS SCT，然後選擇**轉換設定**。從上方清單中選擇 **Snowflake**，然後選擇 **Snowflake – Amazon Redshift**。在左側窗格中，選擇**最佳化策略**。 AWS SCT 顯示 Snowflake 到 Amazon Redshift 轉換的轉換最佳化設定。

中的 Snowflake 到 Amazon Redshift 轉換最佳化設定 AWS SCT 包含下列項目的選項：
+ 使用自動資料表最佳化。若要這樣做，請選取**使用 Amazon Redshift 自動資料表調校**。

  自動資料表最佳化是 Amazon Redshift 中的自我調校程序，可自動最佳化資料表的設計。如需詳細資訊，請參閱《*Amazon Redshift 資料庫開發人員指南*》中的[使用自動資料表最佳化](https://docs.aws.amazon.com/redshift/latest/dg/t_Creating_tables.html)。

  若要僅依賴自動資料表最佳化，請針對**初始金鑰選擇策略**選擇**無**。
+ 使用策略選擇排序和分佈索引鍵。

  您可以使用 Amazon Redshift 中繼資料、統計資訊或這兩個選項來選擇排序和分佈索引鍵。針對**最佳化****策略索引標籤上的初始金鑰選擇**策略，選擇下列其中一個選項：
  + 使用中繼資料，忽略統計資訊
  + 忽略中繼資料，使用統計資訊
  + 使用中繼資料和統計資訊

  根據您選擇的選項，您可以選擇最佳化策略。然後，為每個策略輸入值 (0–100)。這些值會定義每個策略的權重。使用這些權重值， AWS SCT 定義每個規則如何影響分佈和排序索引鍵的選擇。預設值是以 AWS 遷移最佳實務為基礎。

  您可以為**尋找小型資料表策略定義小型資料表**的大小。對於**最小資料表資料列計數**和**最大資料表資料列計數**，輸入資料表中的最小和最大資料列數，將其定義為小型資料表。 會將`ALL`分佈樣式 AWS SCT 套用至小型資料表。在這種情況下，整個資料表的副本會分發給每個節點。
+ 設定策略詳細資訊。

  除了定義每個最佳化策略的權重之外，您還可以設定最佳化設定。若要這麼做，請選擇**轉換最佳化**。
  + 針對**排序索引鍵資料欄限制**，輸入排序索引鍵中的資料欄數上限。
  + 對於**偏斜閾值**，輸入資料欄偏斜值的百分比 (0–100)。 AWS SCT 排除分佈索引鍵候選項目清單中的偏斜值大於閾值的資料欄。 將資料欄偏斜值 AWS SCT 定義為最常出現之值與記錄總數的百分比比率。
  + 對於**查詢歷史記錄表中的前 N 個查詢**，輸入要分析之最常用查詢的數目 (1–100)。
  + 針對**選取統計資料使用者**，選擇您要分析查詢統計資料的資料庫使用者。

  此外，在**最佳化策略**索引標籤上，您可以定義尋找小型資料表策略的**小型資料表**大小。對於**最小資料表資料列計數**和**最大資料表資料列計數**，輸入資料表中的最小和最大資料列數，將其視為小型資料表。 會將`ALL`分佈樣式 AWS SCT 套用至小型資料表。在這種情況下，整個資料表的副本會分發給每個節點。