Snowflakeターゲット ターゲットの準備 ターゲットの準備は、Snowflakeターゲットテーブルへのデータの高パフォーマンスストリーミングにSuperpipe機能を使用するか、中間ステージファイルにデータを書き込むかによって異なります。
Superpipeを使用
Superpipe機能を使用する場合は、次の手順を実行します。
1 データ取り込みおよびレプリケーション ユーザーを作成します。次のSQL文を使用します。create user INFACMI_User password 'Xxxx@xxx';
2 新しいユーザーロールを作成し、データ取り込みおよびレプリケーション ユーザーに付与します。以下のSQL文を使用します。create role INFACMI_superpipe; grant role INFACMI_superpipe to user INFACMI_User;
3 Snowflake仮想ウェアハウスの使用権限を新しいロールに付与します。次のSQL文を使用します。grant usage on warehouse warehouse_name to role INFACMI_superpipe;
4 Snowflakeデータベースの使用権限を新しいロールに付与します。次のSQL文を使用します。grant usage on database INFACMI_DB1 to role INFACMI_superpipe;
5 新しいスキーマを作成します。以下のSQL文を使用します。use database INFACMI_DB1; create schema sh_superpipe;
6 新しいSnowflakeスキーマに対するcreate stream、create view、およびcreate table特権を新しいロールに付与します。次のSQL文を使用します。grant create stream, create view, create table, usage on schema INFACMI_DB1.sh_superpipe to role INFACMI_superpipe;
7 新しく作成されたユーザーのデフォルトのロールを設定します。次のSQL文を使用します。alter user INFACMI_User set default_role=INFACMI_superpipe;
8 ターゲットへのSnowflake Data Cloud接続を定義します。認証方法として[KeyPair] オプションを使用する必要があります。「コネクタと接続」>「Snowflake Data Cloud接続プロパティ」を参照してください。9 OpenSSLバージョン3.x.xと次のいずれかの暗号を使用してプライベートキーを生成します。- AES128- AES128-CBC- AES256- AES-256-CBC次のopensslコマンドを使用し、プライベートキーを生成してフォーマットします。 openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -v1 AES-256-CBC -out rsa_key.p8
10 パブリックキーを生成します。次のopensslコマンドを使用し、-inオプションで暗号化されたプライベートキーを含むファイル(rsa_key.p8)を参照します。openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
11 Snowflakeで、パブリックキーをSnowflakeユーザーに割り当てます。次のSQLコマンドを使用します。alter user INFACMI_User set rsa_public_key='key_value’;
次の手順 : 取り込みおよびレプリケーションタスクを作成するときに、タスクウィザードの[ターゲット] ページで[Superpipe] オプションを選択します。必要に応じて、変更データ行がマージされてSnowflakeターゲットテーブルに適用される頻度を制御する[マージ頻度] 値を指定することもできます。
Superpipeを使用しない
SnowflakeターゲットにSuperpipe機能を使用しない場合は、ACCOUNTADMINユーザーとして次の手順を実行します。
1 データ取り込みおよびレプリケーション ユーザーを作成します。次のSQL文のいずれかを使用します。create user INFACMI_User password 'Xxxx@xxx';
または
replace user INFACMI_User password 'Xxxx@xxx';
2 新しいロールを作成し、そのロールをデータ取り込みおよびレプリケーション ユーザーに付与します。以下のSQL文を使用します。create role INFA_CMI_Role; grant role INFA_CMI_Role to user INFACMI_User;
3 Snowflake仮想ウェアハウスの使用権限を新しいロールに付与します。次のSQL文を使用します。grant usage on warehouse CMIWH to role INFA_CMI_Role;
4 Snowflakeデータベースの使用権限を新しいロールに付与します。次のSQL文を使用します。grant usage, CREATE SCHEMA on database CMIDB to role INFA_CMI_Role;
5 新しく作成されたユーザーのデフォルトのロールを設定します。次のSQL文を使用します。alter user INFACMI_User set default_role=INFA_CMI_Role;
また、INFACMI_Userとして新しいスキーマを作成します。
create schema CMISchema;
注: ユーザーのデフォルトロールが取り込みおよびレプリケーションタスクに使用され、必要な権限がない場合、実行時に次のエラーが発行されます。
SQL compilation error: Object does not exist, or operation cannot be performed.
Snowflakeで管理されるIcebergテーブルの場合
Superpipeオプションを使用するかどうかに関係なく、データとメタデータを、Snowflakeテーブルではなく、外部クラウドストレージのSnowflakeで管理されるIcebergテーブルに保存することを選択できます。Icebergテーブルの使用を準備するには、次のタスクを実行します。
• Snowflakeで外部ボリュームを作成して設定し、Snowflakeが外部クラウドストレージに接続するために使用できるIDおよびアクセス管理(IAM)エンティティを保存します。手順は、クラウドストレージのタイプ(Amazon S3、Google Cloud Storage、Azure Storageなど)によって異なります。手順については、Snowflakeのドキュメントhere を参照してください。• 外部ボリュームとIcebergテーブルを作成し、外部ボリュームとテーブルスキーマを使用するために必要な最小限のアクセス制御権限を持つロールを作成します。手順については、Snowflakeのドキュメントhere を参照してください。使用に関する考慮事項: • データベース取り込みとレプリケーション は、Snowflake Data Cloudターゲットにデータを移動する代替方法を提供しています。- 取り込みタスクを定義するときに[Superpipe] オプションを選択した場合、取り込みジョブはSnowpipe Streaming APIを使用して、短い待ち時間でデータ行をターゲットテーブルに直接ストリーミングします。この方法は、すべてのロードタイプで使用できます。[KeyPair] 認証を使用する必要があります。- Superpipeを使用しない場合、取り込みジョブはまず、タスク定義で指定した名前を持つ内部ステージのデータファイルにデータを書き込みます。• Superpipeを使用せず、取り込みジョブのターゲットプロパティで指定した内部ステージが存在しない場合、データベース取り込みとレプリケーション は、次のSQLコマンドを実行してステージを自動的に作成します。Create stage if not exists "Schema"."Stage_Bucket"”
コマンドを正常に実行するには、次の特権をユーザーロールに付与する必要があります。
GRANT CREATE STAGE ON SCHEMA "Schema" TO ROLE <your_role >;
• データベース取り込みおよびレプリケーションジョブを有効にして、Snowflakeではなく、外部クラウドのAmazon S3、Google Cloud Storage、またはAzure Storageの場所にあるApache Icebergで管理されるテーブルにオープン形式でデータを保存できます。詳細については、「Snowflakeが管理するIcebergテーブルを使用した外部クラウドストレージへのデータの保存 」を参照してください。• Snowflake Data Cloudターゲットの接続を定義するときは、[JDBC URLの追加パラメータ] フィールドにdatabase= target_database_name と設定する必要があります。それ以外の場合は、データベース取り込みとレプリケーション タスクウィザードでターゲットを定義しようとすると、スキーマのリストを取得できないことを示すエラーメッセージが表示されます。• [KeyPair] オプションを認証方法として使用してSnowflakeターゲットの接続を定義し、OpenSSL 3.x.xバージョンでプライベートキーを生成する場合は、プライベートキーの生成時にAES128 、AES128-CBC 、AES256 、またはAES-256-CBC 暗号を使用します。次のコマンドを実行します。openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -v1 AES-256-CBC -out rsa_key.p8
OpenSSLでは、バージョン3.x.xの使用を推奨しています。
データ取り込みおよびレプリケーション では次の暗号をサポートしています。
- AES128- AES128-CBC- AES256- AES-256-CBC- CAMELLIA-256-CBC- CAMELLIA-256-CTR- ARIA-256-CTR注: CAMELLIA-256-CBC、CAMELLIA-256-CTR、およびARIA-256-CTR暗号は、パスワードで暗号化されたプライベートキーでは無効です。これらの暗号を使用して暗号化されたプライベートキーを生成するには、次のコマンドを使用します。
openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 CAMELLIA-256-CTR -inform PEM -out rsa_key.p8 -nocrypt
• データベース取り込みとレプリケーション の増分ロードジョブ、および初期ロードと増分ロードの組み合わせジョブにより、ターゲット上にINFORMATICA_CDC_RECOVERYという名前のリカバリテーブルが生成され、障害後に再開されたジョブが以前に処理されたデータを再度プロパゲートするのを防ぐ内部サービス情報が格納されます。このリカバリテーブルは、ターゲットテーブルと同じスキーマで生成されます。• Snowflakeターゲットを持つデータベース取り込みおよびレプリケーション増分ロードジョブと組み合わせロードジョブは、デフォルトで、永続テーブルではなく、ターゲットにデータをステージングするための一時的な_LOGテーブルを作成します。永続テーブルが作成されないように、Snowflake Time TravelおよびFail-safe機能はデフォルトで無効になっています。一時テーブルを使用すると、_LOGテーブルストレージの消費量と関連コストを削減できます。ただし、一時テーブルでは、Superpipeオプションを使用できません。永続テーブルを作成する必要がある場合は、ターゲットのsnowflakeStagingTransientTableカスタムプロパティをfalseに設定できます。• Snowflakeターゲットの場合、NUMBERフィールドのスケールを変更したり、既存のフィールドのデータ型を別のデータ型に変更したりすることはできません。Snowflakeではこれらの操作がサポートされていないためです。• ソーステーブルに名前に特殊文字が含まれるカラムが含まれている場合は、特殊文字をSnowflakeターゲットの指定した文字列に置き換えることができます。生成されたターゲットスキーマの特殊文字を指定した文字列に置き換えるには、データベース取り込みとレプリケーション タスクをデプロイする前に、次の操作を実行します。
1 metadata-managerレイヤーで使用するプロパティファイルを作成します。targetReplacementValue=<string> のキーと値のペアをプロパティファイルに追加します。2 管理者 の[ランタイム環境] ページを開き、Secure Agentを編集します。[カスタム構成の詳細] 領域でカスタムプロパティを作成します。▪ [データベース取り込み] サービスを選択します。▪ [DBMI_AGENT_ENV] タイプを選択します。▪ プロパティ名としてDBMI_TASK_OVERRIDE_PROPERTIESと入力します。▪ プロパティ値としてプロパティファイルの場所を入力します。3 タスクウィザードの[ターゲット] ページで、targetReplacementValue=<string>カスタムプロパティを設定します。タスクを実行する前に、<jobname>をプロパティファイルのtargetReplacementValueキーに追加します。
<jobname>.targetReplacementValue=<string>
プロパティがすべてのジョブに影響する場合は、「alljobs」をtargetReplacementValueキーに追加します。
alljobs.targetReplacementValue=<string>
• Snowflakeターゲットを持ち、Superpipe オプションを使用しているデータベース取り込みおよびレプリケーションの増分ロードジョブまたは組み合わせジョブで、変更ストリームの取り込まれたすべてのデータがターゲットにマージされていることを確認してください。マージされていない場合、ジョブが長期間、またはストリームの有効期限が切れる前に再開されないと、ストリームに残っているデータはすべて失われ、回復できません。• Superpipeオプションを使用するSnowflakeターゲットを持つ増分ロードジョブおよび組み合わせロードジョブの場合、ターゲットプロパティで設定されたマージ間隔が経過する前に、変更データ行がマージされ、Snowflakeターゲットテーブルに適用されることがあります。この動作は、変更された行が検出されるたびに発生します。ミューテーションは、マージ間隔を待たずに、マージ適用処理をすぐに開始するようにトリガします。• データベース取り込みおよびレプリケーションジョブがソースのJSONカラムからSnowflakeにデータをレプリケートする場合、Snowflakeはターゲットのデータ内にスラッシュ(/)を追加します。余計なスラッシュが発生しないように、ターゲットカスタムプロパティを設定することもできます。詳細については、Informaticaグローバルカスタマサポートにお問い合わせください。Snowflakeが管理するIcebergテーブルを使用した外部クラウドストレージへのデータの保存 データベース取り込みおよびレプリケーションジョブを有効にして、データとメタデータを、Snowflakeテーブルではなく、外部クラウドの場所にあるSnowflakeが管理するIcebergテーブルに保存できます。外部の場所は、Amazon S3、Google Cloud Storage、またはAzure Storageに指定できます。
オープン形式のデータの外部ストレージには、次の利点があります。
• Snowflake以外のクエリ処理エンジンを使用してデータを処理する機能• さまざまなデータ処理および分析ツール間の相互運用性• パフォーマンスの向上• 堅牢なセキュリティとガバナンスデータベース取り込みおよびレプリケーションでは、Icebergテーブルの使用が有効になっている取り込みおよびレプリケーションタスクをデプロイすると、Snowflakeが管理するIcebergテーブルが自動的に作成されます。Icebergテーブルを手動で作成する必要はありません。
Snowflakeは、Icebergテーブルのメタデータとカタログを管理します。Snowflakeは、IDおよびアクセス管理(IAM)情報を保存する外部ボリュームを使用して、外部ストレージの場所に接続します。Snowflakeでは、事前に外部ボリュームを作成して構成しておく必要があります。詳細については、「
Snowflakeターゲット 」の「ターゲットの準備」を参照してください。
取り込みおよびレプリケーションタスクを設定する場合は、次のターゲットカスタムプロパティを指定して、Snowflakeが管理するIcebergテーブルを使用できるようにします。
• writerTargetTableFormat 。必須。このカスタムプロパティを[iceberg] に設定して、Snowflakeが管理するIcebergテーブルを使用できるようにします。• writerTargetTableExternalVolumeName .必須。Snowflakeアカウントで作成した外部ボリュームの名前を入力します。• writerTargetTableExternalStorageBaseLocation .オプション。外部ストレージの場所のベースURL。この値を指定しない場合は、外部ボリューム定義のベースURLが使用されます。取り込みおよびレプリケーションタスクでは、任意のロードタイプ、任意の適用モード、およびスキーマドリフトを使用できます。Superpipeオプションは許可されていますが、必須ではありません。
Icebergテーブルの使用には、次の制限事項が適用されます。
• 一時的なテーブルではなく、永続的なSnowflakeが管理するIcebergテーブルを使用する必要があります。• 外部ボリュームは、Snowflakeアカウントと同じクラウドとリージョンにある必要があります。• サイズ仕様が制限されたCharおよびvarcharデータ型はサポートされていません。• 時間とタイムスタンプのデータ型の精度はマイクロ秒です。Snowflakeへのプライベート接続の設定 AWSまたはAzureプライベートリンクエンドポイントを使用してSnowflakeにアクセスできます。
AWSまたはAzureプライベートリンクの設定によって、Snowflakeへの接続がAWSまたはAzure内部ネットワークを使用して確立され、パブリックインターネットを介して行われないようにします。
プライベートAWSネットワーク経由でSnowflakeアカウントに接続するには、
AWS Private Link and Snowflake を参照してください。
プライベートAzureネットワーク経由でSnowflakeアカウントに接続するには、
Azure Private Link and Snowflake を参照してください。