Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:
Databricks SQL
Databricks Runtime 13.3 LTS ke atas
Klausul IDENTIFIER ini memungkinkan parameterisasi pengidentifikasi yang aman terhadap injeksi SQL dalam pernyataan SQL.
Berlaku untuk:
Databricks Runtime 18.0 ke atasKlausa dapat digunakan alih-alih nama objek atau pengidentifikasi apa pun dalam nama multibagian, selama argumen hanya terdiri dari string literal atau penanda parameter string. Ini termasuk string yang dikoaleskasi seperti:
'myschema' :table 'mycolumn'atau:schema :table :column.Berlaku untuk:
Databricks SQL
Databricks Runtime 13.3 LTS ke atasKlausa IDENTIFIER menginterpretasikan string konstanta seperti
'myschema' || :table || 'mycolumn'atau:schema || :table || :columnsebagai:- nama relasi (tabel atau tampilan)
- nama fungsi
- nama kolom
- nama bidang
- nama skema
- nama katalog
Klausul IDENTIFIER terbatas pada pernyataan berikut:
- Nama subjek tabel, tampilan, atau fungsi dari pernyataan CREATE, ALTER, DROP, atau UNDROP.
- Nama tabel target dari pernyataan MERGE, UPDATE, DELETE, INSERT, COPY INTO .
- Target pernyataan SHOW atau DESCRIBE.
- PENGGUNAAN skema atau katalog
- Pemanggilan fungsi
- Kolom, tabel, atau tampilan yang dirujuk dalam kueri. Ini termasuk kueri yang disematkan dalam pernyataan DDL atau DML.
Nota
IDENTIFIER Jika klausul tidak didukung dan injeksi SQL tidak menjadi perhatian, Anda dapat menggunakannya EXECUTE IMMEDIATE sebagai gantinya.
Misalnya: EXECUTE IMMEDIATE 'CREATE TABLE ' || :tab || '(' || :col || 'INT)';
Sintaks
IDENTIFIER ( strLiteral )
IDENTIFIER ( strExpr )
Parameter
-
strLiteral: Literal
STRINGbiasanya terdiri dari satu atau beberapa string penanda parameter dan komponen literal yang digabungkan. -
strExpr: Ekspresi konstanta
STRINGbiasanya menyertakan satu atau beberapa penanda parameter. Dimulai dengan Databricks Runtime 18.0 notasi ini tidak digunakan lagi.
Contoh
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