Redshift与元数据表连接并选择列

时间:2018-05-09 08:14:54

标签: r dplyr pivot amazon-redshift

我已经使用table_name,col_name和data_type创建了pg_table_def表的子集。我还添加了一个活跃的列,其中包括' Y'作为某些行的值。我们将此表称为config.Table配置如下所示:

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做同样的事情。

1 个答案:

答案 0 :(得分:0)

我知道动态查询不适用于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&lt; - tbl(conn,sql(df [1,]))

我知道这是关于解决方案的一轮。但它的确有效!!在1秒内获得大约17M的记录。