

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# リーダーノードでサポートされる SQL 関数
<a name="c_sql-functions-leader-node"></a>

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

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

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

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

## 例
<a name="c_sql-functions-leader-node-examples"></a>

次の例では、TICKIT のサンプルデータベースを使用します。サンプルデータベースの詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

**CURRENT\$1SCHEMA**

CURRENT\$1SCHEMA 関数は、リーダーノード専用の関数です。この例では、クエリはテーブルを参照しないのでリーダーノードで排他的に実行されます。

```
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](https://docs.aws.amazon.com/redshift/latest/dg/r_SUBSTRING.html) を使用してください。

```
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.
```