ソースオブジェクトと操作 ソーストランスフォーメーションでは、単一のオブジェクト、複数のオブジェクト、クエリ、またはパラメータをソースタイプとして使用して、Snowflakeからデータを読み取ることができます。
特定のソースオブジェクトには、いくつかの制限が適用されます。
パラメータソースタイプ ソースオブジェクトと接続をパラメータ化して、トランスフォーメーションで[実行時にパラメータのオーバーライドを許可する] オプションを有効にした場合は、db.schema.tablename などの完全修飾名を使用してオブジェクト名をオーバーライドすることはできません。
Snowflake Data Cloud接続の[JDBC URLの追加パラメータ] フィールドにあるdb=<dbname>&schema<schemaname> 値を渡すことができます。
複数のソースタイプ 単一のソーストランスフォーメーションを使用して、同じデータベース内の複数のSnowflakeテーブルから読み取りを行うことができます。複数のSnowflakeソースから読み取るには、複数のSourceトランスフォーメーションを作成してから、ジョイナトランスフォーメーションを使用してソースを結合します。
単一のソーストランスフォーメーションを使用して複数のテーブルから読み取るには、ソースタイプとして複数のオブジェクトを選択してから、テーブルを結合するように設定します。定義済みのPK-FKリレーションを含む関連オブジェクトを追加するか、またはテーブルを結合するためのリレーション条件を定義できます。テーブル間のリレーションを定義するための独自の条件を設定するには、[関連オブジェクトのアクション] メニューから[詳細リレーション] を選択し、リレーションを定義します。結合式を設定する場合、フィールドを選択し、結合クエリ構文を定義します。条件をのみを指定する必要があり、クエリ内の結合のタイプは必要ありません。式用にテキストボックスに指定した条件は、結合条件に追加されます。
詳細リレーションに結合条件を指定してテーブルを結合する場合、接続からのデータベースおよびスキーマ名をオーバーライドすることはできません。詳細リレーション条件でデータベースおよびスキーマ名を手動で変更する必要があります。条件にdb.schema.tablename などの完全修飾名のカラムが含まれている場合は、オーバーライドを設定しないでください。詳細リレーション条件から完全修飾データベースおよびスキーマ名を削除してからマッピングを実行します。
複数のソースタイプの制限 複数のソースタイプには、次の制限があります。
• 関連オブジェクトを使用して結合された複数のテーブルからデータを読み取る場合、テーブルおよびカラム名に大文字と小文字を区別するカラムが含まれていると、マッピングが失敗します。 • 同じカラム名を持つ1つ以上のテーブルの結合で設定されたマッピングは失敗します。 • 同じデータベースとスキーマに属していない複数のSnowflakeオブジェクトから読み取りを行うマッピングは失敗します。 • Snowflakeソースの詳細プロパティでテーブル、スキーマ、またはデータベースへのオーバーライドを指定すると、複数のテーブルから読み取る結合で設定されたマッピングが失敗します。 クエリソースタイプ カスタムSQLクエリを使用してSnowflakeテーブルをインポートする場合は、カスタムSQLクエリでSnowflakeデータベースとスキーマ名を指定します。データベースとスキーマ名を指定しない場合、エージェントでは接続プロパティで指定したデータベースとスキーマ名が考慮されます。Snowflakeから読み取るクエリのテーブル名は完全修飾されたものである必要があります。カスタムクエリを使用してストアドプロシージャを呼び出す場合は、ロールがデータベースとスキーマにアクセスできることを確認してください。
次のような制限付きで、クエリソースタイプを使用できます。
• 接続内のデータベース名とスキーマ名のオーバーライドを設定しないでください。• 次の操作は、クエリソースタイプには適用されません。- フィルタとソートのオプション。- ソースパーティション。- Pre-SQL文とPost-SQL文を除く詳細プロパティ。- 詳細モードでは、ソーストランスフォーメーションのカスタムクエリからストアドプロシージャを呼び出すことはできません。• クエリソースタイプではネストされた入出力パラメータを設定しないでください。 • マッピングでパラメータ化されたクエリソースタイプを使用して複数のテーブルから読み取りを行う場合、同じカラム名を持つ1つ以上のテーブルに対して結合を設定すると、マッピングは失敗します。例えば、SALES.PUBLICスキーマの一部である2つのテーブルEMPLOYEEとDEPARTMENT間の完全外部結合を含む次のSQLクエリを見てください。ここで、2つのカラムにはCITYという同じ名前が付いています。
SELECT EMP_ID, NAME, CITY, DEPT_ID, DEPT_NAME, CITY FROM SALES.PUBLIC.EMPLOYEE FULL OUTER JOIN SALES.PUBLIC.DEPARTMENT ON EMP_ID = DEPT_ID
競合するカラム名を区別するには、テーブルを結合するときにデータベースが参照できるエイリアスを追加します。
SELECT e.EMP_ID, e.NAME, e.CITY as ecity,d.DEPT_ID, d.DEPT_NAME, d.CITY as dcity FROM SALES.PUBLIC.EMPLOYEE e FULL OUTER JOIN SALES.PUBLIC.DEPARTMENT d ON e.EMP_ID = d.DEPT_ID
ソースに関する一般的な制限 ソーストランスフォーメーションには、次の一般的な制限があります。
• 二重引用符を含むSnowflakeのテーブル名とカラム名の読み取りまたは書き込みを行うことはできません。マッピングは次のエラーで失敗します: SQL compilation error • 詳細モードでは、500を超えるカラムから読み取りを行うマッピングは、次のエラーで失敗します: HTTP POST request failed due to IO error 。• フィルタでシステム変数を使用することはできません。• 複数のフィルタ条件を設定し、そのうちの1つにIS NULL演算子が含まれている場合は、必ずIS NULL演算子を最後に付けて条件を配置してください。このような操作を行わない場合、マッピングが失敗します。• Snowflakeオブジェクトをインポートする場合は、スキーマ名にスラッシュ(/)またはバックスラッシュ(\)が含まれていないことを確認してください。スキーマ名にスラッシュ(/)またはバックスラッシュ(\)が含まれている場合、スラッシュ(/)またはバックスラッシュ(\)を含む名前を持つスキーマ内のテーブルは、マッピングオブジェクトのユーザーインタフェースに反映されません。