Funciones SQL admitidas en el nodo principal
Algunas consultas de Amazon Redshift se distribuyen y ejecutan en los nodos de computación, y otras se ejecutan exclusivamente en el nodo principal.
El nodo principal distribuye SQL a los nodos de computación cuando una consulta utiliza como referencia tablas de sistemas o tablas creadas por el usuario (tablas con un prefijo STL o STV y vistas de sistema con un prefijo SVL o SVV). Una consulta que utiliza como referencia solamente tablas de catálogos (tablas con un prefijo PG, como por ejemplo PG_TABLE_DEF, que reside en el nodo principal) o que no utiliza ninguna tabla se ejecuta únicamente en el nodo principal.
Algunas funciones SQL de Amazon Redshift solo se admiten en el nodo principal, y no en los nodos informáticos. Una consulta que utiliza una función del nodo principal debe ejecutarse exclusivamente en ese nodo, no en los nodos informáticos, ya que se produciría un error.
En la documentación de cada función que debe ejecutarse exclusivamente en el nodo principal, se incluye una nota en la que se indica que la función producirá un error si utiliza como referencia tablas definidas por el usuario o tablas de sistema de Amazon Redshift. Consulte Funciones específicas del nodo principal para ver una lista de las funciones que se ejecutan exclusivamente en el nodo principal.
Ejemplos
En los siguientes ejemplos se utiliza la base de datos de TICKIT de ejemplo. Para obtener más información acerca de las bases de datos de ejemplo, vaya a Base de datos de muestra.
CURRENT_SCHEMA
La función CURRENT_SCHEMA es una función específica de nodo principal. En este ejemplo, la consulta no hace referencia a una tabla, por lo que se ejecuta exclusivamente en el nodo principal.
select current_schema();
current_schema --------------- public
En el siguiente ejemplo, la consulta hace referencia a una tabla de catálogo del sistema, por lo que se ejecuta exclusivamente en el nodo 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
En el siguiente ejemplo, la consulta referencia una tabla de sistema de Amazon Redshift que se encuentra en los nodos informáticos, por lo que devuelve un error.
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 también es una función exclusiva para el nodo principal. En este ejemplo, la consulta no hace referencia a una tabla, por lo que se ejecuta exclusivamente en el nodo principal.
SELECT SUBSTR('amazon', 5);
+--------+ | substr | +--------+ | on | +--------+
En el siguiente ejemplo, la consulta hace referencia a una tabla que se encuentra en los nodos de computación. Esto generará un error.
SELECT SUBSTR(catdesc, 1) FROM category LIMIT 1;
ERROR: SUBSTR() function is not supported (Hint: use SUBSTRING instead)
Para ejecutar correctamente la consulta anterior, utilice SUBSTRING.
SELECT SUBSTRING(catdesc, 1) FROM category LIMIT 1;
+---------------------------------+ | substring | +---------------------------------+ | National Basketball Association | +---------------------------------+
FACTORIAL()
FACTORIAL () es una función exclusiva para el nodo principal. En este ejemplo, la consulta no hace referencia a una tabla, por lo que se ejecuta exclusivamente en el nodo principal.
SELECT FACTORIAL(5);
factorial ------------- 120
En el siguiente ejemplo, la consulta hace referencia a una tabla que se encuentra en los nodos de computación. Esto provoca un error cuando se ejecuta mediante el 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.