【问题标题】:Create column based on values on another column in redshift根据redshift中另一列的值创建列
【发布时间】:2020-05-28 18:38:13
【问题描述】:

假设我有下表:

|---------------------|
|          id         |
|---------------------|
|          12         |
|---------------------|
|         390         |
|---------------------|
|          13         |
|---------------------|

我想根据id 列的映射创建另一个列,例如:

12 -> qwert
13 -> asd
390 -> iop

所以我基本上想要一个查询来创建一个基于该地图的列,我的最终表格将是:

|---------------------|---------------------|
|          id         |          col        |
|---------------------|---------------------|
|          12         |          qwert      |
|---------------------|---------------------|
|         390         |          iop        |
|---------------------|---------------------|
|          13         |          asd        |
|---------------------|---------------------|

我在 python 字典中有这张地图。

这可能吗?

(基本上就是pandas.map

【问题讨论】:

  • 您希望在 Redshift 中执行此操作吗?如果是这样,“地图”需要在 Redshift 中作为表格提供,而这只是加入地图表格的问题。你的地图是什么样子的?随时编辑您的问题以提供更多信息。
  • 这是一个python字典(实际上,我真正的问题是因为我有一个pandas数据框,我上传到redshift但我忘记了一个我不想创建并再次上传整个表的列,我想只传递该列和表的主键:)。,我认为创建一个新表并与您所说的初始表连接的解决方案将起作用。但我想知道是否有可能,例如,在 SQL 查询中传递两个列表并将这些列表用作 (key, value) 对来创建基于初始列(主键)的另一列。 @JohnRotenstein

标签: sql amazon-web-services amazon-redshift dml


【解决方案1】:

您似乎希望“修复”一些已经在您的 PostgreSQL 数据库中的数据。

您可以使用这种技术包含数据:

WITH foo AS (VALUES (12, 'qwert'), (13, 'asd'), (390, 'iop'))
SELECT table.id, foo.column2
FROM table
JOIN foo ON (foo.column1 = table.id)

您可以将其作为UPDATE 语句来实现,但它会变得很棘手。编写包含您想要的一切的SELECT 语句可能会更容易,然后使用CREATE TABLE new_table AS SELECT...

见:CREATE TABLE AS - Amazon Redshift

【讨论】:

  • 太棒了!这正是我正在寻找的,谢谢
猜你喜欢
  • 1970-01-01
  • 2021-12-02
  • 2023-02-23
  • 2020-04-16
  • 2022-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多