リーダーノードでサポートされる SQL 関数 - Amazon Redshift

リーダーノードでサポートされる SQL 関数

一部のAmazon Redshift クエリはコンピューティングノードに配布され実行されます。ほかのクエリはリーダーノードのみで実行されます。

ユーザーによって作成されたテーブルまたはシステムテーブル (STL または STV プレフィックスが付いたテーブル、SVL または SVV プレフィックスが付いたシステムビュー) をクエリが参照するたびに、リーダーノードは SQL をコンピューティングノードに配布します。リーダーノード上の PG プレフィックス付きカタログ テーブル (PG_TABLE_DEF など) のみを参照するクエリや、いずれのテーブルも参照しないクエリは、リーダーノード上で排他的に実行されます。

Amazon Redshift SQL 関数の中にはリーダーノードのみでサポートされ、コンピューティングノードではサポートされないものがあります。リーダーノード専用関数を使用するクエリは、コンピューティングノードではなくリーダーノードのみで実行される必要があり、そうでなければエラーが返されます。

リーダーノードで排他的に実行されるべき関数がユーザー定義テーブルまたは Amazon Redshift システムテーブルを参照した場合、ドキュメントにメモとして説明されているとおり、エラーが返されます。リーダーノードで排他的に実行される関数については、「リーダーノード専用関数」を参照してください。

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.