Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los marcadores de parámetros con nombre permiten insertar valores de variable en consultas SQL en tiempo de ejecución. En lugar de codificar valores específicos de forma rígida, se definen marcadores de posición tipados que los usuarios rellenan cuando se ejecuta la consulta. Esto mejora la reutilización de consultas, evita la inserción de SQL y facilita la creación de consultas flexibles e interactivas.
Los marcadores de parámetros con nombre funcionan en las siguientes superficies de Databricks:
- Editor de SQL (nuevo y heredado)
- Cuadernos
- Editor de conjunto de datos de panel AI/BI
- Espacios de Genie
Adición de un marcador de parámetro con nombre
Inserte un parámetro escribiendo dos puntos seguidos de un nombre de parámetro, como :parameter_name. Al agregar un marcador de parámetro con nombre a una consulta, aparece un widget donde puede establecer el tipo de parámetro y el valor. Consulte Trabajar con widgets de parámetros.
En este ejemplo se convierte una consulta codificada de forma rígida para usar un parámetro con nombre.
Consulta de inicio:
SELECT
trip_distance,
fare_amount
FROM
samples.nyctaxi.trips
WHERE
fare_amount < 5
- Elimine
5de laWHEREcláusula . - Escriba
:fare_parameteren su lugar. La última línea debe leerfare_amount < :fare_parameter. - Haga clic en el icono de engranaje cerca del widget de parámetros.
- Establezca el tipo en Decimal.
- Escriba un valor en el widget de parámetros y haga clic en Aplicar cambios.
- Haga clic en Guardar.
Tipos de parámetro
Establezca el tipo de parámetro en el panel de configuración de parámetros. El tipo determina cómo Databricks interpreta y controla el valor en tiempo de ejecución.
| Tipo | Descripción |
|---|---|
| String | Texto de forma libre. Las barras diagonales inversas, las comillas simples y dobles se escapan automáticamente. Databricks agrega comillas alrededor del valor. |
| Entero | Valor de número entero. |
| Decimal | Valor numérico que admite valores fraccionarios. |
| Fecha | Valor de fecha. Usa un selector de calendario y se predetermina a la fecha actual. |
| Timestamp | Valor de fecha y hora. Usa un selector de calendario y se predetermina en la fecha y hora actuales. |
Ejemplos de sintaxis de parámetros con nombre
En los ejemplos siguientes se muestran patrones comunes para los marcadores de parámetros con nombre.
Insertar una fecha
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
Insertar un número
SELECT
o_orderdate AS Date,
o_orderpriority AS Priority,
o_totalprice AS Price
FROM
samples.tpch.orders
WHERE
o_totalprice > :num_param
Insertar un nombre de campo
Use la IDENTIFIER función para pasar un nombre de columna como parámetro. El valor del parámetro debe ser un nombre de columna de la tabla utilizada en la consulta.
SELECT * FROM samples.tpch.orders
WHERE IDENTIFIER(:field_param) < 10000
Insertar objetos de base de datos
Use la IDENTIFIER función con varios parámetros para especificar un catálogo, un esquema y una tabla en tiempo de ejecución.
SELECT *
FROM IDENTIFIER(:catalog || '.' || :schema || '.' || :table)
Consulte la cláusula IDENTIFIER.
Concatenar varios parámetros
Use format_string para combinar parámetros en una sola cadena con formato. Consulte la función format_string.
SELECT o_orderkey, o_clerk
FROM samples.tpch.orders
WHERE o_clerk LIKE format_string('%s%s', :title, :emp_number)
Trabajar con cadenas JSON
Use la from_json función para extraer un valor de una cadena JSON mediante un parámetro como clave. Sustituyendo a como valor para :param devuelve 1.
SELECT from_json('{"a": 1}', 'map<string, int>') [:param]
Crear un intervalo
Use CAST para convertir un valor de parámetro en un INTERVAL tipo para los cálculos basados en el tiempo. Consulte Tipo de intervalo.
SELECT CAST(:param AS INTERVAL MINUTE)
Adición de un intervalo de fechas mediante .min y .max
Los parámetros date y Timestamp admiten un widget de intervalo. Use .min y .max para acceder al inicio y al final del intervalo.
SELECT * FROM samples.nyctaxi.trips
WHERE tpep_pickup_datetime
BETWEEN :date_range.min AND :date_range.max
Establezca el tipo de parámetro en Date o Timestamp y el tipo de widget en Range.
Adición de un intervalo de fechas mediante dos parámetros
SELECT * FROM samples.nyctaxi.trips
WHERE tpep_pickup_datetime
BETWEEN CAST(:date_range_min AS TIMESTAMP) AND CAST(:date_range_max AS TIMESTAMP)
Parametrizar la granularidad del resumen
Use DATE_TRUNC para agregar resultados en un nivel seleccionado por el usuario de granularidad. Pase DAY, MONTHo YEAR como valor de parámetro.
SELECT
DATE_TRUNC(:date_granularity, tpep_pickup_datetime) AS date_rollup,
COUNT(*) AS total_trips
FROM samples.nyctaxi.trips
GROUP BY date_rollup
Pasar varios valores como una cadena
Use ARRAY_CONTAINS, SPLITy TRANSFORM para filtrar por una lista separada por comas de valores pasados como un único parámetro de cadena.
SPLIT analiza la cadena separada por comas en una matriz.
TRANSFORM recorta el espacio en blanco de cada elemento.
ARRAY_CONTAINS comprueba si el valor de la tabla aparece en la matriz resultante.
SELECT * FROM samples.nyctaxi.trips WHERE
array_contains(
TRANSFORM(SPLIT(:list_parameter, ','), s -> TRIM(s)),
CAST(dropoff_zip AS STRING)
)
Nota
Este ejemplo funciona para valores de cadena. Para usar otros tipos de datos, envuelva la TRANSFORM operación con CAST para convertir los elementos en el tipo deseado.
Referencia de migración de sintaxis
Usa esta tabla al convertir consultas de sintaxis Mustache a marcadores de parámetros con nombre. Consulte Sintaxis de parámetros Mustache para obtener más información sobre la sintaxis heredada.
| Caso de uso | Sintaxis de Mustache | Sintaxis de parámetros con nombre |
|---|---|---|
| Filtrar por fecha | WHERE date_field < '{{date_param}}' |
WHERE date_field < :date_param |
| Filtrar por número | WHERE price < {{max_price}} |
WHERE price < :max_price |
| Comparación de cadenas | WHERE region = '{{region_param}}' |
WHERE region = :region_param |
| Especificar una tabla | SELECT * FROM {{table_name}} |
SELECT * FROM IDENTIFIER(:table) : use el espacio de nombres completo de tres niveles. |
| Especificar catálogo, esquema y tabla | SELECT * FROM {{catalog}}.{{schema}}.{{table}} |
SELECT * FROM IDENTIFIER(:catalog \|\| '.' \|\| :schema \|\| '.' \|\| :table) |
| Dar formato a una cadena de varios parámetros | "({{area_code}}) {{phone_number}}" |
format_string("(%d) %d", :area_code, :phone_number) |
| Crear un intervalo | SELECT INTERVAL {{p}} MINUTE |
SELECT CAST(format_string("INTERVAL '%s' MINUTE", :param) AS INTERVAL MINUTE) |