Função LOWER_ATTRIBUTE_NAMES - Amazon Redshift

Função LOWER_ATTRIBUTE_NAMES

Converte todos os nomes de atributos aplicáveis em um valor SUPER em minúsculas, usando a mesma rotina de conversão de maiúsculas e minúsculas de Função LOWER. LOWER_ATTRIBUTE_NAMES aceita caracteres UTF-8 multibyte, até o máximo de quatro bytes por caractere.

Para converter nomes de atributos SUPER em maiúsculas, use Função UPPER_ATTRIBUTE_NAMES.

Sintaxe

LOWER_ATTRIBUTE_NAMES(super_expression)

Argumentos

super_expression

Uma expressão SUPER.

Tipo de retorno

SUPER

Observações de uso

No Amazon Redshift, os identificadores de coluna tradicionalmente não diferenciam maiúsculas de minúsculas e são convertidos em minúsculas. Se você ingerir dados de formatos de dados que diferenciam maiúsculas e minúsculas, como JSON, os dados poderão conter nomes de atributos com maiúsculas e minúsculas.

Considere o seguinte exemplo.

CREATE TABLE t1 (s) AS SELECT JSON_PARSE('{"AttributeName": "Value"}'); SELECT s.AttributeName FROM t1; attributename ------------- NULL SELECT s."AttributeName" FROM t1; attributename ------------- NULL

O Amazon Redshift exibe NULL para as duas consultas. Para consultar AttributeName, use LOWER_ATTRIBUTE_NAMES para converter os nomes dos atributos dos dados em minúsculas. Considere o seguinte exemplo.

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"

Uma opção relacionada para trabalhar com nomes de atributos de objetos com maiúsculas e minúsculas é a opção de configuração enable_case_sensitive_super_attribute, que permite ao Amazon Redshift reconhecer maiúsculas e minúsculas em nomes de atributos SUPER. Essa pode ser uma solução alternativa ao uso de LOWER_ATTRIBUTE_NAMES. Para ter mais informações sobre enable_case_sensitive_super_attribute, acesse enable_case_sensitive_super_attribute.

Exemplos

Converter nomes de atributos SUPER em minúsculas

O exemplo a seguir usa LOWER_ATTRIBUTE_NAMES para converter os nomes dos atributos de todos os valores SUPER em uma tabela.

-- 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"]}]

Observe como LOWER_ATTRIBUTE_NAMES funciona.

  • Valores NULL e valores SUPER escalares, como "A", permanecem inalterados.

  • Em um objeto SUPER, todos os nomes de atributos são alterados para minúsculas, mas valores de atributos como "B" permanecem inalterados.

  • LOWER_ATTRIBUTE_NAMES aplica-se recursivamente a qualquer objeto SUPER aninhado dentro de uma matriz SUPER ou dentro de outro objeto.

Usar LOWER_ATTRIBUTE_NAMES em um objeto SUPER com nomes de atributos duplicados

Se um objeto SUPER contiver atributos cujos nomes sejam diferentes apenas em termos de maiúsculas e minúsculas, LOWER_ATTRIBUTE_NAMES gerará um erro. Considere o seguinte exemplo.

SELECT LOWER_ATTRIBUTE_NAMES(JSON_PARSE('{"A": "A", "a": "a"}')); error: Invalid input code: 8001 context: SUPER value has duplicate attributes after case conversion.