

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 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/)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# OBJECT\$1TRANSFORM 函數
<a name="r_object_transform_function"></a>

變換 SUPER 物件。

## 語法
<a name="r_object_transform_function-synopsis"></a>

```
OBJECT_TRANSFORM(
  input
  [KEEP path1, ...]
  [SET
    path1, value1,
    ...,  ...
  ]
)
```

## 引數
<a name="r_object_transform_function-arguments"></a>

*input*  
解析為 SUPER 類型物件的表達式。

*KEEP*  
在這個子句中指定的所有*路徑*值都會保留，並轉移到輸出物件。  
此子句是選用的。

*path1*、*path2*...  
常數字串常值，採用以句點分隔的雙引號路徑元件的格式。例如，`'"a"."b"."c"'` 是有效的路徑值。這適用於 KEEP 和 SET 子句中的路徑參數。

*SET*  
*path* 和 *value* 配對可修改現有路徑或新增路徑，並在輸出物件中設定該路徑的值。  
此子句是選用的。

*value1*、*value2*...  
解析為 SUPER 類型值的表達式。請注意，數字、文字和布林值類型可以解析為 SUPER。

## 傳回類型
<a name="r_object_transform_function-returns"></a>

`SUPER`

## 使用須知
<a name="r_object_transform_function-usage-notes"></a>

OBJECT\$1TRANSFORM 會傳回 SUPER 類型物件，其中包含來自 KEEP 中指定的 *input*路徑值，以及 SET 中指定的 *path* 和 *value* 對。

如果 KEEP 和 SET 都是空的，OBJECT\$1TRANSFORM 會傳回 *input*。

如果 *input* 不是 SUPER 類型 *object*，則 OBJECT\$1TRANSFORM 會傳回 *input*，而不管任何 KEEP 或 SET 值。

## 範例
<a name="r_object_transform_function-example"></a>

下列範例會將 SUPER 物件轉換成另一個 SUPER 物件。

```
CREATE TABLE employees (
    col_person SUPER
);

INSERT INTO employees
VALUES
    (
        json_parse('
            {
                "name": {
                    "first": "John",
                    "last": "Doe"
                },
                "age": 25,
                "ssn": "111-22-3333",
                "company": "Company Inc.",
                "country": "U.S."
            }
        ')
    ),
    (
        json_parse('
            {
                "name": {
                    "first": "Jane",
                    "last": "Appleseed"
                },
                "age": 34,
                "ssn": "444-55-7777",
                "company": "Organization Org.",
                "country": "Ukraine"
            }
        ')
    )
;

SELECT
    OBJECT_TRANSFORM(
        col_person
        KEEP
            '"name"."first"',
            '"age"',
            '"company"',
            '"country"'
        SET
            '"name"."first"', UPPER(col_person.name.first::TEXT),
            '"age"', col_person.age + 5,
            '"company"', 'Amazon'
    ) AS col_person_transformed
FROM employees;
    
--This result is formatted for ease of reading.
                  col_person_transformed
-------------------------------------------------------------
{
    "name": {
        "first": "JOHN"
    },
    "age": 30,
    "company": "Amazon",
    "country": "U.S."
}
{
    "name": {
        "first": "JANE"
    },
    "age": 39,
    "company": "Amazon",
    "country": "Ukraine"
}
```