

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 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/)。

# Python UDF 数据类型
<a name="udf-data-types"></a>

Python UDF 可将任何标准 Amazon Redshift 数据类型用于输入参数和函数的返回值。除标准数据类型外，UDF 还支持数据类型 *ANYELEMENT*，Amazon Redshift 会根据运行时提供的参数自动将该数据类型转换为标准数据类型。标量 UDF 可返回数据类型 ANYELEMENT。有关更多信息，请参阅 [ANYELEMENT 数据类型](#udf-anyelement-data-type)。

在执行期间，Amazon Redshift 会将参数从 Amazon Redshift 数据类型转换为 Python 数据类型以进行处理。然后，它会将返回值从 Python 数据类型转换为相应的 Amazon Redshift 数据类型。有关 Amazon Redshift 数据类型的更多信息，请参阅[数据类型](c_Supported_data_types.md)。

下表会将 Amazon Redshift 数据类型映射到 Python 数据类型。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/dg/udf-data-types.html)

## ANYELEMENT 数据类型
<a name="udf-anyelement-data-type"></a>

ANYELEMENT 是一种*多态数据类型*。这意味着，如果使用 ANYELEMENT 为参数的数据类型声明一个函数，则在调用该函数时，该函数可接受任何标准 Amazon Redshift 数据类型作为该参数的输入。ANYELEMENT 参数应设置为调用该函数时实际传递给该参数的数据类型。

如果某个函数使用多个 ANYELEMENT 数据类型，那么在调用该函数时，必须将这些数据类型全部解析为相同的实际数据类型。所有 ANYELEMENT 参数数据类型应设置为传递给 ANYELEMENT 的第一个参数的实际数据类型。例如，声明为 `f_equal(anyelement, anyelement)` 的函数将采用任意两个输入值，只要它们属于相同的数据类型。

如果某个函数的返回值声明为 ANYELEMENT，则至少一个输入参数必须是 ANYELEMENT。该返回值的实际数据类型与为 ANYELEMENT 输入参数提供的实际数据类型相同。