gpt4 book ai didi

sql - Redshift : Executing a dynamic query from a string

转载 作者:行者123 更新时间:2023-12-04 08:04:38 26 4
gpt4 key购买 nike

我想执行存储在Amazon Redshift上的字符串字段中的动态SQL查询。

我的背景主要是T-SQL关系数据库。我曾经动态地构建SQL语句,将它们存储到变量中并执行它们。我知道Redshift可以准备和执行语句,但是我想知道是否可以执行存储在字符串字段中的查询。

我有一段代码可以使用pg_ *系统表在多个表上使用统计信息动态构建以下代码。每个列/表名都是动态计算的。这是查询输出的示例:

SELECT h_article_id AS key, 'transport_parameters_weight_in_grams' AS col_name, COUNT(DISTINCT transport_parameters_weight_in_grams) AS count_value FROM dv.s_products GROUP BY h_article_id UNION ALL
SELECT h_article_id AS key, 'transport_parameters_width_in_mm' AS col_name, COUNT(DISTINCT transport_parameters_width_in_mm) AS count_value FROM dv.s_products GROUP BY h_article_id UNION ALL
SELECT h_article_id AS key, 'label_owner_info_communication_address' AS col_name, COUNT(DISTINCT label_owner_info_communication_address) AS count_value FROM dv.s_products GROUP BY h_article_id

我想在另一个查询中输入此动态代码,因此可以进行一些统计,如下所示:

SELECT col_name, AVG(count_value*1.00) AS avg_count
FROM (
'QUERY ABOVE'
) A
GROUP BY col_name;

这将输出如下内容:
col_name                                avg_count
transport_parameters_weight_in_grams 1.00
transport_parameters_width_in_mm 1.00
label_owner_info_communication_address 0.60

对我而言,自然的方法是将所有内容都存储为字符串并存储在变量中并执行它。但是,恐怕Redshift不支持此功能。

是否有其他方法可以真正构建动态SQL代码?

最佳答案

现在,我们已经添加了对存储过程的支持,这是可能的。 "Overview of Stored Procedures in Amazon Redshift"

例如,此存储过程对一个表中的行进行计数,并将表名和行数插入另一个表中。两个表名均作为输入提供。

CREATE PROCEDURE get_tbl_count(IN source_tbl VARCHAR, IN count_tbl VARCHAR) AS $$
BEGIN
EXECUTE 'INSERT INTO ' || quote_ident(count_tbl)
|| ' SELECT ''' || source_tbl ||''', COUNT(*) FROM '
|| quote_ident(source_tbl) || ';'
RETURN;
END;
$$ LANGUAGE plpgsql;

在您的示例中,要执行的查询可以作为字符串传递。

关于sql - Redshift : Executing a dynamic query from a string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39332772/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com