Partager via


Clause IDENTIFIER

S’applique à :coche marquée oui Databricks SQL coché oui Databricks Runtime 13.3 LTS et versions ultérieures

La IDENTIFIER clause active le paramétrage sql-injection-safe des identificateurs dans les instructions SQL.

  • S’applique à :check marqué oui Databricks Runtime 18.0 et versions ultérieures

    La clause peut être utilisée au lieu d’un nom d’objet ou d’un identificateur dans un nom multipart, tant que les arguments se composent uniquement d’un littéral de chaîne ou d’un marqueur de paramètre de chaîne. Cela inclut des chaînes coalescées telles que : 'myschema' :table 'mycolumn' ou :schema :table :column.

  • S’applique à :coche marquée oui Databricks SQL coché oui Databricks Runtime 13.3 LTS et versions ultérieures

    La IDENTIFIER clause interprète une chaîne constante telle que 'myschema' || :table || 'mycolumn' ou :schema || :table || :column comme un :

    • nom de relation (table ou vue)
    • nom de fonction
    • nom de colonne
    • Nom du champ
    • nom de schéma
    • nom du catalogue

    La IDENTIFIER clause est limitée aux déclarations suivantes :

    • Nom de l’objet de table, de vue ou de fonction d’une instruction CREATE, ALTER, DROP ou UNDROP.
    • Nom de la table cible d’une instruction MERGE, UPDATE, DELETE, INSERT, COPY INTO.
    • Cible d’une instruction SHOW ou DESCRIBE.
    • UTILISATION d’un schéma ou d’un catalogue
    • Invocation de la fonction
    • Colonne, table ou vue référencée dans une requête. Cela inclut les requêtes incorporées dans une instruction DDL ou DML.

Note

Lorsque la clause IDENTIFIER n'est pas prise en charge et que l'injection SQL n'est pas un problème, vous pouvez utiliser EXECUTE IMMEDIATE à la place. Par exemple : EXECUTE IMMEDIATE 'CREATE TABLE ' || :tab || '(' || :col || 'INT)';

Syntaxe

IDENTIFIER ( strLiteral )

IDENTIFIER ( strExpr )

Paramètres

  • strLiteral : littéral STRING composé généralement d’un ou plusieurs marqueurs de paramètre de chaîne et de composants littérals qui sont regroupés ;
  • strExpr : expression constante STRING comprenant généralement un ou plusieurs marqueurs de paramètres. À compter de Databricks Runtime 18.0, cette notation est déconseillée.

Exemples

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