LOWER_ATTRIBUTE_NAMES 関数
LOWER 関数 と同じ大文字/小文字の変換ルーチンを使用して、SUPER 値のすべての該当する属性名を小文字に変換します。LOWER_ATTRIBUTE_NAMES は、UTF-8 マルチバイト文字をサポートします (1 文字につき最大 4 バイトまで)。
SUPER 属性名を大文字に変換するには、UPPER_ATTRIBUTE_NAMES 関数 を使用します。
構文
LOWER_ATTRIBUTE_NAMES(super_expression)
引数
- super_expression
-
SUPER 式。
戻り型
SUPER
使用に関する注意事項
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_ATTRIBUTE_NAMES を使用してデータの属性名を小文字に変換します。次の例を考えます。
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_ATTRIBUTE_NAMES の代替ソリューションとして使用できます。enable_case_sensitive_super_attribute
の詳細については、「enable_case_sensitive_super_attribute」を参照してください。
例
SUPER 属性名を小文字に変換する
次の例では、LOWER_ATTRIBUTE_NAMES を使用して、テーブル内のすべての 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_ATTRIBUTE_NAMES がどのように機能するかを確認します。
NULL 値とスカラー SUPER 値 (
"A"
など) は変更されません。SUPER オブジェクトでは、すべての属性名は小文字に変更されますが、
"B"
などの属性値は変更されません。LOWER_ATTRIBUTE_NAMES は、SUPER 配列内または別のオブジェクト内にネストされているすべての SUPER オブジェクトに再帰的に適用されます。
重複する属性名を持つ SUPER オブジェクトでの LOWER_ATTRIBUTE_NAMES の使用
SUPER オブジェクトに大文字と小文字だけが異なる名前の属性が含まれている場合、LOWER_ATTRIBUTE_NAMES はエラーを発生させます。次の例を考えます。
SELECT LOWER_ATTRIBUTE_NAMES(JSON_PARSE('{"A": "A", "a": "a"}'));
error: Invalid input code: 8001 context: SUPER value has duplicate attributes after case conversion.