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 中的临时表列更新现有表中的列?