Elnevezett paraméterjelölők használata

Az elnevezett paraméterjelölők lehetővé teszik változó értékek beszúrását az SQL-lekérdezésekbe futásidőben. Meghatározott értékek kemény kódolása helyett olyan beírt helyőrzőket határoz meg, amelyeket a felhasználók a lekérdezés futtatásakor töltenek be. Ez javítja a lekérdezések újrafelhasználását, megakadályozza az SQL-injektálást, és megkönnyíti a rugalmas, interaktív lekérdezések készítését.

Az elnevezett paraméterjelölők a következő Databricks-felületeken működnek:

  • SQL-szerkesztő (új és örökölt)
  • Notebooks
  • AI/BI-irányítópult adatkészlet-szerkesztője
  • Genie-ügynökök

Elnevezett paraméterjelölő hozzáadása

Paraméter beszúrásához írja be a kettőspontot, majd egy paraméternevet, például :parameter_name. Ha elnevezett paraméterjelölőt ad hozzá egy lekérdezéshez, megjelenik egy widget, ahol megadhatja a paraméter típusát és értékét. Lásd: Paraméter widgetek használata.

Ez a példa egy hard-coded lekérdezést konvertál elnevezett paraméter használatára.

Lekérdezés indítása:

SELECT
  trip_distance,
  fare_amount
FROM
  samples.nyctaxi.trips
WHERE
  fare_amount < 5
  1. Töröld 5 a WHERE záradékból.
  2. Írja be a :fare_parameter-t a helyére. Az utolsó sornak így kell kinéznie fare_amount < :fare_parameter.
  3. Kattintson a fogaskerék ikonra a paraméter widget közelében.
  4. Állítsa be a típustdecimális értékre.
  5. Adjon meg egy értéket a paraméter widgetben, és kattintson a Módosítások alkalmazása gombra.
  6. Kattintson Mentés.

Paramétertípusok

Adja meg a paramétertípust a paraméterbeállítások panelen. A típus határozza meg, hogy a Databricks hogyan értelmezi és kezeli az értéket futásidőben.

Típus Leírás
String Szabad formátumú szöveg. A fordított perjelek, az egy- és a dupla idézőjelek automatikusan feloldódnak. A Databricks idézőjeleket ad hozzá az értékhez.
Integer Egész számérték.
decimális Tört értékeket támogató numerikus érték.
Dátum Dátumérték. Naptárválasztót és alapértelmezett értékeket használ az aktuális dátumhoz.
Időbélyeg Dátum- és időérték. Naptárválasztót és alapértelmezett értékeket használ az aktuális dátumhoz és időponthoz.

Elnevezett paraméterszintaxis-példák

Az alábbi példák az elnevezett paraméterjelölők gyakori mintáit mutatják be.

Dátum beszúrása

SELECT
  o_orderdate AS Date,
  o_orderpriority AS Priority,
  sum(o_totalprice) AS `Total Price`
FROM
  samples.tpch.orders
WHERE
  o_orderdate > :date_param
GROUP BY 1, 2

Szám beszúrása

SELECT
  o_orderdate AS Date,
  o_orderpriority AS Priority,
  o_totalprice AS Price
FROM
  samples.tpch.orders
WHERE
  o_totalprice > :num_param

Mezőnév beszúrása

A IDENTIFIER függvény használatával adja át az oszlop nevét paraméterként. A paraméterértéknek a lekérdezésben használt táblából származó oszlopnévnek kell lennie.

SELECT * FROM samples.tpch.orders
WHERE IDENTIFIER(:field_param) < 10000

Adatbázis-objektumok beszúrása

IDENTIFIER A függvény több paraméterrel való használatával futásidőben adhat meg katalógust, sémát és táblázatot.

SELECT *
FROM IDENTIFIER(:catalog || '.' || :schema || '.' || :table)

Lásd: záradék IDENTIFIER.

Több paraméter összefűzve

Paraméterek egyetlen formázott sztringbe való kombinálására használható format_string . Lásd format_string függvényt.

SELECT o_orderkey, o_clerk
FROM samples.tpch.orders
WHERE o_clerk LIKE format_string('%s%s', :title, :emp_number)

JSON-sztringek működése

A függvény használatával from_json kinyerhet egy értéket egy JSON-sztringből egy paraméterrel kulcsként. A a behelyettesítése a :param értékeként visszatér 1.

SELECT from_json('{"a": 1}', 'map<string, int>') [:param]

Intervallum létrehozása

Használja a(z) CAST parancsot, hogy egy paraméterértéket INTERVAL típusúvá alakítson időalapú számításokhoz. Lásd : Intervallum típusa.

SELECT CAST(:param AS INTERVAL MINUTE)

Dátumtartomány hozzáadása .min és .max segítségével

A dátum- és időbélyeg-paraméterek támogatnak egy tartomány widgetet. Használja a .min és .max elemeket a tartomány kezdő és végének eléréséhez.

SELECT * FROM samples.nyctaxi.trips
WHERE tpep_pickup_datetime
BETWEEN :date_range.min AND :date_range.max

Állítsa be a paraméter típusát Date vagy Timestamp, és a widget típusát Tartomány formában.

Dátumtartomány hozzáadása két paraméter használatával

SELECT * FROM samples.nyctaxi.trips
WHERE tpep_pickup_datetime
BETWEEN CAST(:date_range_min AS TIMESTAMP) AND CAST(:date_range_max AS TIMESTAMP)

Összegző kimutatás részletességének paraméterezése

Az eredmények felhasználó által kiválasztott részletességi szinten történő összesítésére használható DATE_TRUNC . Adja meg DAY, MONTHvagy YEAR paraméterértékként.

SELECT
  DATE_TRUNC(:date_granularity, tpep_pickup_datetime) AS date_rollup,
  COUNT(*) AS total_trips
FROM samples.nyctaxi.trips
GROUP BY date_rollup

Több érték átadása sztringként

Használja a ARRAY_CONTAINS, SPLIT és TRANSFORM elemeket az olyan vesszővel tagolt listán való szűrésre, amelyet egyetlen szövegparaméterként adtak át. SPLIT a vesszővel elválasztott sztringet tömbbe elemzi. TRANSFORM minden egyes elemnél levágja a szóközt. ARRAY_CONTAINS ellenőrzi, hogy a tábla értéke megjelenik-e az eredményként kapott tömbben.

SELECT * FROM samples.nyctaxi.trips WHERE
  array_contains(
    TRANSFORM(SPLIT(:list_parameter, ','), s -> TRIM(s)),
    CAST(dropoff_zip AS STRING)
  )

Megjegyzés

Ez a példa sztringértékekhez használható. Más adattípusok használatához burkolja a TRANSFORM műveletet egy CAST alkalmazásával, hogy az elemeket a kívánt típussá alakítsa.

Szintaxismigrálási referencia

Ezt a táblázatot akkor használja, ha a lekérdezéseket bajuszszintaxisból nevesített paraméterjelölőkké konvertálja. További információkat az örökölt szintaxisról a Mustache paraméterszintaxis alatt talál.

Felhasználási eset Bajusz szintaxisa Elnevezett paraméter szintaxisa
Szűrés dátum szerint WHERE date_field < '{{date_param}}' WHERE date_field < :date_param
Szűrés szám szerint WHERE price < {{max_price}} WHERE price < :max_price
Sztringek összehasonlítása WHERE region = '{{region_param}}' WHERE region = :region_param
Adjon meg egy táblát SELECT * FROM {{table_name}} SELECT * FROM IDENTIFIER(:table) — használja a teljes háromszintű névteret
Katalógus, séma és tábla megadása SELECT * FROM {{catalog}}.{{schema}}.{{table}} SELECT * FROM IDENTIFIER(:catalog \|\| '.' \|\| :schema \|\| '.' \|\| :table)
Sztring formázása több paraméterből "({{area_code}}) {{phone_number}}" format_string("(%d) %d", :area_code, :phone_number)
Intervallum létrehozása SELECT INTERVAL {{p}} MINUTE SELECT CAST(format_string("INTERVAL '%s' MINUTE", :param) AS INTERVAL MINUTE)