Aws
Redshift Spectrum CTE 聯盟
我有一個使用 Spectrum 表的 CTE 查詢。當我嘗試將 CTE 與自身結合時:
WITH foo AS ( SELECT col1 FROM spectrum.bar ) SELECT * FROM foo UNION ALL SELECT * FROM foo;
我收到以下錯誤:
[XX000][500310] [Amazon](500310) Invalid operation: Relation "spectrum_foo_58abe8db83a3e" already exists Details: ----------------------------------------------- error: Relation "spectrum_foo_58abe8db83a3e" already exists code: 13 ..
這是一個已知問題和/或有什麼方法可以解決它(不涉及為每個聯合粘貼原始查詢)?
如果這對某人有幫助,作為一種解決方法,我創建了一個視圖而不是使用 CTE。
CREATE VIEW foo_view AS SELECT col1 FROM spectrum.bar with no schema binding; SELECT * FROM foo_view UNION ALL SELECT * FROM foo_view;
如果您想避免創建視圖並使查詢中的所有內容都可以處理,另一種解決方法是從同一源創建多個公用表表達式並將其合併。
WITH foo1 AS ( SELECT col1 FROM spectrum.bar ), foo2 AS ( select col1 from spectrum.bar) SELECT * FROM foo1 UNION ALL SELECT * FROM foo2;