Aws

Redshift Spectrum CTE 聯盟

  • February 24, 2021

我有一個使用 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;

引用自:https://dba.stackexchange.com/questions/240079