Funzioni SQL supportate sul nodo principale - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Funzioni SQL supportate sul nodo principale

Alcune query di Amazon Redshift vengono distribuite ed eseguite sui nodi di calcolo mentre altre vengono eseguite esclusivamente sul nodo principale.

Il nodo principale distribuisce SQL ai nodi di calcolo ogni volta che una query fa riferimento a tabelle create dall'utente o a tabelle di sistema (tabelle con prefisso STL o STV e visualizzazioni di sistema con un prefisso SVL o SVV). Una query che fa riferimento solo a tabelle di catalogo (tabelle con un prefisso PG, ad esempio PG_TABLE_DEF, che risiedono solo sul nodo principale) o che non fa riferimento ad alcuna tabella viene eseguita soltanto sul nodo principale.

Alcune funzioni SQL di Amazon Redshift sono supportate solo sul nodo principale e non sui nodi di calcolo. Una query che utilizza una funzione del nodo principale deve essere eseguita esclusivamente sul nodo principale e non sui nodi di calcolo, altrimenti verrà restituito un errore.

La documentazione per ciascuna funzione che deve essere eseguita esclusivamente sul nodo principale comprende una nota che indica che la funzione restituirà un errore nel caso in cui faccia riferimento a tabelle definite dall'utente o a tabelle di sistema di Amazon Redshift. consultare Nodo principale: solo funzioni per un elenco delle funzioni eseguite esclusivamente sul nodo principale.

Esempi

CURRENT_SCHEMA

La funzione CURRENT_SCHEMA è una funzione esclusivamente per il nodo principale. In questo esempio, la query non fa riferimento a una tabella, pertanto è in esecuzione solo sul nodo principale.

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

Nell'esempio successivo, la query fa riferimento a una tabella di catalogo di sistema, pertanto è in esecuzione solo sul nodo principale.

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

Nell'esempio successivo, la query fa riferimento a una tabella di sistema di Amazon Redshift che si trova sui nodi di calcolo, quindi restituisce un errore.

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 è anche una funzione solo per nodo principale. Nell'esempio seguente la query viene eseguita in modo esclusivo sul nodo principale perché non fa riferimento a una tabella.

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

Nell'esempio seguente, la query fa riferimento a una tabella che si trova nei nodi di calcolo. Ciò comporta la generazione di un errore.

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

Per eseguire correttamente la query precedente, utilizza SUBSTRING.

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

FATTORIALE ()

FACTORIAL () è una funzione solo per il nodo leader. Nell'esempio seguente la query viene eseguita in modo esclusivo sul nodo principale perché non fa riferimento a una tabella.

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

Nell'esempio seguente, la query fa riferimento a una tabella che si trova nei nodi di calcolo. Ciò comporta un errore quando viene eseguito utilizzando l'editor di query 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.