Amazon Redshiftの文字列フィールドに格納された動的SQLクエリを実行したいとします。Redshift:文字列から動的クエリを実行する
私の背景は、主に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コードを作成する別の方法はありますか?
ご回答いただきありがとうございます。 "あなたは、実行の前にデータベースの外部にステートメントを作成しなければなりません"と言います。私は文を渡すことができますが、($変数を除いて)ほとんどハードコーディングされています。私はいくつかのSQLクエリを含む列を持つテーブルがあるとします。これらのクエリを 'EXECUTE'コマンドに渡すことは可能でしょうか? – anahnarciso
はい、可能ですが、まずそれらを「準備する」必要があります。 – BigDataKid
しかし、私はまだそれがどうなるかは分かりません。選択クエリを含むvarchar列 "query"を持つテーブルAを考えてみましょう。 これは 'prepare'ステートメントの例ですが、あまりにもハードコードされているようです。 'PREPARE prep_select_plan(int) AS select * from prep1 where c1 = $ 1;' 別のテーブルのvarcharフィールドに含まれているクエリをどのように参照しますか? – anahnarciso