

 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/)을 참조하세요.

# 객체 함수
<a name="Object_Functions"></a>

다음은 Amazon Redshift에서 SUPER 유형 객체를 생성하고 조작하기 위해 지원하는 SQL 객체 함수입니다.

**Topics**
+ [GET\$1NUMBER\$1ATTRIBUTES 함수](get_number_attributes.md)
+ [LOWER\$1ATTRIBUTE\$1NAMES 함수](r_lower_attribute_names.md)
+ [OBJECT 함수](r_object_function.md)
+ [OBJECT\$1TRANSFORM 함수](r_object_transform_function.md)
+ [UPPER\$1ATTRIBUTE\$1NAMES 함수](r_upper_attribute_names.md)

# GET\$1NUMBER\$1ATTRIBUTES 함수
<a name="get_number_attributes"></a>

딕셔너리 객체의 루트 수준에 존재하는 키-값 페어 수를 반환합니다.

## 구문
<a name="get_number_attributes-syntax"></a>

```
GET_NUMBER_ATTRIBUTES( super_expression )
```

## 인수
<a name="get_number_attributes-arguments"></a>

 *super\$1expression*   
사전 형식의 SUPER 표현식입니다.

## 반환 타입
<a name="get_number_attributes-return-type"></a>

GET\$1NUMBER\$1ATTRIBUTES 함수는 INT 유형을 반환합니다.

## Note
<a name="get_number_attributes-note"></a>

이 함수는 직접 속성만 계산하며 중첩된 사전 내에 페어를 포함하지 않습니다.

## 예제
<a name="get_number_attributes-example"></a>

다음 예제에서는 GET\$1NUMBER\$1ATTRIBUTES 함수를 보여 줍니다.

```
SELECT GET_NUMBER_ATTRIBUTES(JSON_PARSE('{"a": 1, "b": 2, "c": 3}'));
 get_number_attributes
-----------------------
            3
(1 row)
```

GET\$1NUMBER\$1ATTRIBUTES 함수는 사전의 첫 번째 수준에서만 작동합니다.

```
SELECT GET_NUMBER_ATTRIBUTES(JSON_PARSE('{"a": 1, "b": {"c": 3}}'));
 get_number_attributes
-----------------------
            2
(1 row)
```

# LOWER\$1ATTRIBUTE\$1NAMES 함수
<a name="r_lower_attribute_names"></a>

[LOWER 함수](r_LOWER.md)와 같은 대소문자 변환 루틴을 사용하여 SUPER 값의 모든 해당 속성 이름을 소문자로 변환합니다. LOWER\$1ATTRIBUTE\$1NAMES는 UTF-8 멀티바이트 문자를 지원하여 문자당 최대 4바이트까지 가능합니다.

 SUPER 속성 이름을 대문자로 변환하려면 [UPPER\$1ATTRIBUTE\$1NAMES 함수](r_upper_attribute_names.md)를 사용합니다.

## 구문
<a name="r_lower_attribute_names-synopsis"></a>

```
LOWER_ATTRIBUTE_NAMES( super_expression )
```

## 인수
<a name="r_lower_attribute_names-arguments"></a>

*super\$1expression*  
SUPER 표현식입니다.

## 반환 타입
<a name="r_lower_attribute_names-return-type"></a>

`SUPER`

## 사용 노트
<a name="r_lower_attribute_names-usage-notes"></a>

Amazon Redshift에서 열 식별자는 일반적으로 대소문자를 구분하지 않고 소문자로 변환됩니다. JSON과 같이 대소문자를 구분하는 데이터 형식의 데이터를 수집하는 경우 데이터에 대소문자가 혼합된 속성 이름이 포함될 수 있습니다.

다음 예제를 살펴보세요.

```
CREATE TABLE t1 (s) AS SELECT JSON_PARSE('{"AttributeName": "Value"}');


SELECT s.AttributeName FROM t1;  

attributename
-------------
NULL


SELECT s."AttributeName" FROM t1;

attributename
-------------
NULL
```

Amazon Redshift는 두 쿼리 모두에 대해 NULL을 반환합니다. `AttributeName`을 쿼리하려면 LOWER\$1ATTRIBUTE\$1NAMES를 사용하여 데이터의 속성 이름을 소문자로 변환합니다. 다음 예제를 살펴보세요.

```
CREATE TABLE t2 (s) AS SELECT LOWER_ATTRIBUTE_NAMES(s) FROM t1;


SELECT s.attributename FROM t2;

attributename
-------------
"Value"


SELECT s.AttributeName FROM t2; 

attributename
-------------
"Value"


SELECT s."attributename" FROM t2;

attributename
-------------
"Value"


SELECT s."AttributeName" FROM t2;

attributename
-------------
"Value"
```

대소문자가 혼합된 객체 속성 이름을 사용하기 위한 관련 옵션은 Amazon Redshift가 SUPER 속성 이름의 대소문자를 인식할 수 있도록 하는 `enable_case_sensitive_super_attribute` 구성 옵션입니다. LOWER\$1ATTRIBUTE\$1NAMES 대신 이 옵션을 사용할 수 있습니다. `enable_case_sensitive_super_attribute`에 대한 자세한 내용은 [enable\$1case\$1sensitive\$1super\$1attribute](r_enable_case_sensitive_super_attribute.md) 섹션을 참조하세요.

## 예제
<a name="r_lower_attribute_names_examples"></a>

**SUPER 속성 이름을 소문자로 변환**  
다음 예제에서는 LOWER\$1ATTRIBUTE\$1NAMES를 사용하여 테이블에 있는 모든 SUPER 값의 속성 이름을 변환합니다.

```
-- Create a table and insert several SUPER values.
CREATE TABLE t (i INT, s SUPER);

INSERT INTO t VALUES
  (1, NULL), 
  (2, 'A'::SUPER),
  (3, JSON_PARSE('{"AttributeName": "B"}')),
  (4, JSON_PARSE(
     '[{"Subobject": {"C": "C"},
        "Subarray": [{"D": "D"}, "E"]
      }]'));

-- Convert all attribute names to lowercase.
UPDATE t SET s = LOWER_ATTRIBUTE_NAMES(s);

SELECT i, s FROM t ORDER BY i;

 i |                        s
---+--------------------------------------------------
 1 | NULL
 2 | "A"
 3 | {"attributename":"B"}
 4 | [{"subobject":{"c":"C"},"subarray":[{"d":"D"}, "E"]}]
```

LOWER\$1ATTRIBUTE\$1NAMES가 어떻게 작동하는지 살펴보세요.
+  NULL 값 및 스칼라 SUPER 값(예: `"A"`)은 변경되지 않습니다.
+  SUPER 객체에서는 모든 속성 이름이 소문자로 변경되지만 `"B"`와 같은 속성 값은 변경되지 않습니다.
+  LOWER\$1ATTRIBUTE\$1NAMES는 SUPER 배열 또는 다른 객체 내에 중첩된 모든 SUPER 객체에 재귀적으로 적용됩니다.

**속성 이름이 중복된 SUPER 객체에 LOWER\$1ATTRIBUTE\$1NAMES 사용**  
SUPER 객체에 이름의 대소문자만 다른 속성이 포함되어 있는 경우 LOWER\$1ATTRIBUTE\$1NAMES에서 오류가 발생합니다. 다음 예제를 살펴보세요.

```
SELECT LOWER_ATTRIBUTE_NAMES(JSON_PARSE('{"A": "A", "a": "a"}'));      

error:   Invalid input
code:    8001
context: SUPER value has duplicate attributes after case conversion.
```

# OBJECT 함수
<a name="r_object_function"></a>

SUPER 데이터 형식의 객체를 만듭니다.

## 구문
<a name="r_object_function-synopsis"></a>

```
OBJECT ( [ key1, value1 ], [ key2, value2 ...] )
```

## 인수
<a name="r_object_function-arguments"></a>

*key1, key2*  
VARCHAR 형식 문자열로 평가되는 표현식입니다.

*value1, value2*  
Amazon Redshift는 datetime 형식을 SUPER 데이터 형식으로 캐스팅하지 않으므로 datetime 형식을 제외한 모든 Amazon Redshift 데이터 형식의 표현식입니다. datetime 형식에 대한 자세한 내용은 [날짜/시간 형식](r_Datetime_types.md) 섹션을 참조하세요.  
객체의 `value` 표현식들이 동일한 데이터 형식일 필요는 없습니다.

## 반환 타입
<a name="r_object_function-returns"></a>

`SUPER`

## 예제
<a name="r_object_function_example"></a>

```
-- Creates an empty object.
select object();

object
--------
{}
(1 row)
            
-- Creates objects with different keys and values.
select object('a', 1, 'b', true, 'c', 3.14);

object
---------------------------
{"a":1,"b":true,"c":3.14}
(1 row)
               
select object('a', object('aa', 1), 'b', array(2,3), 'c', json_parse('{}'));
               
object
---------------------------------
{"a":{"aa":1},"b":[2,3],"c":{}}
(1 row)
            
-- Creates objects using columns from a table.
create table bar (k varchar, v super);
insert into bar values ('k1', json_parse('[1]')), ('k2', json_parse('{}'));
select object(k, v) from bar;

object
------------
{"k1":[1]}
{"k2":{}}
(2 rows)
            
-- Errors out because DATE type values can't be converted to SUPER type.
select object('k', '2008-12-31'::date);

ERROR:  OBJECT could not convert type date to super
```

# 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>

* 입력*:  
SUPER 유형 객체로 해석되는 식입니다.

*KEEP*  
이 절에 지정된 모든 **경로 값이 유지되고 출력 객체로 전달됩니다.  
이 절은 선택 사항입니다.

**path1, **path2, ...  
마침표로 구분되고 큰따옴표로 묶인 경로 구성 요소 형식의 상수 문자열 리터럴입니다. 예를 들어, `'"a"."b"."c"'`는 유효한 경로 값입니다. 이는 KEEP 절과 SET 절의 경로 파라미터에 적용됩니다.

*SET*  
**경로와 **값 쌍을 사용하여 기존 경로를 수정하거나 새 경로를 추가하고 출력 객체에 해당 경로의 값을 설정합니다.  
이 절은 선택 사항입니다.

**value1, **value2, ...  
SUPER 유형 값으로 해석되는 식입니다. 참고로 숫자, 텍스트, 부울 유형은 SUPER로 해석할 수 있습니다.

## 반환 타입
<a name="r_object_transform_function-returns"></a>

`SUPER`

## 사용 노트
<a name="r_object_transform_function-usage-notes"></a>

OBJECT\$1TRANSFORM은 KEEP에 지정된 **입력의 경로 값과 SET에 지정된 **경로 및 **값 쌍을 포함하는 SUPER 유형 객체를 반환합니다.

KEEP과 SET가 모두 비어 있는 경우 OBJECT\$1TRANSFORM은 **입력을 반환합니다.

**입력이 SUPER 유형 **객체가 아닌 경우 OBJECT\$1TRANSFORM은 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"
}
```

# UPPER\$1ATTRIBUTE\$1NAMES 함수
<a name="r_upper_attribute_names"></a>

[UPPER 함수](r_UPPER.md)와 같은 대소문자 변환 루틴을 사용하여 SUPER 값의 모든 해당 속성 이름을 대문자로 변환합니다. UPPER\$1ATTRIBUTE\$1NAMES는 UTF-8 멀티바이트 문자를 지원하여 문자당 최대 4바이트까지 가능합니다.

 SUPER 속성 이름을 소문자로 변환하려면 [LOWER\$1ATTRIBUTE\$1NAMES 함수](r_lower_attribute_names.md)를 사용합니다.

## 구문
<a name="r_upper_attribute_names-synopsis"></a>

```
UPPER_ATTRIBUTE_NAMES( super_expression )
```

## 인수
<a name="r_upper_attribute_names-arguments"></a>

*super\$1expression*  
SUPER 표현식입니다.

## 반환 타입
<a name="r_upper_attribute_names-return-type"></a>

`SUPER`

## 예제
<a name="r_upper_attribute_names_examples"></a>

**SUPER 속성 이름을 대문자로 변환**  
다음 예제에서는 UPPER\$1ATTRIBUTE\$1NAMES를 사용하여 테이블에 있는 모든 SUPER 값의 속성 이름을 변환합니다.

```
-- Create a table and insert several SUPER values.
CREATE TABLE t (i INT, s SUPER);

INSERT INTO t VALUES
  (1, NULL), 
  (2, 'a'::SUPER),
  (3, JSON_PARSE('{"AttributeName": "b"}')),
  (4, JSON_PARSE(
     '[{"Subobject": {"c": "c"},
        "Subarray": [{"d": "d"}, "e"]
      }]'));

-- Convert all attribute names to uppercase.
UPDATE t SET s = UPPER_ATTRIBUTE_NAMES(s);

SELECT i, s FROM t ORDER BY i;

 i |                        s
---+--------------------------------------------------
 1 | NULL
 2 | "a"
 3 | {"ATTRIBUTENAME":"B"}
 4 | [{"SUBOBJECT":{"C":"c"},"SUBARRAY":[{"D":"d"}, "e"]}]
```

UPPER\$1ATTRIBUTE\$1NAMES가 어떻게 작동하는지 살펴보세요.
+  NULL 값 및 스칼라 SUPER 값(예: `"a"`)은 변경되지 않습니다.
+  SUPER 객체에서는 모든 속성 이름이 대문자로 변경되지만 `"b"`와 같은 속성 값은 변경되지 않습니다.
+  UPPER\$1ATTRIBUTE\$1NAMES는 SUPER 배열 또는 다른 객체 내에 중첩된 모든 SUPER 객체에 재귀적으로 적용됩니다.

**속성 이름이 중복된 SUPER 객체에 UPPER\$1ATTRIBUTE\$1NAMES 사용**  
SUPER 객체에 이름의 대소문자만 다른 속성이 포함되어 있는 경우 UPPER\$1ATTRIBUTE\$1NAMES에서 오류가 발생합니다. 다음 예제를 살펴보세요.

```
SELECT UPPER_ATTRIBUTE_NAMES(JSON_PARSE('{"A": "A", "a": "a"}'));      

error:   Invalid input
code:    8001
context: SUPER value has duplicate attributes after case conversion.
```