

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# を使用した 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 の ID およびアクセス管理エンティティに委任します。

詳細については、Snowflake ドキュメントにある [Amazon S3 にアクセスするための Snowflake ストレージ統合の設定](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**] を選択し、その後 [**Next**] (次へ) を選択します。

   [**Add source**] (ソースの追加) ダイアログボックスが表示されます。

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/ja_jp/SchemaConversionTool/latest/userguide/CHAP_Source.Snowflake.html)

1. **接続のテスト**を選択して、 がソースデータベースに接続 AWS SCT できることを確認します。

1. [**Connect**] (接続) を選択して、ソースデータベースに接続します。

## 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)  |  If p is =< 4, then SMALLINT If p is => 5 and =< 9, then INTEGER If p is => 10 and =< 18, then BIGINT If p is => 19 then NUMERIC(p)   | 
|  NUMBER(p,0)  |  If p is =< 4, then SMALLINT If p is => 5 and =< 9, then INTEGER If p is => 10 and =< 18, then BIGINT If p is => 19 then: NUMERIC(p,0)  | 
|  NUMBER(p,s)  |  If p is => 1 and =< 38, and if s is => 1 and =< 37, then NUMERIC(p,s)   | 
|  FLOAT  | FLOAT | 
|  TEXT 16,777,216 バイトまでの Unicode 文字。1 文字あたり最大 4 バイト。  |  VARCHAR(MAX)  | 
|  TEXT(p) 65,535 バイトまでの Unicode 文字。1 文字あたり最大 4 バイト。  |  If p is =< 65,535 then, VARCHAR(p)  | 
|  TEXT(p) 16,777,216 バイトまでの Unicode 文字。1 文字あたり最大 4 バイト。  |  If p is => 65,535 and =< 16,777,216 then, VARCHAR(MAX)  | 
|  BINARY 8 388,608 バイトまでのシングルバイト文字、1 文字あたり 1 バイト。  | VARCHAR(MAX) | 
|  BINARY(p) 65,535 バイトまでのシングルバイト文字、1 文字あたり 1 バイト。  | VARCHAR(p) | 
|  BINARY(p) 8 388,608 バイトまでのシングルバイト文字、1 文字あたり 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 displays all available settings for Snowflake to Amazon Redshift conversion を選択します。

の Snowflake から Amazon Redshift への変換設定 AWS SCT には、以下のオプションが含まれています。
+ 変換されたコード内のアクション項目に関するコメントの数を制限する。

  選択した**重要度以上のアクション項目の変換されたコードにコメントを追加する で**、アクション項目の重要度を選択します。 は、選択した重要度以上のアクション項目の変換されたコードにコメント AWS SCT を追加します。

  たとえば、変換したコード内のコメントの数を最小限に抑えるには、[**エラーのみ**] を選択します。変換したコードのすべてのアクション項目にコメントを含めるには、[**すべてのメッセージ**] を選択します。
+ ターゲット Amazon Redshift クラスターに適用 AWS SCT できるテーブルの最大数を設定します。

  **ターゲット Amazon Redshift クラスターのテーブルの最大数で**、Amazon Redshift クラスターに適用 AWS SCT できるテーブルの数を選択します。

  Amazon Redshift には、クラスターノードタイプの使用を制限するクォータがあります。**Auto** を選択した場合、 はノードタイプに応じてターゲット Amazon Redshift クラスターに適用するテーブルの数 AWS SCT を決定します。オプションで、値を手動で選択します。詳細については、「*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 に警告メッセージが表示されます。また、 はテーブル数が制限に達するまで、ターゲット Amazon Redshift クラスターにテーブル AWS SCT を適用します。
+ Amazon Redshift テーブルの列に圧縮を適用します。そのためには、[**圧縮エンコードを使用**] を選択します。

  AWS SCT は、デフォルトの Amazon Redshift アルゴリズムを使用して、圧縮エンコーディングを列に自動的に割り当てます。詳細については、『*Amazon Redshift データベースデベロッパーガイド*』の「[圧縮エンコード](https://docs.aws.amazon.com/redshift/latest/dg/c_Compression_encodings.html)」を参照してください。

  デフォルトでは、Amazon Redshift はソートキーと分散キーとして定義されている列に圧縮を適用しません。この動作を変更したり、これらの列に圧縮を適用したりできます。そのためには、[**KEY 列には圧縮エンコードを使用**] を選択します。このオプションは、[**圧縮エンコードを使用**] オプションを選択した場合にのみ選択できます。

## スノーフレークから Amazon Redshift への変換最適化設定
<a name="CHAP_Source.Snowflake.ConversionOptimizationSettings"></a>

Snowflake から Amazon Redshift への変換最適化設定を編集するには、**「 の設定**」を選択し AWS SCT、**「変換設定**」を選択します。上のリストから [**Snowflake**] を選択し、次に [**Snowflake – Amazon Redshift**] を選択します。左側のペインで、**最適化 strategies**. AWS SCT displays conversion Optimization settings for Snowflake to Amazon Redshift conversion を選択します。

の 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 に適用します。この場合は、テーブル全体のコピーがすべてのノードに分散されます。