Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:
SQL do Databricks
Databricks Runtime 13.3 LTS e versões posteriores
A cláusula IDENTIFIER permite a parametrização segura contra injeções de SQL de identificadores em instruções SQL.
Aplica-se a:
Databricks Runtime 18.0 e superiorA cláusula pode ser usada em vez de qualquer nome de objeto ou identificador dentro de um nome de várias partes, desde que os argumentos consistam apenas em um literal de cadeia de caracteres ou marcador de parâmetro de cadeia de caracteres. Isso inclui cadeias de caracteres coalessadas, como:
'myschema' :table 'mycolumn'ou:schema :table :column.Aplica-se a:
SQL do Databricks
Databricks Runtime 13.3 LTS e versões posterioresA IDENTIFIER cláusula interpreta uma cadeia de caracteres constante, como
'myschema' || :table || 'mycolumn'ou:schema || :table || :columncomo:- nome da relação (tabela ou exibição)
- nome da função
- nome de coluna
- nome do campo
- nome do esquema
- nome do catálogo
A IDENTIFIER cláusula é limitada às seguintes instruções:
- O nome da tabela, visualização ou função de uma instrução CREATE, ALTER, DROP ou UNDROP.
- O nome da tabela de destino de instruções MERGE, UPDATE, DELETE, INSERT, COPY INTO.
- O destino de uma instrução SHOW ou DESCRIBE.
- USO de um esquema ou catálogo
- Uma invocação de função
- Uma coluna, uma tabela ou uma exibição referenciada em uma consulta. Isso inclui consultas inseridas em uma instrução DDL ou DML.
Observação
Quando não há suporte para a IDENTIFIER cláusula e a injeção de SQL não é uma preocupação, você pode usar EXECUTE IMMEDIATE .
Por exemplo: EXECUTE IMMEDIATE 'CREATE TABLE ' || :tab || '(' || :col || 'INT)';
Sintaxe
IDENTIFIER ( strLiteral )
IDENTIFIER ( strExpr )
Parâmetros
-
strLiteral: um
STRINGliteral normalmente composto por um ou mais marcadores de parâmetro de string e componentes literais que são coalescidos; -
strExpr: uma expressão de constante
STRINGnormalmente incluindo um ou mais marcadores de parâmetro. A partir do Databricks Runtime 18.0, essa notação foi preterida.
Exemplos
Scala
// Creation of a table using parameter marker.
spark.sql("CREATE TABLE IDENTIFIER(:mytab)(c1 INT)", args = Map("mytab" -> "tab1"))
// Altering a table with a fixed schema and a parameterized table name.
spark.sql("ALTER TABLE IDENTIFIER('default.' || :mytab) ADD COLUMN c2 INT)", args = Map("mytab" -> "tab1"))
// Altering a table with a fixed schema and a parameterized table name in DBR 18.0 and above.
spark.sql("ALTER TABLE IDENTIFIER('default.' :mytab) ADD COLUMN c2 INT)", args = Map("mytab" -> "tab1"))
// Dropping a table with separate schema and table parameters.
spark.sql("DROP TABLE IDENTIFIER(:myschema || '.' || :mytab)", args = Map("mySchema" -> "default", "mytab" -> "tab1"))
// Dropping a table with separate schema and table parameters in DBR 18.0 and above.
spark.sql("DROP TABLE IDENTIFIER(:myschema '.' :mytab)", args = Map("mySchema" -> "default", "mytab" -> "tab1"))
// A parameterized reference to a table in a query. The table name is qualified and uses back-ticks.
spark.sql("SELECT * FROM IDENTIFIER(:mytab)", args = Map("mytab" -> "`default`.`tab1`"))
// You cannot qualify the IDENTIFIER claue or use it as a qualifier itself.
spark.sql("SELECT * FROM myschema.IDENTIFIER(:mytab)", args = Map("mytab" -> "`tab1`"))
spark.sql("SELECT * FROM IDENTIFIER(:myschema).mytab", args = Map("mychema" -> "`default`"))
// A parameterized column reference
spark.sql("SELECT IDENTIFIER(:col) FROM VALUES(1) AS T(c1)", args = Map("col" -> "t.c1"))
// Passing in an aggregate function name as a parameter
spark.sql("SELECT IDENTIFIER(:agg)(c1) FROM VALUES(1), (2) AS T(c1)", args = Map("agg" -> "max"))
SQL
-- Using a catalog using a variable.
> DECLARE mycat = 'main';
> USE CATALOG IDENTIFIER(mycat);
-- Creation of a table using variable.
> DECLARE mytab = 'tab1';
> CREATE TABLE IDENTIFIER(mytab)(c1 INT);
-- Altering a table with a fixed schema and a parameterized table name.
> ALTER TABLE IDENTIFIER('default.' || mytab) ADD COLUMN c2 INT;
-- Altering a table with a fixed schema and a parameterized table name in DBR 18.0 and above.
> ALTER TABLE IDENTIFIER('default.' || mytab) ADD COLUMN c2 INT;
-- Inserting using a parameterized table name. The table name is qualified and uses back-ticks.
> SET VAR mytab = '`default`.`tab1`';
> INSERT INTO IDENTIFIER(mytab) VALUES(1, 2);
-- A parameterized reference to a table in a query.
> SELECT * FROM IDENTIFIER(mytab);
1 2
-- Dropping a table with separate schema and table parameters.
> DECLARE myschema = 'default';
> SET VAR mytab = 'tab1';
> DROP TABLE IDENTIFIER(myschema || '.' || mytab);
-- In DBR 18.0 and above:
> DROP TABLE IDENTIFIER(myschema '.' mytab);
-- You cannot qualify the IDENTIFIER clause or use it as a qualifier itself prior to DBR 18.0.
> SELECT * FROM myschema.IDENTIFIER('tab');
Error: PARSE_SYNTAX_ERROR
> SELECT * FROM IDENTIFIER('default').mytab;
Error: PARSE_SYNTAX_ERROR
-- A parameterized column reference
> DECLARE col = 't.c1';
> SELECT IDENTIFIER(col) FROM VALUES(1) AS T(c1);
1
-- Passing in an aggregate function name as a parameter
> DECLARE agg = 'max';
> SELECT IDENTIFIER(agg)(c1) FROM VALUES(1), (2) AS T(c1);
2