IDENTIFIER yan tümcesi

Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL onay işareti evet olarak işaretlenmiş Databricks Runtime 13.3 LTS ve üzeri

IDENTIFIER yan tümcesi, SQL deyimlerindeki tanımlayıcıların SQL enjeksiyonundan korumalı parametreleştirilmesini sağlar.

  • Şunun için geçerlidir:seçim işareti evet olarak ayarlanmış Databricks Runtime 18.0 ve üzeri

    Bağımsız değişkenler yalnızca bir dize sabiti veya bir dize parametre işaretçisi içeriyorsa, tümce çok parçalı bir ad içinde herhangi bir nesne adı veya tanımlayıcı yerine kullanılabilir. Buna şu gibi birleştirilmiş dizeler dahildir: 'myschema' :table 'mycolumn' veya :schema :table :column.

  • Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL onay işareti evet olarak işaretlenmiş Databricks Runtime 13.3 LTS ve üzeri

    tümce, IDENTIFIER veya 'myschema' || :table || 'mycolumn' gibi sabit bir dizeyi :schema || :table || :column olarak yorumlar:

    • ilişki (tablo veya görünüm) adı
    • işlev adı
    • sütun adı
    • alan adı
    • şema adı
    • katalog adı

    IDENTIFIER yan tümcesi aşağıdaki deyimlerle sınırlıdır:

    • CREATE, ALTER, DROP veya UNDROP deyiminin tablo, görünüm veya işlev konu adı.
    • MERGE, , DELETEUPDATE, INSERT, COPY INTO deyimlerinin hedef tablo adı.
    • SHOW veya DESCRIBE deyiminin hedefi.
    • Şema veya katalog kullanımı
    • İşlev çağırma
    • Sorguda başvuruda bulunan sütun, tablo veya görünüm. Bu, DDL veya DML deyimine eklenmiş sorguları içerir.

Uyarı

SQL enjeksiyonun sorun olmadığı ve IDENTIFIER yan tümcesinin desteklenmediği durumlarda, bunun yerine EXECUTE IMMEDIATE kullanabilirsiniz. Örneğin: EXECUTE IMMEDIATE 'CREATE TABLE ' || :tab || '(' || :col || 'INT)';

Sözdizimi

IDENTIFIER ( strLiteral )

IDENTIFIER ( strExpr )

Parametreler

  • strLiteral: Genellikle bir veya birden fazla dize STRING ve değişmez değer bileşeninden oluşan ve birleştirilen değişmez değer;
  • strExpr: Genellikle bir veya daha fazla STRING içeren sabit bir ifade. Databricks Runtime 18.0'dan itibaren bu gösterim kullanım dışı bırakılmıştır.

Örnekler

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