SQL中的列的键值对,不声明列
我在AWS红移中有一个表,在键值对中有各种各样的键。我试图将这个表转换为一个更传统的结构,其中每个唯一的键都是一列SQL中的列的键值对,不声明列,sql,pivot,amazon-redshift,key-value,dynamic-sql,Sql,Pivot,Amazon Redshift,Key Value,Dynamic Sql,我在AWS红移中有一个表,在键值对中有各种各样的键。我试图将这个表转换为一个更传统的结构,其中每个唯一的键都是一列 |---------------------|---------------------|------------------| | ID | Key | Value | |---------------------|---------------------|-----------------
|---------------------|---------------------|------------------|
| ID | Key | Value |
|---------------------|---------------------|------------------|
| a | 1 | one |
|---------------------|---------------------|------------------|
| a | 2 | two |
|---------------------|---------------------|------------------|
| a | 3 | three |
|---------------------|---------------------|------------------|
| ... | ... | ... |
|---------------------|---------------------|------------------|
到
然而,我只是在网上寻找解决方案,在那里你必须显式地键入每个键的潜在值。对我来说,手动编码这些列似乎不是一个可行的解决方案,因为已经有200多个不同的键,而且这个数字还在不断增加
是否有任何方法可以动态生成sql代码以使用sql进行此转换
如果有帮助的话,我可以为所有唯一键创建一个单独的表,但我仍然没有找到将其与SQL查询联系起来的方法。“*我只是在网上寻找解决方案,您必须显式地键入键的每个潜在值*”-因为这是实现itI的唯一方法我主要使用python,所以我不习惯这些类型的限制。我可能不得不用另一种方式来解决这个问题,主要问题是数据需要在数据库表中创建列。因此,需要首先创建具有适当名称的列,然后将数据转换为新格式。您可以编写一个存储过程,查看键,检查是否存在列,如果不存在,则添加列,然后插入数据。这将是相当缓慢的,因为每一行都需要独立处理。它是用于数据转换的sql+python+jinja基础工具。例如,它支持(这正是您所需要的)。但是,如果您的轴心是您需要的唯一转换,那么dbt强制执行的结构可能是一种过火的行为。
|-----------------|-----------------|--------------|--------------|--------------|
| Id | 1 | 2 | 3 | ... |
|-----------------|-----------------|--------------|--------------|--------------|
| a | one | two | three | ... |
|-----------------|-----------------|--------------|--------------|--------------|