2017-10-16 22 views
4

Redshiftのgenerate_series関数は、単純なselect文で使用されている場合、期待通りに動作します。は、Redshiftのgenerate_seriesでJOINを使用できません

WITH series AS (
    SELECT n as id from generate_series (-10, 0, 1) n 
) SELECT * FROM series; 
-- Works fine 

はできるだけ早く私は、結合条件を追加すると、赤方偏移は

com.amazon.support.exceptions.ErrorExceptionスロー:機能 generate_series(整数、整数、整数) "をサポートしていない"

DROP TABLE testing; 
CREATE TABLE testing (
    id INT 
); 
WITH series AS (
    SELECT n as id from generate_series (-10, 0, 1) n 
) SELECT * FROM series S JOIN testing T ON S.id = T.id; 
-- Function "generate_series(integer,integer,integer)" not supported. 

赤方偏移バージョン

SELECT version(); 
-- PostgreSQL 8.0.2 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.4.2 20041017 (Red Hat 3.4.2-6.fc3), Redshift 1.0.1485 

この問題を回避する方法はありますか?

答えて

2

これはRedshiftでは正しく動作しないということは間違いありません。 hereを参照してください。

最も簡単な回避策は、そのテーブル内の値で事前に "手動で"永久テーブルを作成することです。あなたは

だからあなたの例のためにあなたは

WITH series AS (
    SELECT n as id from (select num as n from newtable where num between -10 and 0) n 
) SELECT * FROM series S JOIN testing T ON S.id = T.id; 

のようなものを持っているでしょう、そして、千に-1000のためのそのテーブルの行を持つ表の範囲を選択することができていあなたのためにその仕事?あなたが事前にテーブルを作成するかどうかを好むことができない場合

あるいは、あなたは赤方偏移によってサポートされていないこの

with ten_numbers as (select 1 as num union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9 union select 0) 
,generted_numbers AS 
(
    SELECT (1000*t1.num) + (100*t2.num) + (10*t3.num) + t4.num-5000 as gen_num 
    FROM ten_numbers AS t1 
     JOIN ten_numbers AS t2 ON 1 = 1 
     JOIN ten_numbers AS t3 ON 1 = 1 
     JOIN ten_numbers AS t4 ON 1 = 1 
) 
select gen_num from generted_numbers 
where gen_num between -10 and 0 
order by 1; 
1

generate_seriesようなものを使用することができます。これはリーダーノードでスタンドアロンでのみ機能します。すでに

with 
series as (
    select (row_number() over())-11 from some_table limit 10 
) ... 

また、この質問を頼まれた複数回

この問題を回避するには、行の十分な数を持つ任意のテーブルに対してrow_numberを使用することになり

関連する問題