Funções SQL compatíveis no nó de liderança
Algumas consultas do Amazon Redshift são distribuídas e executadas em nós de computação, e outras consultas são executadas exclusivamente no nó líder.
O nó de liderança distribui a SQL aos nós de computação sempre que uma consulta se refere a tabelas criadas pelo usuário ou tabelas de sistema (tabelas com um prefixo STL ou STV e exibições de sistema com um prefixo SVL ou SVV). Uma consulta que se refere apenas a tabelas do catálogo (tabelas com um prefixo PG, tal como PG_TABLE_DEF, que reside no nó de liderança) ou que não se refere a qualquer tabela é executada exclusivamente no nó de liderança.
Algumas funções do Amazon Redshift SQL são suportadas apenas no nó líder e não são suportadas nos nós de computação. Uma consulta que usa uma função de nó líder deve ser executada exclusivamente no nó líder, não nos nós de computação, ou retornará um erro.
A documentação de cada função que deve ser executada exclusivamente no nó líder inclui uma nota informando que a função retornará um erro se fizer referência a tabelas definidas pelo usuário ou tabelas do sistema Amazon Redshift. Consulte Função de apenas nó líder para obter uma lista de funções executadas exclusivamente no nó de liderança.
Exemplos
Os exemplos a seguir usam o banco de dados TICKIT para elucidação. Para ter mais informações sobre o banco de dados de exemplo, acesse Banco de dados de exemplo.
CURRENT_SCHEMA
A função CURRENT_SCHEMA é uma função apenas do nó de liderança. Neste exemplo, a consulta não faz referência a uma tabela, portanto ela é executada exclusivamente no nó de liderança.
select current_schema();
current_schema --------------- public
No próximo exemplo, a consulta faz referência a uma tabela de catálogo do sistema, portanto ela é executada exclusivamente no nó de liderança.
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
No próximo exemplo, a consulta faz referência a uma tabela do sistema Amazon Redshift que reside nos nós de computação, portanto, ela retorna um erro.
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 também é uma função exclusiva do nó líder. No exemplo a seguir, a consulta é exclusiva no nó líder porque não referencia uma tabela.
SELECT SUBSTR('amazon', 5);
+--------+ | substr | +--------+ | on | +--------+
No exemplo a seguir, a consulta referencia uma tabela residente nos nós de computação. Isso resulta em um erro.
SELECT SUBSTR(catdesc, 1) FROM category LIMIT 1;
ERROR: SUBSTR() function is not supported (Hint: use SUBSTRING instead)
Para executar com êxito a consulta anterior, use SUBSTRING.
SELECT SUBSTRING(catdesc, 1) FROM category LIMIT 1;
+---------------------------------+ | substring | +---------------------------------+ | National Basketball Association | +---------------------------------+
FACTORIAL()
FACTORIAL() é uma função exclusiva do nó líder. No exemplo a seguir, a consulta é exclusiva no nó líder porque não referencia uma tabela.
SELECT FACTORIAL(5);
factorial ------------- 120
No exemplo a seguir, a consulta referencia uma tabela residente nos nós de computação. Isso resulta em um erro quando se utiliza o editor de consultas 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.