Fonctions SQL prises en charge sur le nœud principal - Amazon Redshift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Fonctions SQL prises en charge sur le nœud principal

Certaines requêtes Amazon Redshift sont distribuées et exécutées sur les nœuds de calcul, et d’autres requêtes s’exécutent exclusivement sur le nœud principal.

Le nœud principal répartit SQL sur les nœuds de calcul chaque fois qu’une requête fait référence à des tables créées par l’utilisateur ou à des tables système (tables avec le préfixe STL ou STV, et vues système avec le préfixe SVL ou SVV). Une requête qui ne fait référence qu’aux tables catalogue (tables avec le préfixe PG, comme PG_TABLE_DEF, résidant sur le nœud principal) ou qui ne fait référence à aucune table, s’exécute exclusivement sur le nœud principal.

Certaines fonctions SQL d’Amazon Redshift sont prises en charge uniquement sur le nœud principal et ne le sont pas sur les nœuds de calcul. Une requête qui utilise une fonction de nœud principal doit être exécutée exclusivement sur celui-ci, et non sur les nœuds de calcul, sinon elle renverra une erreur.

La documentation de chaque fonction qui doit s’exécuter exclusivement sur le nœud principal comprend une note indiquant que la fonction renverra une erreur si elle fait référence à des tables définies par l’utilisateur ou à des tables du système Amazon Redshift. Consultez Fonctions exécutées uniquement sur le nœud principal pour obtenir la liste des fonctions qui s’exécutent exclusivement sur le nœud principal.

Exemples

CURRENT_SCHEMA

La fonction CURRENT_SCHEMA est une fonction de nœud principal uniquement. Dans cet exemple, comme la requête ne fait pas référence à une table, la fonction s’exécute exclusivement sur le nœud principal.

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

Dans l’exemple suivant, comme la requête fait référence à une table catalogue système, la fonction s’exécute exclusivement sur le nœud principal.

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

Dans l’exemple suivant, la requête fait référence à une table système Amazon Redshift qui réside sur les nœuds de calcul, et renvoie donc une erreur.

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 est également une fonction réservée aux nœuds principaux. Dans l’exemple suivant, la requête s’exécute exclusivement sur le nœud principal, car elle ne fait pas référence à une table.

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

Dans l’exemple suivant, la requête fait référence à une table qui réside sur les nœuds de calcul. Cela entraîne une erreur.

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

Pour exécuter correctement la requête précédente, utilisez SUBSTRING.

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

FACTORIEL ()

FACTORIAL () est une fonction réservée aux nœuds leaders. Dans l’exemple suivant, la requête s’exécute exclusivement sur le nœud principal, car elle ne fait pas référence à une table.

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

Dans l’exemple suivant, la requête fait référence à une table qui réside sur les nœuds de calcul. Cela entraîne une erreur lors de l'exécution à l'aide de l'éditeur de requêtes 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.