Campaign:Campaign データ読み込み(RDBMS)でRedshift列が表示されない
Adobe CampaignがAmazon Redshift ODBC接続でデータ読み込み(RDBMS)アクティビティを使用すると、列選択ダイアログにテーブルまたはビューの列が表示されない場合があります。 列リストが空のままの場合、テーブルピッカーは正しく機能します。
説明 description
この問題は、Redshift データソースに対してデータ読み込み(RDBMS)アクティビティを設定する際に発生します。
- Redshift接続を選択します。
- テーブルまたはビューを選択します。
- 「抽出する列を選択」を選択するか、クエリ列ピッカーを開きます。
- 列は返されません。
同じ接続を使用している他のテーブルでは、列が正しく表示される場合があります。 通常のSQL クエリも引き続き機能する可能性があります。これは、接続とテーブルレベルのデータアクセスが必ずしも失敗していないことを示しています。
調査の対象となるオブジェクトは次のとおりです。
- 配布とソートキー定義を使用したRedshift テーブル。
- データウェアハウス形式の参照を通じて公開されたオブジェクトを含む、複数のデータベースにまたがるUNION ALLで構築されたビュー。
解決策 resolution
根本原因
テーブルのメタデータがRedshift スキーマの権限によって非表示になっています
Campaignで使用されるRedshift ODBC メタデータパスは、列定義を取得するためにSVV_COLUMNSをクエリします。
影響を受けるケース:
- テーブルに対する通常のクエリが成功しました。
- データベースユーザーはテーブルデータにアクセスできました。
- SQL エラーなしでSVV_COLUMNS クエリが実行されました。
- SVV_COLUMNSは0行を返しました。
- したがって、Campaignは表示する列メタデータを受信しませんでした。
原因として考えられるのは、権限の非対称性です。ユーザーはテーブルに対するSELECT アクセス権を持っていましたが、親スキーマに対するUSAGE権限がありませんでした。 スキーマの使用が許可されていない場合、RedshiftはSVV_COLUMNSからメタデータをフィルタリングする際にテーブルの読み取りを許可できます。
複雑なクロスデータベースビューがSVV_COLUMNSを通じて公開されない
さらに、影響を受けるビューでは、複数のデータベースのテーブルを組み合わせ、データシェアスタイルの参照を使用しました。 Redshift ODBC コネクタで使用されるメタデータメカニズムはSVV_COLUMNSに依存していますが、このシステムビューでは、そのタイプのクロスデータベースビューの列は公開されませんでした。
その結果、ビュー定義自体が有効であったにもかかわらず、Campaignは列ピッカーに入力できませんでした。
このシナリオは、より広範なシステムビューやODBC ドライバーのネイティブなメタデータ APIなど、別のRedshift メタデータソースを使用するための機能強化を必要とする、サポートされていない、または不完全なメタデータ機能と見なされました。
テーブルの解像度
Redshift データベース管理者に、Campaign外部アカウントで設定された同じデータベースユーザーに、親スキーマに対するUSAGE権限があることを確認するように依頼します。
失敗したデータベースユーザーに対して、次の読み取り専用チェックを使用します。
SELECT
current_database (),
current_user;
SELECT
has_schema_privilege (
current_user,
'< schema_name> ',
‘使用状況’
) AS has_schema_usage;
SELECT
column_name,
data_type
FROM svv_columns
WHERE table_schema = '< schema_name> ’
AND table_name = '< table_name> ';
スキーマの使用状況が見つからない場合は、Campaign データベースユーザーに付与します。
使用権限を付与
ON スキーマ < schema_name>< campaign_db_user>に送信します。
ユーザーは、必要なテーブルレベルの権限を保持する必要があります。例:
SELECTを許可
ON TABLE < schema_name> .< table_name>< campaign_db_user>に送信します。
権限の変更後、データローディング(RDBMS)アクティビティを再度開くか更新し、列リストが入力されていることを確認します。
スキーマにUSAGEを付与すると、ユーザーはそのスキーマ内のオブジェクトを参照できます。 単独では、テーブルデータへのアクセスを許可しません。
複雑なビューの解決または回避策
SVV_COLUMNSに表示されないビューの場合は、次のいずれかの方法を使用します。
- 複雑なビューの代わりに、サポートされている基本テーブルまたはスキーマを使用します。
- SQLを直接指定できるクエリアクティビティまたは外部クエリメカニズムを使用します。
- データベースチームに、サポートされているテーブルまたはシンプルなビューを通じて必要なデータを公開するように依頼します。
- 製品の機能強化として、クロスデータベースまたはデータシェアに基づいたビューのサポートを追跡します。
別の顧客テストでは、汎用ODBC接続パスを使用して、ドライバーのネイティブ SQLColumns () メタデータ APIが、Redshift固有のコネクタパスが返されなかった列を返すことができました。 これは診断や一時的な回避策として有効な場合がありますが、恒久的な解決策として推奨する前に、特定の環境について検証する必要があります。