AWS Schema Conversion Tool を使用した Snowflake データウェアハウスへの接続
AWS SCT を使用して、Snowflake からのスキーマ、コードオブジェクトおよびアプリケーションコードを Amazon Redshift に変換できます。
ソースデータベースとしての Snowflake の権限
権限を持つロールを作成し、SECURITYADMIN ロールと SECURITYADMIN セッションコンテキストを使用して、このロールにユーザーの名前を付与することができます。
次の例では、最小限の権限を作成し、min_privs ユーザーに付与しています。
create rolerole_name; grant rolerole_nameto role sysadmin; grant usage on databasedb_nameto rolerole_name; grant usage on schemadb_name.schema_nameto rolerole_name; grant usage on warehousedatawarehouse_nameto rolerole_name; grant monitor on databasedb_nameto rolerole_name; grant monitor on warehousedatawarehouse_nameto rolerole_name; grant select on all tables in schemadb_name.schema_nameto rolerole_name; grant select on future tables in schemadb_name.schema_nameto rolerole_name; grant select on all views in schemadb_name.schema_nameto rolerole_name; grant select on future views in schemadb_name.schema_nameto rolerole_name; grant select on all external tables in schemadb_name.schema_nameto rolerole_name; grant select on future external tables in schemadb_name.schema_nameto rolerole_name; grant usage on all sequences in schemadb_name.schema_nameto rolerole_name; grant usage on future sequences in schemadb_name.schema_nameto rolerole_name; grant usage on all functions in schemadb_name.schema_nameto rolerole_name; grant usage on future functions in schemadb_name.schema_nameto rolerole_name; grant usage on all procedures in schemadb_name.schema_nameto rolerole_name; grant usage on future procedures in schemadb_name.schema_nameto rolerole_name; create user min_privs password='real_user_password' DEFAULT_ROLE =role_nameDEFAULT_WAREHOUSE = 'datawarehouse_name'; grant rolerole_nameto usermin_privs;
上記の例で、次のプレースホルダを置き換えます。
-
を読み取り専用の権限を持つロールの名前に置き換えます。role_name -
をソースデータベースの名前に置き換えます。db_name -
をソーススキーマの名前に置き換えます。schema_name -
を必要となるデータウェアハウスの名前に置き換えます。datawarehousename -
を最小限の権限を持つユーザーの名前に置き換えます。min_privs
DEFAULT_ROLE および DEFAULT_WAREHOUSE パラメータでは大文字と小文字が区別されます。
Amazon S3 へのセキュアアクセスの設定
Amazon S3 バケットにセキュリティおよびアクセス管理ポリシーを設けることで、Snowflake は S3 バケットにアクセスし、データの読み取りおよび書き込みができるようになります。Snowflake STORAGE INTEGRATION オブジェクトタイプを使用して、プライベート Amazon S3 バケットへの安全なアクセスを設定できます。Snowflake ストレージ統合オブジェクトは、認証責任を Snowflake の ID およびアクセス管理エンティティに委任します。
詳細については、Snowflake ドキュメントにある Amazon S3 にアクセスするための Snowflake ストレージ統合の設定
ソースとしての Snowflake への接続
以下の手順を使用して、 ソースデータベースを AWS Schema Conversion Tool に接続します。
Snowflake ソースデータベースに接続するには
-
AWS Schema Conversion Tool で、[Add source] (ソースの追加) を選択します。
-
[Snowflake] を選択し、その後 [Next] (次へ) を選択します。
[Add source] (ソースの追加) ダイアログボックスが表示されます。
-
[接続名] にデータベースの名前を入力します。この名前が AWS SCT の左側のパネルのツリーに表示されます。
-
AWS Secrets Manager からのデータベース認証情報を使用するか、手動で入力してください。
-
Secrets Manager のデータベース認証情報を使用するには、以下の手順に従ってください。
-
[AWS シークレット] で、シークレットの名前を選択します。
-
[入力] を選択すると、Secrets Manager のデータベース接続ダイアログボックスにすべての値が自動的に入力されます。
Secrets Manager のデータベース認証情報を使用する方法については、「AWS Schema Conversion Tool での AWS Secrets Manager の設定」を参照してください。
-
-
Snowflake ソースデータウェアハウス接続情報を手動で入力するには、以下の手順に従います。
パラメータ アクション Server name] (サーバー名 ソースデータベースサーバーのドメインネームシステム (DNS) 名または IP アドレスを入力します。
[Server port] (サーバーポート): ソースデータベースサーバーへの接続に使用するポートを入力します。
データベース Snowflake データベースの名前を入力します。
User name (ユーザー名) と [Password] (パスワード) データベース認証情報を入力して、ソースデータベースサーバーに接続します。
AWS SCT は、明示的にリクエストした場合にのみ、暗号形式でパスワードを保存します。
SSL の使用 データベースへの接続に Secure Sockets Layer (SSL) を使用する場合は、このオプションを選択します。[SSL] タブで、必要に応じて、以下の追加情報を提供します。
-
[プライベートキーパス]:プライベートキーの場所。
-
[パスフレーズ]:プライベートキーのパスフレーズ。
Snowflake の SSL サポートの詳細については、「接続のセキュリティオプションを設定する」を参照してください。
Store Password AWS SCT は、安全なボールトを作成して、SSL 証明書とデータベースパスワードを保存します。このオプションを設定すると、データベースパスワードを保存できます。これにより、パスワードを入力しなくてもデータベースにすばやく接続できるようになります。
Snowflake ドライバパス ソースデータベースへの接続に使用するドライバのパスを入力します。詳細については、「AWS Schema Conversion Tool 用の JDBC ドライバーのインストール」を参照してください。
ドライバパスをグローバルプロジェクト設定に保存する場合、ドライバパスは接続ダイアログボックスに表示されません。詳細については、「グローバル設定でのドライバパスの保存」を参照してください。
-
-
-
[Test Connection] (接続のテスト) を選択して、AWS SCT がソースデータベースに正常に接続できることを確認します。
-
[Connect] (接続) を選択して、ソースデータベースに接続します。
Snowflake をソースとして使用する場合の制限
Snowflake を AWS SCT のソースとして使用する場合の制限は次のとおりです。
-
オブジェクト識別子は、オブジェクトタイプと親オブジェクトのコンテキスト内で一意である必要があります。
- データベース
-
スキーマ識別子は、データベース内で一意である必要があります。
- スキーマ
-
テーブルやビューなどのオブジェクト識別子は、スキーマ内で一意である必要があります。
- テーブル/ビュー
-
列識別子は、テーブル内で一意である必要があります。
-
大規模および xlarge クラスターノードタイプのテーブルの最大数は 9,900 です。8xlarge クラスターノードタイプのテーブルの最大数は 100,000 です。制限には、ユーザー定義の一時テーブルと、クエリの処理またはシステムメンテナンス中に Amazon Redshift によって作成された一時テーブルの両方が含まれます。詳細については、Amazon Redshift クラスター管理ガイドの Amazon Redshift クォータを参照してください。
-
ストアドプロシージャの場合、入出力引数の最大数は 32 です。
Snowflake のソースデータ型
次に、AWS SCT を使用する場合にサポートされる Snowflake ソースデータ型と、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 + dt-attr-1 |
|
TIMESTAMP_NTZ |
TIMESTAMP |
|
TIMESTAMP_TZ |
TIMESTAMPTZ |
Snowflake から Amazon Redshift への変換設定
Snowflake から Amazon Redshift への変換設定を編集するには、AWS SCT で [設定] を選択し、[変換設定] を選択します。上のリストから [Snowflake] を選択し、次に [Snowflake – Amazon Redshift] を選択します。AWS SCT に、Snowflake から Amazon Redshift への変換に使用可能なすべての設定が表示されます。
AWS SCT での Snowflake から Amazon Redshift への変換設定には、以下のオプションが含まれています。
-
変換されたコード内のアクション項目に関するコメントの数を制限する。
[変換後のコードにコメントを追加] で、選択した重要度以上のアクションアイテムについて、アクションアイテムの重要度を選択します。AWS SCT は、選択した重要度以上のアクションアイテムについて、変換後のコードにコメントを追加します。
たとえば、変換したコード内のコメントの数を最小限に抑えるには、[エラーのみ] を選択します。変換したコードのすべてのアクション項目にコメントを含めるには、[すべてのメッセージ] を選択します。
-
AWS SCT でターゲット Amazon Redshift クラスターに適用できるテーブルの最大数を設定します。
[ターゲット Amazon Redshift クラスターの最大テーブル数] では、AWS SCT が Amazon Redshift クラスターに適用できるテーブルの数を選択します。
Amazon Redshift には、クラスターノードタイプの使用を制限するクォータがあります。[自動] を選択した場合、AWS SCT はノードタイプに応じてターゲット Amazon Redshift クラスターに適用するテーブルの数を決定します。オプションで、値を手動で選択します。詳細については、「Amazon Redshift 管理ガイド」の「Amazon Redshift のクォータと制限」を参照してください。
Amazon Redshift クラスターが保存できる量を超える場合でも、AWS SCT はすべてのソーステーブルを変換します。AWS SCT では、変換されたコードはプロジェクトに保存され、ターゲットデータベースには適用されません。変換したコードを適用したときにテーブルの Amazon Redshift クラスターのクォータに達すると、AWS SCT に警告メッセージが表示されます。また、テーブルの数が制限に達するまで、AWS SCT はターゲット Amazon Redshift クラスターにテーブルを適用します。
-
Amazon Redshift テーブルの列に圧縮を適用します。そのためには、[圧縮エンコードを使用] を選択します。
AWS SCT は、デフォルトの Amazon Redshift アルゴリズムを使用して、圧縮エンコーディングを列に自動的に割り当てます。詳細については、『Amazon Redshift データベースデベロッパーガイド』の「圧縮エンコード」を参照してください。
デフォルトでは、Amazon Redshift はソートキーと分散キーとして定義されている列に圧縮を適用しません。この動作を変更したり、これらの列に圧縮を適用したりできます。そのためには、[KEY 列には圧縮エンコードを使用] を選択します。このオプションは、[圧縮エンコードを使用] オプションを選択した場合にのみ選択できます。
スノーフレークから Amazon Redshift への変換最適化設定
Snowflake から Amazon Redshift への変換最適化設定を編集するには、AWS SCT で [設定] を選択し、[変換設定] を選択します。上のリストから [Snowflake] を選択し、次に [Snowflake – Amazon Redshift] を選択します。左側のペインで、[最適化戦略] を選択します。AWS SCT に Snowflake から Amazon Redshift への変換の変換最適化設定が表示されます。
AWS SCT での Snowflake から Amazon Redshift への変換最適化設定には、以下のオプションが含まれています。
-
自動テーブル最適化を使用するには。そのためには、[Amazon Redshift の自動テーブルチューニングを使用する] を選択します。
自動テーブル最適化は、テーブルの設計を自動的に最適化する Amazon Redshift の自己調整プロセスです。詳細については、『Amazon Redshift データベース開発者ガイド』の「自動テーブル最適化の操作」を参照してください。
自動テーブル最適化のみを利用するには、[初期キー選択戦略] で [なし] を選択します。
-
戦略を使用してソートキーと分散キーを選択するには。
Amazon Redshift メタデータ、統計情報、またはこれらのオプションの両方を使用して、ソートキーと配布キーを選択できます。[最適化戦略] タブの [初期キー選択戦略] では、以下のいずれかのオプションを選択します。
メタデータを使用し、統計情報は無視する
メタデータを無視し、統計情報を使用する
メタデータと統計情報を使用する
選択したオプションに応じて、最適化戦略を選択できます。次に、各戦略について、値 (0~100) を入力します。これらの値は各戦略の重みを定義します。これらの重み値を使用して、AWS SCTは各ルールがディストリビューションキーとソートキーの選択にどのように影響するかを定義します。デフォルト値は、AWS 移行のベストプラクティスに基づいています。
[小さいテーブルを検索] 戦略の小さいテーブルのサイズを定義できます。[最小テーブル行数] と [最大テーブル行数] には、テーブル内の最小行数と最大行数を入力して小さいテーブルとして定義します。AWS SCT は
ALL分散スタイルを小さなテーブルに適用します。この場合は、テーブル全体のコピーがすべてのノードに分散されます。 -
戦略の詳細を設定するには。
各最適化戦略の重みを定義することに加えて、最適化設定を構成できます。そのためには、[変換の最適化] を選択します。
[ソートキー列の制限] には、ソートキーの列の最大数を入力します。
[歪んだしきい値] には、列の歪んだ値のパーセンテージ (0 ~ 100) を入力します。AWS SCT は、歪み値がしきい値より大きい列を分散キーの候補リストから除外します。AWS SCT では、列の歪んだ値をレコードの総数に対する最も一般的な値の出現回数の割合として定義します。
[クエリ履歴テーブルの上位 N 件のクエリ] には、分析対象として最も頻繁に使用されるクエリの数 (1 ~ 100) を入力します。
[統計ユーザーを選択] では、クエリ統計を分析したいデータベースユーザーを選択します。
また、[最適化戦略」タブでは、[小さいテーブルを検索] 戦略の小さいテーブルのサイズを定義できます。[最小テーブル行数] と [最大テーブル行数] には、テーブル内の最小行数と最大行数を入力すると、小さいテーブルとして考慮されます。AWS SCT は
ALL分散スタイルを小さなテーブルに適用します。この場合は、テーブル全体のコピーがすべてのノードに分散されます。