Redshift 加入元数据表并选择列
Posted
技术标签:
【中文标题】Redshift 加入元数据表并选择列【英文标题】:Redshift join with metadata table and select columns 【发布时间】:2018-05-09 08:14:54 【问题描述】:我创建了一个带有 table_name、col_name 和 data_type 的 pg_table_def 表的子集。我还添加了一个以“Y”为活动的列作为某些行的值。让我们将此表称为 config。Table config 如下所示:
table_name column_name interaction_summary name_id tag_transaction name_id interaction_summary direct_preference bulk_sent email_image_click crm_dm web_le_click
现在我希望能够将此表中的表名映射到实际表并获取相应列的值。 name_id 将是此处的键,可在所有表中使用。我的输出应该如下所示:
name_id direct_preference email_image_click web_le_click
1 Y 1 2
2 N 1 2
解决方案需要是动态的,这样即使明天表列表扩展,新表也应该能够容纳。由于我是 Redshift 的新手,因此感谢您提供任何帮助。我也在考虑使用 dplyr 包通过 R 做同样的事情。
【问题讨论】:
Redshift SQL 不支持变量或动态 SQL,因此这不能仅在 Redshift 中实现,您需要一些外部过程来查询元数据并生成适当的选择语句。如果您可以详细说明您考虑和放弃的任何选项,或者您的环境的限制,例如,这也会有所帮助。可用的工具。就目前而言,这个问题过于开放,无法详细回答。 ***.com/help/how-to-ask 谢谢内森。我会更加小心地发布未来的问题。我的计划是使用动态查询对少数数据库表列进行回归分析。我几乎可以使用 R 破解它。在下面回答了我的问题。! 【参考方案1】:我了解到动态查询不适用于 Redshift。 我的目标是拉出任何新的表,并使用它们的列在 R 中进行回归分析。 我通过使用 listagg 功能和 concat 操作来完成这项工作。然后将输出写入 R 中的数据框。该数据框将有“n”个选择查询作为不同的行。 以下是格式:
df <- as.data.frame(tbl(conn,sql("select 'select ' || col_names|| ' from ' || table_name as q1 from ( select distinct table_name, listagg(col_name,',') within group (order by col_name)
over (partition by table_name) as col_names
from attribute_config
where active = 'Y'
order by table_name )
group by 1")))
完成后,我将此数据帧的每一行分配给一个新数据帧,并使用以下方法获取输出:
df1
我知道这是一个关于解决方案的回合。但它有效!在 1 秒内获取大约 1700 万条记录。
【讨论】:
以上是关于Redshift 加入元数据表并选择列的主要内容,如果未能解决你的问题,请参考以下文章