SQL引線節點上支援的函數 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

SQL引線節點上支援的函數

某些 Amazon Redshift 查詢會分配到運算節點上執行,其他的查詢則是只在領導節點上執行。

每當查詢參照使用者建立的資料表或系統資料表 (具有或前置字元的資料表以及帶有或前置字元的系統檢視) 時,STV前置節點就會散佈SQL至計算節點。STL SVL SVV僅參考目錄表格 (具有 PG 字首的表格,例如位於引線節點上的 PG TABLE _DEF) 或未參考任何資料表的查詢,只會在引線節點上執行。

某些 Amazon Redshift SQL 功能僅在領導節點上受支援,運算節點不受支援。使用領導者節點函數的查詢必須完全在領導者節點上執行,而不是在運算節點上,否則會傳回錯誤。

必須只在領導節點上執行的每個函數,其文件包含備註,說明如果函數參考使用者定義的資料表或 Amazon Redshift 系統資料表,將會傳回錯誤。關於只在領導節點上執行的功能,如需功能清單,請參閱 僅限領導節點函數

範例

下列範例使用範例TICKIT資料庫。如需範例資料庫的詳細資訊,請移至範本資料庫

CURRENT_SCHEMA

該 CURRENT _ SCHEMA 函數是一個領導者節點的唯一功能。在此範例中,查詢並未參考資料表,因此只會在領導節點上執行。

select current_schema(); current_schema --------------- public

在下一個範例中,查詢參考了系統目錄資料表,因此只會在領導節點上執行。

select * from pg_table_def where schemaname = current_schema() limit 1; schemaname | tablename | column | type | encoding | distkey | sortkey | notnull ------------+-----------+--------+----------+----------+---------+---------+--------- public | category | catid | smallint | none | t | 1 | t

在下一個範例中,查詢參考了位於運算節點上的 Amazon Redshift 系統資料表,因此會傳回錯誤。

select current_schema(), userid from users; INFO: Function "current_schema()" not supported. ERROR: Specified types or functions (one per INFO message) not supported on Amazon Redshift tables.

SUBSTR

SUBSTR也是僅限領導者節點的功能。在以下範例中,因查詢未參考資料表,所以只會在領導節點上執行。

SELECT SUBSTR('amazon', 5); +--------+ | substr | +--------+ | on | +--------+

在下列範例中,查詢會參照位於運算節點上的資料表。這會導致錯誤。

SELECT SUBSTR(catdesc, 1) FROM category LIMIT 1; ERROR: SUBSTR() function is not supported (Hint: use SUBSTRING instead)

若要成功執行先前的查詢,請使用SUBSTRING

SELECT SUBSTRING(catdesc, 1) FROM category LIMIT 1; +---------------------------------+ | substring | +---------------------------------+ | National Basketball Association | +---------------------------------+

FACTORIAL()

FACTORIAL()是僅限領導者節點的函數。在以下範例中,因查詢未參考資料表,所以只會在領導節點上執行。

SELECT FACTORIAL(5); factorial ------------- 120

在下列範例中,查詢會參照位於運算節點上的資料表。使用查詢編輯器 v2 執行時,會導致錯誤。

create table t(a int); insert into t values (5); select factorial(a) from t; ERROR: Specified types or functions (one per INFO message) not supported on Redshift tables. Info: Function "factorial(bigint)" not supported.