促销活动:Redshift列在促销活动数据加载(RDBMS)中不可见
当Adobe Campaign通过Amazon Redshift ODBC连接使用数据加载(RDBMS)活动时,表或视图列可能不会显示在列选择对话框中。 当列列表保持为空时,表选取器可以正常工作。
描述 description
针对Redshift数据源配置数据加载(RDBMS)活动时出现问题:
- 选择Redshift连接。
- 选择表或视图。
- 选择选择要提取的列或打开查询列选取器。
- 不返回任何列。
使用相同连接的其他表可能会正确显示其列。 常规SQL查询也可以继续工作,这表示连接和表级数据访问不一定失败。
调查中受影响的对象包括:
- 使用分发和排序键定义的Redshift表。
- 使用UNION ALL跨多个数据库构建的视图,包括通过数据集样式引用公开的对象。
解决方法 resolution
根本原因
Redshift架构权限隐藏了表元数据
Campaign使用的Redshift ODBC元数据路径查询SVV_COLUMNS以检索列定义。
在受影响的案例中:
- 对表的常规查询成功。
- 数据库用户有权访问表数据。
- 执行SVV_COLUMNS查询时没有SQL错误。
- SVV_COLUMNS返回了零行。
- 因此,Campaign未收到要显示的列元数据。
可能的原因是权限不对称:用户对该表具有SELECT访问权限,但对父架构没有USAGE权限。 当未授予架构使用权限时,Redshift可以在从SVV_COLUMNS过滤元数据时允许读取表。
复杂的跨数据库视图不通过SVV_COLUMNS公开
此外,受影响的视图组合了来自多个数据库的表并使用的数据流样式引用。 Redshift ODBC连接器使用的元数据机制依赖于SVV_COLUMNS,但此系统视图未公开该类型跨数据库视图的列。
因此,即使视图定义本身有效,Campaign也无法填充列选取器。
此方案被视为不支持的元数据功能或不完整的元数据功能,需要增强功能才能使用其他Redshift元数据源,例如更广泛的系统视图或ODBC驱动程序的本机元数据API。
表分辨率
询问Redshift数据库管理员,以验证在Campaign外部帐户上配置的同一数据库用户是否具有父架构的USAGE权限。
对失败的数据库用户使用以下只读检查:
选择
current_database(),
current_user;
选择
has_schema_privilege(
current_user,
“< schema_name>”,
‘使用情况’
) AS has_schema_usage;
选择
列名,
数据类型
从svv_columns
WHERE table_schema =“< schema_name>”
AND table_name = '< table_name> ';
如果缺少架构用法,请将其授予Campaign数据库用户:
授权使用情况
在架构< schema_name>上
收件人< campaign_db_user> ;
例如,用户仍必须保留所需的表级权限:
授予SELECT
在表< schema_name> .<上 table_name>
收件人< campaign_db_user> ;
权限更改后,重新打开或刷新数据加载(RDBMS)活动,并验证是否已填充列列表。
在方案上授予USAGE允许用户引用该方案中的对象。 它本身不授予对表数据的访问权限。
复杂视图的解决方法或解决方法
对于未在SVV_COLUMNS中表示的视图,请使用以下方法之一:
- 使用受支持的基表或架构而不是复杂视图。
- 使用可直接提供SQL的查询活动或外部查询机制。
- 要求数据库团队通过受支持的表或更简单的视图公开所需数据。
- 作为产品增强功能,跟踪对跨数据库或数据集支持的视图的支持。
在单独的客户测试中,通过使用通用ODBC连接路径,驱动程序的本机SQLColumns()元数据API可以返回Redshift特定的连接器路径没有返回的列。 这可能是个有用的诊断或临时解决方法,但在推荐为永久解决方案之前,应该针对特定环境验证它。