Amazon Redshift:根据表中存在的列列表选择列

Posted

技术标签:

【中文标题】Amazon Redshift:根据表中存在的列列表选择列【英文标题】:Amazon Redshift: Selecting columns based on a list of columns present in a table 【发布时间】:2018-06-21 09:02:08 【问题描述】:

是否可以以任何方式(无需脚本)聚合存储在表格单元格中的列。

基本上我在这里想要实现的是,如果我有下表

Table 1
KEYNAME    | COLUMN_NAME
COUNT_USER | USER_ID
SUM_HOURS  | HOURS_WATCHED

我可以做类似的事情

select SUM((select column_name from TABLE1 where KEYNAME = "SUM_HOURS")) FROM MAIN_TABLE

我可以选择在 python 中编写脚本,我知道如何实现这一点。但我很想知道这在任何版本的 SQL 中是否可行 如果信息不足,请告诉我。

【问题讨论】:

我使用 Redshift 所以 Postgre 如果我理解正确,您将不得不使用动态 SQL 或巨大的case 表达式。 是的,可能的方法是用例。但问题是这个系统是动态的,每个月都会根据客户的要求和他们想要计算的指标而变化。所以我想通过配置表来驱动它(不完全是上面的行)。 【参考方案1】:

不,您不能使用来自另一个查询结果的列名。

您需要在您自己的代码中执行此操作,并将结果作为完整查询发送到 Amazon Redshift。 (也就是说,运行一个查询以获取列名,然后运行第二个查询并插入这些列名。)

【讨论】:

因此,如果我理解正确,由于 redshift 不支持存储过程,我将不得不使用接口“运行一个查询以获取列名,然后运行插入这些列名的第二个查询”一些脚本语言,例如 python/unix 等? 是的,没错。只需将 Redshift 用作流程中的“最后一步”,而不是尝试在查询中构建太多智能。事实上,这对任何系统都是很好的建议,因为它可以避免被任何特定技术所束缚。我听说很多人想将系统从 Oracle 中迁移出来,但是他们大量使用存储过程使他们不得不使用这种特定的技术。最好把业务逻辑和数据库层分开。 正确,这很有意义并回答了我的好奇心。谢谢!!

以上是关于Amazon Redshift:根据表中存在的列列表选择列的主要内容,如果未能解决你的问题,请参考以下文章

Amazon Redshift 大小增加

Amazon EMR 与 Amazon Redshift

如何使用 Amazon Redshift 中的临时表列更新现有表中的列?

需要从源表中获取布尔类型列作为 varchar 并在 Amazon redshift 的目标表中存储为 varchar

Redshift - 提取约束

使用 lambda 函数 nodejs 从 Amazon Redshift 查询选择