In Pl/Python「RETURNS setof」または「RETURNS table」節は、構造化データのような表を返すために使用されます。テーブルを返すためには、各列の名前を指定する必要があります。あなたがいくつかの列を持つテーブルを持っているなら、それは簡単なことです。しかし、200列のテーブルがある場合は、それを行うための最善の方法は何ですか?すべての列の名前を入力する必要がありますか(下図参照)、それを回避する方法がありますか?どんな助けでも大歓迎です。PL/PythonとpostgreSQL:多くのカラムのテーブルを返す最良の方法は何ですか?
以下は、「RETURNSテーブル」句を使用する例です。コードスニペットは、ポストグルにテーブル(mysales)を作成し、ポピュレートしてからPl/Pythonを使ってフェッチし、カラム値を返します。簡単にするために、私はテーブルから4列分だけ戻しています。
DROP TABLE IF EXISTS mysales;
CREATE TABLE mysales (id int, year int, qtr int, day int, region
text) DISTRIBUTED BY (id);
INSERT INTO mysales VALUES
(1, 2014, 1,1, 'north america'),
(2, 2002, 2,2, 'europe'),
(3, 2014, 3,3, 'asia'),
(4, 2010, 4,4, 'north-america'),
(5, 2014, 1,5, 'europe'),
(6, 2009, 2,6, 'asia'),
(7, 2002, 3,7, 'south america');
DROP FUNCTION IF EXISTS myFunc02();
CREATE OR REPLACE FUNCTION myFunc02()
RETURNS TABLE (id integer, x integer, y integer, s text) AS
$$
rv = plpy.execute("SELECT * FROM mysales ORDER BY id", 5)
d = rv.nrows()
return ((rv[i]['id'],rv[i]['year'], rv[i]['qtr'], rv[i]['region'])
for i in range(0,d))
$$ LANGUAGE 'plpythonu';
SELECT * FROM myFunc02();
#Here is the output of the SELECT statement:
1; 2014; 1;"north america"
2; 2002; 2;"europe"
3; 2014; 3;"asia"
4; 2010; 4;"north-america"
5; 2014; 1;"europe"
6; 2009; 2;"asia"
7; 2002; 3;"south america"
'DISTRIBUTED BY'のみGreenplumはある:返し
。 –
正しい。ありがとうございました。 – userDataScience