IDENTIFIER záradék

A következőkre vonatkozik:jelölje be az igennel jelölt jelölőnégyzetet Databricks SQL jelölje be az igennel jelölt jelölőnégyzetet Databricks Runtime 13.3 LTS és újabb

A IDENTIFIER záradék lehetővé teszi az SQL-utasításokban lévő azonosítók SQL-injektálásának biztonságos paraméterezését.

  • A következőre vonatkozik:igen be van jelölve a Databricks Runtime 18.0-s vagy újabb verzióira

    A záradék többrészes névben lévő objektumnév vagy -azonosító helyett használható, amennyiben az argumentumok csak sztringkonstansból vagy sztringparaméter-jelölőből állnak. Ide tartoznak az egybeolvasztott sztringek, például: 'myschema' :table 'mycolumn' vagy :schema :table :column.

  • A következőkre vonatkozik:jelölje be az igennel jelölt jelölőnégyzetet Databricks SQL jelölje be az igennel jelölt jelölőnégyzetet Databricks Runtime 13.3 LTS és újabb

    A IDENTIFIER záradék egy állandó sztringet értelmez, például 'myschema' || :table || 'mycolumn':schema || :table || :column :

    • A (tábla vagy nézet) reláció neve
    • függvény neve
    • oszlop neve
    • mező neve
    • séma neve
    • katalógus neve

    A IDENTIFIER záradék a következő utasításokra korlátozódik:

    • A CREATE, ALTER, DROP vagy UNDROP utasítás táblára, nézetre vagy függvényre vonatkozó alanyneve.
    • A MERGE, UPDATE DELETE és INSERTCOPY INTO utasítások céltáblájának neve.
    • A SHOW vagy a DESCRIBE utasítás célja.
    • Séma vagy katalógus HASZNÁLATA
    • Függvényhívás
    • Egy lekérdezésben hivatkozott oszlop, tábla vagy nézet. Ide tartoznak a DDL- vagy DML-utasításba beágyazott lekérdezések.

Megjegyzés:

Ha a IDENTIFIER záradék nem támogatott, és az SQL-injektálás nem jelent problémát, használhatja EXECUTE IMMEDIATE helyette. Például: EXECUTE IMMEDIATE 'CREATE TABLE ' || :tab || '(' || :col || 'INT)';

Syntax

IDENTIFIER ( strLiteral )

IDENTIFIER ( strExpr )

Paraméterek

  • strLiteral: Általában STRING egy vagy több sztringparaméter-jelölőből és konstansösszetevőből álló literál, amely szenesített;
  • strExpr: Egy állandó STRING kifejezés, amely általában egy vagy több paraméterjelölőt tartalmaz. A Databricks Runtime 18.0-tól kezdve ez a jelölés elavult.

Példák

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 :re[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 :re[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 clause 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("myschema" -> "`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 :re[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 :re[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 :re[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