Werken met queryparameters
In dit artikel wordt uitgelegd hoe u kunt werken met queryparameters in de Azure Databricks SQL-editor.
Met queryparameters kunt u uw query's dynamischer en flexibeler maken door variabele waarden in te voegen tijdens runtime. In plaats van specifieke waarden in uw query's vast te coderen, kunt u parameters definiëren om gegevens te filteren of uitvoer te wijzigen op basis van gebruikersinvoer. Deze aanpak verbetert het hergebruik van query's, verbetert de beveiliging door SQL-injectie te voorkomen en maakt efficiëntere verwerking van diverse gegevensscenario's mogelijk.
Benoemde parametermarkeringssyntaxis
Benoemde parametermarkeringen zijn tijdelijke aanduidingen voor variabelen getypt. Gebruik deze syntaxis om query's te schrijven in de volgende onderdelen van de Azure Databricks-gebruikersinterface:
- SQL-editor
- Notebooks
- Editor voor AI/BI-dashboardgegevensset
- AI/BI Genie-ruimten (openbare preview)
Voeg parameters in uw SQL-query's in door een dubbele punt te typen, gevolgd door een parameternaam, zoals :parameter_name
. Wanneer u een benoemde parametermarkering in een query opneemt, wordt er een widget weergegeven in de gebruikersinterface. U kunt de widget gebruiken om het parametertype en de naam te bewerken.
Een benoemde parametermarkering toevoegen aan een query
In dit voorbeeld wordt een parametermarkering toegevoegd aan de volgende query:
SELECT
trip_distance,
fare_amount
FROM
samples.nyctaxi.trips
WHERE
fare_amount < 5
Deze query retourneert een gegevensset die alleen tariefbedragen bevat die minder dan vijf dollar bedragen. Gebruik de volgende stappen om de query te bewerken om een parameter te gebruiken in plaats van de in code vastgelegde waarde (5).
- Verwijder het getal 5 uit de query.
- Typ een dubbele punt (:) gevolgd door de tekenreeks
fare_parameter
. De laatste regel van de bijgewerkte query moet zeggenfare_amount < :fare_parameter
. - Klik op het tandwielpictogram in de buurt van de parameterwidget. In het dialoogvenster ziet u de volgende velden:
- Trefwoord: het trefwoord dat de parameter in de query vertegenwoordigt. U kunt dit veld niet bewerken. Als u het trefwoord wilt wijzigen, bewerkt u de markering in de SQL-query.
- Titel: De titel die over de widget wordt weergegeven. De titel is standaard hetzelfde als het trefwoord.
- Type: Ondersteunde typen zijn tekst, getal, vervolgkeuzelijst, datum, datum en tijd en datum en tijd (met seconden). De standaardwaarde is de tekst.
- Wijzig in het dialoogvenster het type in Getal.
- Voer een getal in de parameterwidget in en klik op Wijzigingen toepassen.
- Klik op Save om de query op te slaan.
Voorbeelden van benoemde parametersyntaxis
In de volgende voorbeelden ziet u enkele veelvoorkomende use cases voor parameters.
Een datum invoegen
Het volgende voorbeeld bevat een datumparameter waarmee queryresultaten worden beperkt tot records na een specifieke datum.
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
Een getal invoegen
Het volgende voorbeeld bevat een getalparameter waarmee de resultaten worden beperkt tot records waarin het o_total_price
veld groter is dan de opgegeven parameterwaarde.
SELECT
o_orderdate AS Date,
o_orderpriority AS Priority,
o_totalprice AS Price
FROM
samples.tpch.orders
WHERE
o_totalprice > :num_param
Een veldnaam invoegen
In het volgende voorbeeld wordt de field_param
IDENTIFIER
functie gebruikt voor het opgeven van een drempelwaarde voor de query tijdens runtime. De parameterwaarde moet een kolomnaam zijn uit de tabel die in de query wordt gebruikt.
SELECT
*
FROM
samples.tpch.orders
WHERE
IDENTIFIER(:field_param) < 10000
Databaseobjecten invoegen
In het volgende voorbeeld worden drie parameters gemaakt: catalog
, schema
en table
.
SELECT
*
FROM
IDENTIFIER(:catalog || '.' || :schema || '.' || :table)
Zie de ID-component.
Meerdere parameters samenvoegen
U kunt parameters opnemen in andere SQL-functies. In dit voorbeeld kan de kijker een werknemertitel en een nummer-id selecteren. De query gebruikt de format_string
functie om de twee tekenreeksen samen te voegen en te filteren op de rijen die overeenkomen. Zie format_string functie.
SELECT
o_orderkey,
o_clerk
FROM
samples.tpch.orders
WHERE
o_clerk LIKE format_string('%s%s', :title, :emp_number)
Werken met JSON-tekenreeksen
U kunt parameters gebruiken om een kenmerk uit een JSON-tekenreeks te extraheren. In het volgende voorbeeld wordt de from_json
functie gebruikt om de JSON-tekenreeks te converteren naar een struct-waarde. Als u de tekenreeks a
vervangt door de waarde voor de parameter (param
) wordt het kenmerk 1 geretourneerd.
SELECT
from_json('{"a": 1}', 'map<string, int>') [:param]
Een interval maken
Het INTERVAL
type vertegenwoordigt een tijdsduur en stelt u in staat om rekenkundige bewerkingen en bewerkingen op basis van tijd uit te voeren. Het volgende voorbeeld bevat de parameter in een format_string
functie die vervolgens wordt omgezet als intervaltype. De resulterende INTERVAL
waarde kan worden gebruikt voor berekeningen op basis van tijd of filteren in de query.
Zie intervaltype voor volledige details en syntaxis.
SELECT CAST(format_string("INTERVAL '%s' MINUTE", :param) AS INTERVAL MINUTE)
Een datumbereik toevoegen
In het volgende voorbeeld ziet u hoe u een geparameteriseerd datumbereik toevoegt om records in een bepaald tijdsbestek te selecteren.
SELECT * FROM samples.nyctaxi.trips
WHERE tpep_pickup_datetime
BETWEEN :start_date AND :end_date
Samengetelde parameters per dag, maand of jaar
In het volgende voorbeeld worden taxiritgegevens geaggregeerd op een geparameteriseerd granulariteitsniveau. De DATE_TRUNC
functie kapt de tpep_pickup_datetime
waarde af op basis van de :date_granularity
parameterwaarde, zoals DAY
, MONTH
of YEAR
. De afgekapte datum wordt als alias gebruikt date_rollup
in de GROUP BY
component.
SELECT DATE_TRUNC(:date_granularity, tpep_pickup_datetime) AS
date_rollup,
COUNT(*) AS total_trips
FROM samples.nyctaxi.trips
GROUP BY date_rollup
Meerdere waarden in één query gebruiken
In het volgende voorbeeld wordt de ARRAY_CONTAINS
functie gebruikt om een lijst met waarden te filteren. SPLIT
Met de TRANSFORM
functies kunnen meerdere door komma's gescheiden waarden worden doorgegeven als een tekenreeksparameter.
De :list_parameter
waarde gebruikt een lijst met door komma's gescheiden waarden. De SPLIT
functie parseert die lijst en splitst de door komma's gescheiden waarden in een matrix. Met TRANSFORM
de functie wordt elk element in de matrix getransformeerd door een witruimte te verwijderen. De ARRAY_CONTAINS
functie controleert of de dropoff_zip
waarde uit de trips
tabel is opgenomen in de matrix met waarden die zijn doorgegeven als de list_parameter
.
SELECT * FROM samples.nyctaxi.trips WHERE
array_contains(
TRANSFORM(SPLIT(:list_parameter, ','), s -> TRIM(s)),
dropoff_zip
)
Notitie
Dit voorbeeld werkt voor tekenreekswaarden. Als u de query voor andere gegevenstypen, zoals een lijst met gehele getallen, wilt wijzigen, verpakt u de TRANSFORM
bewerking met een CAST
bewerking om de tekenreekswaarden te converteren naar het gewenste gegevenstype.
Syntaxiswijzigingen
De volgende tabel bevat veelvoorkomende use cases voor parameters, de oorspronkelijke Databricks SQL mustache syntaxis en de equivalente syntaxis met behulp van de benoemde parametermarkeringssyntaxis.
Use-case voor parameters | Parametersyntaxis van mustache | Benoemde parametermarkeringssyntaxis |
---|---|---|
Alleen gegevens laden vóór een opgegeven datum | WHERE date_field < '{{date_param}}' U moet aanhalingstekens rond de datumparameter en accolades opnemen. |
WHERE date_field < :date_param |
Alleen gegevens laden die kleiner zijn dan een opgegeven numerieke waarde | WHERE price < {{max_price}} |
WHERE price < :max_price |
Twee tekenreeksen vergelijken | WHERE region = {{region_param}} |
WHERE region = :region_param |
De tabel opgeven die in een query wordt gebruikt | SELECT * FROM {{table_name}} |
SELECT * FROM IDENTIFIER(:table) Wanneer een gebruiker deze parameter invoert, moet deze de volledige naamruimte op drie niveaus gebruiken om de tabel te identificeren. |
Geef onafhankelijk de catalogus, het schema en de tabel op die in een query worden gebruikt | SELECT * FROM {{catalog}}.{{schema}}.{{table}} |
SELECT * FROM IDENTIFIER(:catalog \|\| '.' \|\| :schema \|\| '.' \|\| :table) |
Parameters gebruiken als sjabloon in een langere, opgemaakte tekenreeks | "({{area_code}}) {{phone_number}} Parameterwaarden worden automatisch samengevoegd als een tekenreeks. |
format_string("(%d)%d, :area_code, :p hone_number) Zie Meerdere parameters samenvoegen voor een volledig voorbeeld. |
Een interval maken | SELECT INTERVAL {{p}} MINUTE |
SELECT CAST(format_string("INTERVAL '%s' MINUTE", :param) AS INTERVAL MINUTE) |
Parametersyntaxis van mustache
Belangrijk
De volgende secties zijn van toepassing op querysyntaxis die u alleen in de SQL-editor kunt gebruiken. Dit betekent dat als u een query kopieert en plakt met deze syntaxis in een andere Azure Databricks-interface, zoals een notebook- of AI/BI-dashboardgegevensseteditor, de query handmatig moet worden aangepast om benoemde parametermarkeringen te gebruiken voordat deze zonder fouten wordt uitgevoerd.
In de SQL-editor wordt elke tekenreeks tussen dubbele accolades {{ }}
behandeld als een queryparameter. Er wordt een widget weergegeven boven het resultatenvenster waar u de parameterwaarde instelt. Hoewel Azure Databricks over het algemeen het gebruik van benoemde parametermarkeringen aanbeveelt, wordt sommige functionaliteit alleen ondersteund met behulp van de syntaxis van de mustache-parameter.
Gebruik de syntaxis van de mustache-parameter voor de volgende functionaliteit:
- Verouderde dashboardfilters
- Vervolgkeuzelijst met meerdere waarden
- Vervolgkeuzelijsten op basis van query's
Een mustache-parameter toevoegen
- Typ
Cmd + I
. De parameter wordt ingevoegd in de tekst caret en het dialoogvenster Parameter toevoegen wordt weergegeven.- Trefwoord: het trefwoord dat de parameter in de query vertegenwoordigt.
- Titel: De titel die over de widget wordt weergegeven. De titel is standaard hetzelfde als het trefwoord.
- Type: Ondersteunde typen zijn tekst, getal, datum, datum en tijd, datum en tijd (met seconden), vervolgkeuzelijst en vervolgkeuzelijst op basis van query's. De standaardwaarde is de tekst.
- Voer het trefwoord in, overschrijf eventueel de titel en selecteer het parametertype.
- Klik op Parameter toevoegen.
- Stel in de parameterwidget de parameterwaarde in.
- Klik op Wijzigingen toepassen.
- Klik op Opslaan.
U kunt ook dubbele accolades {{ }}
typen en op het tandwielpictogram in de buurt van de parameterwidget klikken om de instellingen te bewerken.
Als u de query opnieuw wilt uitvoeren met een andere parameterwaarde, voert u de waarde in de widget in en klikt u op Wijzigingen toepassen.
Een queryparameter bewerken
Als u een parameter wilt bewerken, klikt u op het tandwielpictogram naast de parameterwidget. Als u wilt voorkomen dat gebruikers die geen eigenaar zijn van de query de parameter wijzigen, klikt u op Alleen resultaten weergeven. Het <Keyword>
parameterdialoogvenster wordt weergegeven.
Een queryparameter verwijderen
Als u een queryparameter wilt verwijderen, verwijdert u de parameter uit uw query. De parameterwidget verdwijnt en u kunt uw query opnieuw schrijven met behulp van statische waarden.
De volgorde van parameters wijzigen
Als u de volgorde wilt wijzigen waarin parameters worden weergegeven, kunt u op elke parameter klikken en naar de gewenste positie slepen.
Queryparametertypen
Sms verzenden
Neemt een tekenreeks als invoer. Backslash-, enkele en dubbele aanhalingstekens worden ontsnapt en Azure Databricks voegt aanhalingstekens toe aan deze parameter. Een tekenreeks zoals mr's Li"s
deze wordt omgezet in 'mr\'s Li\"s'
een voorbeeld van het gebruik hiervan kan bijvoorbeeld zijn
SELECT * FROM users WHERE name={{ text_param }}
Aantal
Neemt een getal als invoer. Een voorbeeld van het gebruik hiervan kan zijn
SELECT * FROM users WHERE age={{ number_param }}
Vervolgkeuzelijst
Als u het bereik van mogelijke parameterwaarden wilt beperken bij het uitvoeren van een query, gebruikt u het parametertype Vervolgkeuzelijst . Een voorbeeld hiervan is SELECT * FROM users WHERE name='{{ dropdown_param }}'
. Wanneer u deze optie selecteert in het deelvenster parameterinstellingen, wordt er een tekstvak weergegeven waarin u de toegestane waarden invoert, elke waarde gescheiden door een nieuwe regel. Vervolgkeuzelijsten zijn tekstparameters. Als u datums of datums en tijden in de vervolgkeuzelijst wilt gebruiken, voert u deze in de indeling in die uw gegevensbron nodig heeft. De tekenreeksen worden niet ontsnapt. U kunt kiezen tussen een vervolgkeuzelijst met één waarde of meerdere waarden.
- Enkele waarde: enkele aanhalingstekens rond de parameter zijn vereist.
- Meerdere waarden: schakel de optie Meerdere waarden toestaan in. Kies in de vervolgkeuzelijst Offerte of u de parameters wilt laten staan zoals opgegeven (geen aanhalingstekens) of de parameters tussen enkele of dubbele aanhalingstekens laten staan. U hoeft geen aanhalingstekens toe te voegen rond de parameter als u aanhalingstekens kiest.
Wijzig uw WHERE
component om het IN
trefwoord in uw query te gebruiken.
SELECT ...
FROM ...
WHERE field IN ( {{ Multi Select Parameter }} )
Met de parameterwidget voor meerdere selecties kunt u meerdere waarden doorgeven aan de database. Als u de optie Dubbele aanhalingstekens voor de parameter Aanhalingsteken selecteert, geeft uw query de volgende indeling weer: WHERE IN ("value1", "value2", "value3")
Vervolgkeuzelijst op basis van query's
Neemt het resultaat van een query als invoer. Het heeft hetzelfde gedrag als de parameter vervolgkeuzelijst . U moet de Databricks SQL-vervolgkeuzelijstquery opslaan om deze als invoer in een andere query te kunnen gebruiken.
- Klik op vervolgkeuzelijst op basis van query's onder Type in het deelvenster Instellingen.
- Klik op het veld Query en selecteer een query. Als uw doelquery een groot aantal records retourneert, worden de prestaties verslechterd.
Als uw doelquery meer dan één kolom retourneert, gebruikt Databricks SQL de eerste . Als uw doelquery retourneert en kolommen retourneertname
, vult Databricks SQL de widget parameterselectie in met de name
kolom, maar voert u de query uit met de bijbehorendevalue
.value
Stel dat de volgende query de gegevens in de tabel retourneert.
SELECT user_uuid AS 'value', username AS 'name'
FROM users
waarde | naam |
---|---|
1001 | John Smith |
1002 | Jane Doe |
1003 | Bobby Tables |
Wanneer Azure Databricks de query uitvoert, is de waarde die wordt doorgegeven aan de database 1001, 1002 of 1003.
Datum en tijd
Azure Databricks heeft verschillende opties voor het parameteriseren van datum- en tijdstempelwaarden, waaronder opties om de parameterisering van tijdsbereiken te vereenvoudigen. U kunt kiezen uit drie opties met verschillende precisie:
Optie | Precisie | Type |
---|---|---|
Datum | dagen | DATE |
Datum en tijd | minuten | TIMESTAMP |
Datum en tijd (met seconden) | seconde | TIMESTAMP |
Wanneer u een bereikparameteroptie kiest, maakt u twee parameters die zijn aangewezen door .start
en .end
achtervoegsels. Alle opties geven parameters door aan uw query als letterlijke tekenreeksen; Voor Azure Databricks moeten datum- en tijdwaarden tussen enkele aanhalingstekens ('
) worden verpakt. Voorbeeld:
-- Date parameter
SELECT *
FROM usage_logs
WHERE date = '{{ date_param }}'
-- Date and Time Range parameter
SELECT *
FROM usage_logs
WHERE modified_time > '{{ date_range.start }}' and modified_time < '{{ date_range.end }}'
Datumparameters gebruiken een interface voor het kiezen van agenda's en gebruiken standaard de huidige datum en tijd.
Notitie
De parameter Datumbereik retourneert alleen de juiste resultaten voor kolommen van het DATE
type. Gebruik TIMESTAMP
voor kolommen een van de opties datum- en tijdsbereik.
Dynamische datum- en datumbereikwaarden
Wanneer u een datum- of datumbereikparameter aan uw query toevoegt, wordt in de selectiewidget een blauw bliksemschichtpictogram weergegeven. Klik erop om dynamische waarden weer te geven, zoals , , , , of last year
last month
. last week
this week
yesterday
today
Deze waarden worden dynamisch bijgewerkt.
Belangrijk
Dynamische datums en datumbereiken zijn niet compatibel met geplande query's.
Queryparameters gebruiken in dashboards
Optioneel kunnen query's parameters of statische waarden gebruiken. Wanneer een visualisatie op basis van een geparameteriseerde query wordt toegevoegd aan een dashboard, kan de visualisatie worden geconfigureerd voor het gebruik van een van de volgende opties:
Widgetparameter
Widgetparameters zijn specifiek voor één visualisatie in een dashboard, worden weergegeven in het visualisatievenster en de opgegeven parameterwaarden zijn alleen van toepassing op de query die onder de visualisatie wordt uitgevoerd.
Dashboardparameter
Dashboardparameters kunnen worden toegepast op meerdere visualisaties. Wanneer u een visualisatie toevoegt op basis van een geparameteriseerde query aan een dashboard, wordt de parameter standaard toegevoegd als een dashboardparameter. Dashboardparameters zijn geconfigureerd voor een of meer visualisaties in een dashboard en worden boven aan het dashboard weergegeven. De parameterwaarden die zijn opgegeven voor een dashboardparameter zijn van toepassing op visualisaties die die specifieke dashboardparameter hergebruiken. Een dashboard kan meerdere parameters bevatten, die elk kunnen worden toegepast op sommige visualisaties en niet op andere.
Statische waarde
Statische waarden worden gebruikt in plaats van een parameter die reageert op wijzigingen. Met statische waarden kunt u een waarde hard coden in plaats van een parameter. Ze zorgen ervoor dat de parameter 'verdwijnt' uit het dashboard of de widget waar deze eerder werd weergegeven.
Wanneer u een visualisatie met een geparameteriseerde query toevoegt, kunt u de titel en de bron voor de parameter in de visualisatiequery kiezen door op het juiste potloodpictogram te klikken. U kunt ook het trefwoord en een standaardwaarde selecteren. Zie parametereigenschappen.
Nadat u een visualisatie aan een dashboard hebt toegevoegd, opent u de interface voor parametertoewijzing door in de rechterbovenhoek van een dashboardwidget te klikken op het menu Voor de parametertoewijzing en vervolgens op Widgetinstellingen wijzigen te klikken.
Parametereigenschappen
Titel: De weergavenaam die naast de waardekiezer op uw dashboard wordt weergegeven. Deze wordt standaard ingesteld op het parameterwoord. Als u het wilt bewerken, klikt u op het potloodpictogram . Titels worden niet weergegeven voor statische dashboardparameters omdat de waardekiezer verborgen is. Als u statische waarde als waardebron selecteert, wordt het veld Titel grijs weergegeven.
Trefwoord: de letterlijke tekenreeks voor deze parameter in de onderliggende query. Dit is handig voor foutopsporing als uw dashboard niet de verwachte resultaten retourneert.
Standaardwaarde: de waarde die wordt gebruikt als er geen andere waarde is opgegeven. Als u dit wilt wijzigen vanuit het queryscherm, voert u de query uit met de gewenste parameterwaarde en klikt u op de knop Opslaan .
Waardebron: de bron van de parameterwaarde. Klik op het potloodpictogram om een bron te kiezen.
- Nieuwe dashboardparameter: maak een nieuwe parameter op dashboardniveau. Hiermee kunt u een parameterwaarde instellen op één plaats op uw dashboard en deze toewijzen aan meerdere visualisaties.
- Bestaande dashboardparameter: Wijs de parameter toe aan een bestaande dashboardparameter. U moet opgeven welke bestaande dashboardparameter al bestaat.
- Widgetparameter: Geeft een waardekiezer weer in de dashboardwidget. Dit is handig voor eenmalige parameters die niet worden gedeeld tussen widgets.
- Statische waarde: Kies een statische waarde voor de widget, ongeacht de waarden die op andere widgets worden gebruikt. Statisch toegewezen parameterwaarden geven nergens een waardekiezer weer op het dashboard, wat compacter is. Hiermee kunt u profiteren van de flexibiliteit van queryparameters zonder dat u de gebruikersinterface op een dashboard onoverzichtelijk maakt wanneer bepaalde parameters naar verwachting niet regelmatig worden gewijzigd.
Veelgestelde vragen (FAQ)
- Kan ik dezelfde parameter meerdere keren opnieuw gebruiken in één query?
- Kan ik meerdere parameters in één query gebruiken?
Kan ik dezelfde parameter meerdere keren opnieuw gebruiken in één query?
Ja. Gebruik dezelfde id in de accolades. In dit voorbeeld wordt de {{org_id}}
parameter twee keer gebruikt.
SELECT {{org_id}}, count(0)
FROM queries
WHERE org_id = {{org_id}}
Kan ik meerdere parameters in één query gebruiken?
Ja. Gebruik een unieke naam voor elke parameter. In dit voorbeeld worden twee parameters gebruikt: {{org_id}}
en {{start_date}}
.
SELECT count(0)
FROM queries
WHERE org_id = {{org_id}} AND created_at > '{{start_date}}'