리더 노드에서 지원되는 SQL 함수 - Amazon Redshift

리더 노드에서 지원되는 SQL 함수

일부 Amazon Redshift 쿼리는 분산을 통해 컴퓨팅 노드에서 실행되는 반면 리더 노드에서만 실행되는 쿼리도 있습니다.

리더 노드는 쿼리가 사용자 생성 테이블 또는 시스템 테이블(STL 또는 STV 접두사가 첨부된 테이블과 SVL 또는 SVV 접두사가 첨부된 시스템 뷰)을 참조할 때마다 SQL을 컴퓨팅 노드로 분산시킵니다. 카탈로그 테이블(PG_TABLE_DEF처럼 PG 접두사가 첨부되어 리더 노드에 저장되는 테이블)만 참조하거나 어떤 테이블도 참조하지 않는 쿼리는 리더 노드에서만 실행됩니다.

일부 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.