

 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>

次に、SUPER 型オブジェクトの作成と操作のために Amazon Redshift がサポートする 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 型を返します。

## 注記
<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 マルチバイト文字をサポートします (1 文字につき最大 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"
```

大文字と小文字が混在するオブジェクト属性名を使用するための関連オプションは、`enable_case_sensitive_super_attribute` 設定オプションです。これにより、Amazon Redshift は SUPER 属性名の大文字と小文字を認識できます。これは、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 では、日時の型は SUPER データ型にキャストされないため、すべての Amazon Redshift データ型の式では日時の型は除外されます。日時の型の詳細については、「[日時型](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*  
この句で指定された *path* 値はすべて保持され、出力オブジェクトに引き継がれます。  
この句はオプションです。

*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 は、KEEP で指定された *input* からのパス値と、SET で指定された *path* と *value* のペアを含む SUPER 型のオブジェクトを返します。

KEEP と SET の両方が空の場合、OBJECT\$1TRANSFORM は *input* を返します。

*input* が SUPER 型の *object* でない場合、OBJECT\$1TRANSFORM は KEEP 値や SET 値に関係なく *input* を返します。

## 例
<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 マルチバイト文字をサポートします (1 文字につき最大 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.
```