Pular para o conteúdo principal

Classe de erro UNRESOLVED_COLUMN

SQLSTATE: 42703

Um parâmetro de coluna, variável ou rotina com o nome <objectName> não pode ser resolvido.

Essa classe de erro tem as seguintes classes de erro derivadas.

SEM SUGESTÃO

Parâmetros

  • ObjectName : O nome da coluna ou parâmetro que não pode ser resolvido.

COM_SUGESTÃO

Você quis dizer uma das seguintes? [<proposal>]

Parâmetros

  • ObjectName : O nome da coluna ou parâmetro que não pode ser resolvido.
  • proposta : Uma lista separada por vírgulas de possíveis candidatos.

Explicação

O Databricks gera esse erro sempre que não consegue identificar um identificador em um contexto em que espera uma coluna, um alias de coluna ou um parâmetro de função.

Há várias causas para esse erro:

  • Um erro de ortografia no nome da coluna ou no nome do parâmetro.
  • Na verdade, o senhor quis especificar um literal de cadeia de caracteres, e não um identificador.
  • A coluna foi renomeada ou eliminada usando ALTER TABLE
  • A coluna não foi incluída na lista de seleção de uma subconsulta.
  • A coluna foi renomeada usando o alias da tabela ou o alias da coluna.
  • A referência da coluna está correlacionada e você não especificou LATERAL.
  • A referência da coluna é para um objeto que não está visível porque aparece mais cedo na mesma lista de seleção ou em uma subconsulta escalar.

Mitigação

A mitigação do erro depende da causa:

  • A grafia do nome e dos qualificadores está incorreta?

    Compare com as colunas oferecidas no objectList e corrija a ortografia.

  • O senhor queria especificar um literal de cadeia de caracteres em vez disso?

    Coloque o literal entre aspas simples e não em letras traseiras (acento grave).

  • A coluna foi omitida de uma subconsulta?

    Adicione a coluna à lista de seleção da subconsulta.

  • Você está se referindo a uma coluna em uma relação anterior na mesma cláusula from?

    Adicione a palavra-chave LATERAL antes da subconsulta com a coluna não resolvida. O suporte a consultas correlacionadas é limitado. Talvez seja necessário reescrever (descorrelacionar) a consulta.

  • Não está claro por que a coluna ou o campo não podem ser resolvidos?

    Consulte Resolução de coluna, campo, parâmetro e variável para obter uma descrição detalhada da resolução de nomes.

Exemplos

SQL
> CREATE OR REPLACE TEMPORARY VIEW colors(cyan, magenta, yellow) AS VALUES(10, 20, 5);

-- The column reference has been misspelled
> SELECT jello FROM colors;
[UNRESOLVED_COLUMN.WITH_SUGGESTION] A column or function parameter with name `jello` cannot be resolved.
Did you mean one of the following? [`colors`.`cyan`, `colors`.`yellow`, `colors`.`magenta`]

-- Correct the spelling
> SELECT yellow FROM colors;
5

-- The qualifier has been misspelled
> SELECT color.yellow FROM colors;
[UNRESOLVED_COLUMN.WITH_SUGGESTION] A column or function parameter with name `color`.`yellow` cannot be resolved.
Did you mean one of the following? [`colors`.`cyan`, `colors`.`yellow`, `colors`.`magenta`]

-- Correct the spelling
> SELECT colors.yellow FROM colors;
5

-- Forgot to quote a literal
> SELECT hello;
[UNRESOLVED_COLUMN.WITHOUT_SUGGESTION] A column or function parameter with name `hello` cannot be resolved.

-- Use single quotes
> SELECT 'hello';

-- Used the wrong quotes for a literal
> SELECT `hello`;
[UNRESOLVED_COLUMN.WITHOUT_SUGGESTION] A column or function parameter with name `hello` cannot be resolved.

-- Use single quotes instead
> SELECT 'hello';

-- Column "got lost" in a subquery.
> SELECT cyan, magenta, yellow
FROM (SELECT cyan, magenta
FROM colors) AS c;
[UNRESOLVED_COLUMN.WITH_SUGGESTION] A column or function parameter with name `yellow` cannot be resolved.
Did you mean one of the following? [`c`.`cyan`, `c`.`magenta`]

-- Add the missing column
> SELECT cyan, magenta, yellow
FROM (SELECT cyan, magenta, yellow
FROM colors) AS c;
10 20 5

-- Columns got renamed in the table alias
> SELECT cyan, magenta, yellow
FROM (SELECT cyan, magenta, yellow
FROM colors) AS c(c, m, y);
[UNRESOLVED_COLUMN.WITH_SUGGESTION] A column or function parameter with name `cyan` cannot be resolved.
Did you mean one of the following? [`c`.`c`, `c`.`m`, `c`.`y`];

-- Adjust the names
> SELECT c, m, y
FROM (SELECT cyan, magenta, yellow
FROM colors) AS c(c, m, y);
10 20 5

-- A correlated reference
> SELECT * FROM colors, (SELECT cyan + magenta + yellow AS total_use);
[UNRESOLVED_COLUMN.WITHOUT_SUGGESTION] A column or function parameter with name `cyan` cannot be resolved.

-- Add LATERAL to permit correation
> SELECT * FROM colors, LATERAL(SELECT cyan + magenta + yellow AS total_use);
10 20 5 35

-- Or de-correlate
> SELECT *, cyan + magenta + yellow AS total_use FROM colors;
10 20 5 35

-- A misspelled parameter name
> CREATE OR REPLACE FUNCTION plus(a INT, b INT) RETURNS INT RETURN arg1 + arg2;
[UNRESOLVED_COLUMN.WITH_SUGGESTION] A column or function parameter with name `arg1` cannot be resolved.
Did you mean one of the following? [`plus`.`a`, `plus`.`b`]

-- Fix the names
> CREATE OR REPLACE FUNCTION plus(a INT, b INT) RETURNS INT RETURN a + b;
> SELECT plus(1, 2);
3

Relacionado