促销活动: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特定的连接器路径没有返回的列。 这可能是个有用的诊断或临时解决方法,但在推荐为永久解决方案之前,应该针对特定环境验证它。

recommendation-more-help
experience-cloud-kcs-help-kbarticles