Conexión a dbt Cloud
dbt (herramienta de compilación de datos) es un entorno de desarrollo que permite a los analistas e ingenieros de datos transformar datos simplemente escribiendo instrucciones select. dbt controla la conversión de estas instrucciones select en tablas y vistas. dbt compila el código en SQL sin procesar y, después, ejecuta ese código en la base de datos especificada en Azure Databricks. dbt admite patrones de codificación y procedimientos recomendados para la colaboración, como el control de versiones, la documentación y la modularidad.
dbt no extrae ni carga datos. dbt se centra solo en el paso de transformación, mediante una arquitectura de "transformación después de la carga". dbt supone que ya tiene una copia de los datos en la base de datos.
Este artículo se centra en dbt Cloud. dbt Cloud incluye compatibilidad llave en mano para programar trabajos, CI/CD, documentación de servicio, supervisión y alertas, y un entorno de desarrollo integrado (IDE).
También está disponible una versión local de dbt denominada dbt Core. dbt Core permite escribir código dbt en el editor de texto o el IDE que prefiera en la máquina de desarrollo local y, luego, ejecutar dbt desde la línea de comandos. dbt Core incluye la interfaz de la línea de comandos (CLI) de dbt. La CLI de dbt es gratuita y de código abierto. Para más información, consulte Conexión a dbt Core.
Dado que dbt Cloud y dbt Core pueden usar repositorios git hospedados (por ejemplo, en GitHub, GitLab o BitBucket), puede usar dbt Cloud para crear un proyecto de dbt y, después, hacer que esté disponible para los usuarios de dbt Cloud y dbt Core. Para más información, consulte Creación de un proyecto de dbt y Uso de un proyecto existente en el sitio web de dbt.
Para información general sobre dbt, vea el siguiente vídeo de YouTube (26 minutos).
Conexión a dbt Cloud mediante Partner Connect
En esta sección se describe cómo conectar el almacén de Databricks SQL a dbt Cloud mediante Partner Connect y, a continuación, proporcionar a dbt Cloud acceso de lectura a los datos.
Diferencias entre las conexiones estándar y dbt Cloud
Para conectarse a dbt Cloud mediante Partner Connect, siga los pasos descritos en Conexión a partners de preparación de datos con Partner Connect. La conexión dbt Cloud es diferente de las conexiones estándar de preparación y transformación de datos de las maneras siguientes:
- Además de una entidad principal de servicio y un token de acceso personal, Partner Connect crea por defecto un almacén SQL (antes punto final SQL) denominado DBT_CLOUD_ENDPOINT.
Pasos para establecer la conexión
Para conectarse a dbt Cloud mediante Partner Connect, haga lo siguiente:
Conexión a partners de preparación de datos con Partner Connect.
Después de conectarse a dbt Cloud, aparece el panel de dbt Cloud. Para explorar el proyecto de dbt Cloud, en la barra de menús, junto al logotipo de dbt, seleccione el nombre de la cuenta de dbt en la primera lista desplegable si no se muestra y, después, seleccione el proyecto Databricks Partner Connect Trial en el segundo menú desplegable si no se muestra.
Sugerencia
Para ver la configuración del proyecto, haga clic en el menú de las "tres franjas" o de la "hamburguesa", luego en Account Settings > Projects y, finalmente, en el nombre del proyecto. Para ver la configuración de la conexión, haga clic en el vínculo que hay junto a Connection. Para cambiar cualquier valor de configuración, haga clic en Edit.
Para ver la información del token de acceso personal de Azure Databricks de este proyecto, haga clic en el icono de "persona" de la barra de menús, haga clic en Profile > Credentials > Databricks Partner Connect Trial y haga clic en el nombre del proyecto. Para hacer un cambio, haga clic en Editar.
Pasos para dar a dbt Cloud acceso de lectura a sus datos
Partner Connect concede permiso de solo creación a la entidad de servicio DBT_CLOUD_USER solo en el catálogo predeterminado. Siga estos pasos en el área de trabajo de Azure Databricks para conceder a la entidad de servicio DBT_CLOUD_USER acceso de lectura a los datos que elija.
Advertencia
Puede adaptar estos pasos para proporcionar a dbt Cloud acceso adicional en los catálogos, bases de datos y tablas del área de trabajo. Sin embargo, como procedimiento recomendado de seguridad, Databricks recomienda encarecidamente conceder acceso solo a las tablas individuales con las que necesite que la entidad de servicio DBT_CLOUD_USER trabaje y solo acceso de lectura a esas tablas.
Haga clic en Catálogo en la barra lateral.
Seleccione el almacén de SQL (DBT_CLOUD_ENDPOINT) de la lista desplegable de la parte superior derecha.
- En Explorador de catálogo, seleccione el catálogo que contiene la base de datos de la tabla.
- Seleccione la base de datos que contiene la tabla.
- Seleccione la tabla.
Sugerencia
Si no ve el catálogo, la base de datos o la tabla enumerados, escriba cualquier parte del nombre en los cuadros Select Catalog, Select Database o Filter tables, respectivamente, para restringir la lista.
Haga clic en Permisos.
Haga clic en Conceder.
En Type to add multiple users or groups, seleccione DBT_CLOUD_USER. Esta es la entidad de servicio de Azure Databricks que Partner Connect creó automáticamente en la sección anterior.
Sugerencia
Si no ve DBT_CLOUD_USER, empiece a escribir
DBT_CLOUD_USER
en el cuadro Type to add multiple users or groups hasta que aparezca en la lista y, después, selecciónelo.Conceda acceso de lectura solamente mediante la selección de
SELECT
yREAD METADATA
.Haga clic en OK.
Repita los pasos del 4 al 9 para cada tabla adicional a la que desee conceder a dbt Cloud acceso de lectura.
Solución de problemas de la conexión dbt Cloud
Si alguien elimina el proyecto en dbt Cloud para esta cuenta y hace clic en el icono de dbt, aparece un mensaje de error, lo que indica que no se encuentra el proyecto. Para corregirlo, haga clic en Delete connection y, después, comience desde el principio de este procedimiento para volver a crear la conexión.
Conexión manual a dbt Cloud
Esta sección describe cómo conectar un clúster de Azure Databricks o un almacén de Databricks SQL en el área de trabajo de Azure Databricks a dbt Cloud.
Importante
Databricks recomienda conectarse a un almacén de SQL. Si no tiene el derecho de acceso a Databricks SQL o si desea ejecutar modelos de Python, puede conectarse a un clúster en su lugar.
Requisitos
Un clúster o almacén SQL en el área de trabajo de Azure Databricks.
Los detalles de la conexión del clúster o almacén SQL, concretamente los valores Nombre de host del servidor, Puerto y Ruta de acceso HTTP.
Un token de acceso personal de Azure Databricks o un token de Microsoft Entra ID (anteriormente, Azure Active Directory). Para crear un token de acceso personal, haga lo siguiente:
- En el área de trabajo de Azure Databricks, haga clic en el nombre de usuario de Azure Databricks de la barra superior y, a continuación, seleccione Configuración en la lista desplegable.
- Haga clic en Desarrollador.
- Junto a Tokens de acceso, haga clic en Administrar.
- Haga clic en Generate new token (Generar nuevo token).
- (Opcional) Escriba un comentario que le ayude a identificar este token en el futuro y cambie la duración predeterminada del token de 90 días. Para crear un token sin duración (no recomendado), deje el cuadro Duración (días) vacío (en blanco).
- Haga clic en Generar.
- Copie el token mostrado en una ubicación segura y, a continuación, haga clic en Listo.
Nota:
Asegúrese de guardar el token copiado en una ubicación segura. No comparta el token copiado con otros usuarios. Si pierde el token copiado, no podrá volver a generar ese mismo token. Debe repetir el procedimiento para crear un nuevo token. Si pierde el token copiado o cree que el token se ha visto comprometido, Databricks recomienda eliminar inmediatamente ese token del área de trabajo haciendo clic en el icono de papelera (Revocar) situado junto al token en la página Tokens de acceso.
Si no puede crear o usar tokens en el área de trabajo, puede deberse a que el administrador del área de trabajo tiene tokens deshabilitados o no le ha concedido permiso para crear o usar tokens. Consulte el administrador del área de trabajo o los siguientes temas:
Nota:
Como procedimiento recomendado de seguridad, cuando se autentique con herramientas, sistemas, scripts y aplicaciones automatizados, Databricks recomienda usar los tokens de acceso personal pertenecientes a las entidades de servicio en lugar de a los usuarios del área de trabajo. Para crear tókenes para entidades de servicio, consulte Administración de tokens de acceso para una entidad de servicio.
Para conectar dbt Cloud a los datos administrados por Unity Catalog, dbt versión 1.1 o posterior.
Los pasos de este artículo crean un nuevo entorno que usa la versión más reciente de dbt. Para obtener información sobre cómo actualizar la versión de dbt para un entorno existente, consulte Actualización a la versión más reciente de dbt en la nube en la documentación de dbt.
Paso 1: Suscripción a dbt Cloud
Vaya a la página de registro de dbt Cloud y escriba su dirección de correo electrónico, su nombre y la información de la empresa. Cree una contraseña y haga clic en Crear mi cuenta.
Paso 2: Creación de un proyecto de dbt
En este paso, se crea un proyecto de dbt que contiene una conexión a un clúster de Azure Databricks o un almacén de SQL, un repositorio que contiene el código fuente y uno o varios entornos (como entornos de prueba y producción).
Haga clic en el icono de configuración y, luego, haga clic en Configuración de la cuenta.
Haga clic en Nuevo proyecto.
En Nombre, escriba un nombre único para el proyecto y haga clic en Continuar.
En Elegir una conexión, haga clic en Databricks y, luego, haga clic en Siguiente.
En Nombre, escriba un nombre único para esta conexión.
En Seleccionar adaptador, haga clic en Databricks (dbt-databricks).
Nota:
Databricks recomienda usar
dbt-databricks
, que admite el catálogo de Unity, en lugar dedbt-spark
. De forma predeterminada, los nuevos proyectos usandbt-databricks
. Para migrar un proyecto existente adbt-databricks
, consulte Migración de dbt-spark a dbt-databricks en la documentación de dbt.En Configuración, para Nombre de host del servidor, escriba el valor de nombre de host del servidor de los requisitos.
En el campo Ruta de acceso HTTP, escriba el valor de Ruta de acceso HTTP que obtuvo al cumplir los requisitos.
Si el área de trabajo está habilitada para Unity Catalog, en Configuración opcional, escriba el nombre del catálogo para que dbt Cloud lo use.
En Credenciales de desarrollo, en Token, escriba el token de acceso personal o el token de Microsoft Entra ID de los requisitos.
En Esquema, escriba el nombre del esquema donde quiera que dbt Cloud cree las tablas y vistas (por ejemplo,
default
).Haga clic en Probar conexión.
Cuando la prueba se realice correctamente, haga clic en Siguiente.
Para obtener más información, consulte Conexión a ODBC de Databricks en el sitio web de dbt.
Sugerencia
Para ver o cambiar la configuración de este proyecto, o para eliminar el proyecto por completo, haga clic en el icono de configuración, clic en Configuración de la cuenta > Proyectos y el nombre del proyecto. Para cambiar la configuración, haga clic en Editar. Para eliminar el proyecto, haga clic en Editar > Eliminar proyecto.
Para ver o cambiar el valor del token de acceso personal de Azure Databricks para este proyecto, haga clic en el icono de persona, Perfil > Credenciales y el nombre del proyecto. Para hacer un cambio, haga clic en Editar.
Después de conectarse a un clúster de Azure Databricks o a un almacén de Databricks SQL, siga las instrucciones en pantalla para la Configuración de un repositorio y haga clic en Continuar.
Después de configurar el repositorio, siga las instrucciones en pantalla para invitar a usuarios y haga clic en Completar. También puede hacer clic en Omitir y completar.
Tutorial
En esta sección, usará el proyecto dbt Cloud para trabajar con varios datos de ejemplo. En esta sección se da por hecho que ya ha creado el proyecto y que el IDE de dbt Cloud está abierto a ese proyecto.
Paso 1: Creación y ejecución de modelos
En este paso, usará el IDE de dbt Cloud para crear y ejecutar modelos, que son instrucciones select
que crean una nueva vista (el valor predeterminado) o una nueva tabla en una base de datos en función de los datos existentes en la base de datos en cuestión. En este procedimiento se crea un modelo basado en la tabla diamonds
de ejemplo a partir de los conjuntos de datos de ejemplo.
Use el código siguiente para crear esta tabla.
DROP TABLE IF EXISTS diamonds;
CREATE TABLE diamonds USING CSV OPTIONS (path "/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv", header "true")
En este procedimiento se da por supuesto que esta tabla ya se ha creado en la base de datos default
del área de trabajo.
Con el proyecto abierto, haga clic en Desarrollar en la parte superior de la interfaz de usuario.
Haga clic en Inicializar proyecto de dbt.
Haga clic en Confirmar y sincronizar, escriba un mensaje de confirmación y, a continuación, haga clic en Confirmar.
Haga clic en Crear rama, escriba un nombre para la rama y, a continuación, haga clic en Enviar.
Cree el primer modelo: haga clic en Crear nuevo archivo.
En el editor de texto, escriba la siguiente instrucción SQL. Esta instrucción selecciona solo los detalles de quilates, corte, color y claridad de cada diamante de la tabla
diamonds
. El bloqueconfig
indica a dbt que cree una tabla en la base de datos a partir de esta instrucción.{{ config( materialized='table', file_format='delta' ) }}
select carat, cut, color, clarity from diamonds
Sugerencia
Para ver opciones adicionales
config
, como la estrategia incrementalmerge
, consulte Configuración de Databricks en la documentación de dbt.Haga clic en Guardar como.
En el nombre de archivo, escriba
models/diamonds_four_cs.sql
y, a continuación, haga clic en Crear.Cree el segundo modelo: haga clic en (Crear nuevo archivo) en la esquina superior derecha.
En el editor de texto, escriba la siguiente instrucción SQL. Esta instrucción selecciona valores únicos de la columna
colors
de la tabladiamonds_four_cs
y ordena los resultados en orden alfabético del primero al último. Dado que no hay ningún bloqueconfig
, este modelo indica a dbt que cree una vista en la base de datos basada en esta instrucción.select distinct color from diamonds_four_cs sort by color asc
Haga clic en Guardar como.
En el nombre de archivo, escriba
models/diamonds_list_colors.sql
y, a continuación, haga clic en Crear.Cree el tercer modelo: haga clic en (Crear nuevo archivo) en la esquina superior derecha.
En el editor de texto, escriba la siguiente instrucción SQL. Esta instrucción hace un promedio de los precios de los diamantes por color y ordena los resultados por precio medio de mayor a menor. Este modelo indica a dbt que cree una vista en la base de datos basada en esta instrucción.
select color, avg(price) as price from diamonds group by color order by price desc
Haga clic en Guardar como.
En el nombre de archivo, escriba
models/diamonds_prices.sql
y haga clic en Crear.Ejecute los modelos: en la línea de comandos, ejecute el comando
dbt run
con las rutas de acceso a los tres archivos anteriores. En la base de datosdefault
, dbt crea una tabla denominadadiamonds_four_cs
y dos vistas denominadasdiamonds_list_colors
ydiamonds_prices
. dbt obtiene estos nombres de vista y de tabla de sus nombres de archivo.sql
relacionados.dbt run --model models/diamonds_four_cs.sql models/diamonds_list_colors.sql models/diamonds_prices.sql
... ... | 1 of 3 START table model default.diamonds_four_cs.................... [RUN] ... | 1 of 3 OK created table model default.diamonds_four_cs............... [OK ...] ... | 2 of 3 START view model default.diamonds_list_colors................. [RUN] ... | 2 of 3 OK created view model default.diamonds_list_colors............ [OK ...] ... | 3 of 3 START view model default.diamonds_prices...................... [RUN] ... | 3 of 3 OK created view model default.diamonds_prices................. [OK ...] ... | ... | Finished running 1 table model, 2 view models ... Completed successfully Done. PASS=3 WARN=0 ERROR=0 SKIP=0 TOTAL=3
Ejecute el siguiente código SQL para mostrar información sobre las nuevas vistas y para seleccionar todas las filas de la tabla y las vistas.
Si se conecta a un clúster, puede ejecutar este código SQL desde un cuaderno asociado al clúster, especificando SQL como idioma predeterminado para el cuaderno. Si se conecta a un almacén de SQL, puede ejecutar este código SQL desde una consulta.
SHOW views IN default
+-----------+----------------------+-------------+ | namespace | viewName | isTemporary | +===========+======================+=============+ | default | diamonds_list_colors | false | +-----------+----------------------+-------------+ | default | diamonds_prices | false | +-----------+----------------------+-------------+
SELECT * FROM diamonds_four_cs
+-------+---------+-------+---------+ | carat | cut | color | clarity | +=======+=========+=======+=========+ | 0.23 | Ideal | E | SI2 | +-------+---------+-------+---------+ | 0.21 | Premium | E | SI1 | +-------+---------+-------+---------+ ...
SELECT * FROM diamonds_list_colors
+-------+ | color | +=======+ | D | +-------+ | E | +-------+ ...
SELECT * FROM diamonds_prices
+-------+---------+ | color | price | +=======+=========+ | J | 5323.82 | +-------+---------+ | I | 5091.87 | +-------+---------+ ...
Paso 2: Creación y ejecución de modelos más complejos
En este paso, creará modelos más complejos para un conjunto de tablas de datos relacionadas. Estas tablas de datos contienen información sobre una liga deportiva ficticia con tres equipos que jugarán una temporada de seis partidos. Este procedimiento crea las tablas de datos y crea y ejecuta los modelos.
Ejecute el siguiente código SQL para crear las tablas de datos necesarias.
Si se conecta a un clúster, puede ejecutar este código SQL desde un cuaderno asociado al clúster, especificando SQL como idioma predeterminado para el cuaderno. Si se conecta a un almacén de SQL, puede ejecutar este código SQL desde una consulta.
Las tablas y vistas de este paso comienzan por
zzz_
para ayudar a identificarlas como parte de este ejemplo. No es necesario seguir este patrón para sus propias tablas y vistas.DROP TABLE IF EXISTS zzz_game_opponents; DROP TABLE IF EXISTS zzz_game_scores; DROP TABLE IF EXISTS zzz_games; DROP TABLE IF EXISTS zzz_teams; CREATE TABLE zzz_game_opponents ( game_id INT, home_team_id INT, visitor_team_id INT ) USING DELTA; INSERT INTO zzz_game_opponents VALUES (1, 1, 2); INSERT INTO zzz_game_opponents VALUES (2, 1, 3); INSERT INTO zzz_game_opponents VALUES (3, 2, 1); INSERT INTO zzz_game_opponents VALUES (4, 2, 3); INSERT INTO zzz_game_opponents VALUES (5, 3, 1); INSERT INTO zzz_game_opponents VALUES (6, 3, 2); -- Result: -- +---------+--------------+-----------------+ -- | game_id | home_team_id | visitor_team_id | -- +=========+==============+=================+ -- | 1 | 1 | 2 | -- +---------+--------------+-----------------+ -- | 2 | 1 | 3 | -- +---------+--------------+-----------------+ -- | 3 | 2 | 1 | -- +---------+--------------+-----------------+ -- | 4 | 2 | 3 | -- +---------+--------------+-----------------+ -- | 5 | 3 | 1 | -- +---------+--------------+-----------------+ -- | 6 | 3 | 2 | -- +---------+--------------+-----------------+ CREATE TABLE zzz_game_scores ( game_id INT, home_team_score INT, visitor_team_score INT ) USING DELTA; INSERT INTO zzz_game_scores VALUES (1, 4, 2); INSERT INTO zzz_game_scores VALUES (2, 0, 1); INSERT INTO zzz_game_scores VALUES (3, 1, 2); INSERT INTO zzz_game_scores VALUES (4, 3, 2); INSERT INTO zzz_game_scores VALUES (5, 3, 0); INSERT INTO zzz_game_scores VALUES (6, 3, 1); -- Result: -- +---------+-----------------+--------------------+ -- | game_id | home_team_score | visitor_team_score | -- +=========+=================+====================+ -- | 1 | 4 | 2 | -- +---------+-----------------+--------------------+ -- | 2 | 0 | 1 | -- +---------+-----------------+--------------------+ -- | 3 | 1 | 2 | -- +---------+-----------------+--------------------+ -- | 4 | 3 | 2 | -- +---------+-----------------+--------------------+ -- | 5 | 3 | 0 | -- +---------+-----------------+--------------------+ -- | 6 | 3 | 1 | -- +---------+-----------------+--------------------+ CREATE TABLE zzz_games ( game_id INT, game_date DATE ) USING DELTA; INSERT INTO zzz_games VALUES (1, '2020-12-12'); INSERT INTO zzz_games VALUES (2, '2021-01-09'); INSERT INTO zzz_games VALUES (3, '2020-12-19'); INSERT INTO zzz_games VALUES (4, '2021-01-16'); INSERT INTO zzz_games VALUES (5, '2021-01-23'); INSERT INTO zzz_games VALUES (6, '2021-02-06'); -- Result: -- +---------+------------+ -- | game_id | game_date | -- +=========+============+ -- | 1 | 2020-12-12 | -- +---------+------------+ -- | 2 | 2021-01-09 | -- +---------+------------+ -- | 3 | 2020-12-19 | -- +---------+------------+ -- | 4 | 2021-01-16 | -- +---------+------------+ -- | 5 | 2021-01-23 | -- +---------+------------+ -- | 6 | 2021-02-06 | -- +---------+------------+ CREATE TABLE zzz_teams ( team_id INT, team_city VARCHAR(15) ) USING DELTA; INSERT INTO zzz_teams VALUES (1, "San Francisco"); INSERT INTO zzz_teams VALUES (2, "Seattle"); INSERT INTO zzz_teams VALUES (3, "Amsterdam"); -- Result: -- +---------+---------------+ -- | team_id | team_city | -- +=========+===============+ -- | 1 | San Francisco | -- +---------+---------------+ -- | 2 | Seattle | -- +---------+---------------+ -- | 3 | Amsterdam | -- +---------+---------------+
Cree el primer modelo: haga clic en (Crear nuevo archivo) en la esquina superior derecha.
En el editor de texto, escriba la siguiente instrucción SQL. Esta instrucción crea una tabla que proporciona los detalles de cada partido, como los nombres y las puntuaciones de los equipos. El bloque
config
indica a dbt que cree una tabla en la base de datos a partir de esta instrucción.-- Create a table that provides full details for each game, including -- the game ID, the home and visiting teams' city names and scores, -- the game winner's city name, and the game date.
{{ config( materialized='table', file_format='delta' ) }}
-- Step 4 of 4: Replace the visitor team IDs with their city names. select game_id, home, t.team_city as visitor, home_score, visitor_score, -- Step 3 of 4: Display the city name for each game's winner. case when home_score > visitor_score then home when visitor_score > home_score then t.team_city end as winner, game_date as date from ( -- Step 2 of 4: Replace the home team IDs with their actual city names. select game_id, t.team_city as home, home_score, visitor_team_id, visitor_score, game_date from ( -- Step 1 of 4: Combine data from various tables (for example, game and team IDs, scores, dates). select g.game_id, go.home_team_id, gs.home_team_score as home_score, go.visitor_team_id, gs.visitor_team_score as visitor_score, g.game_date from zzz_games as g, zzz_game_opponents as go, zzz_game_scores as gs where g.game_id = go.game_id and g.game_id = gs.game_id ) as all_ids, zzz_teams as t where all_ids.home_team_id = t.team_id ) as visitor_ids, zzz_teams as t where visitor_ids.visitor_team_id = t.team_id order by game_date desc
Haga clic en Guardar como.
En el nombre de archivo, escriba
models/zzz_game_details.sql
y, a continuación, haga clic en Crear.Cree el segundo modelo: haga clic en (Crear nuevo archivo) en la esquina superior derecha.
En el editor de texto, escriba la siguiente instrucción SQL. Esta instrucción crea una vista que enumera los registros de victorias y derrotas de los equipos de la temporada.
-- Create a view that summarizes the season's win and loss records by team. -- Step 2 of 2: Calculate the number of wins and losses for each team. select winner as team, count(winner) as wins, -- Each team played in 4 games. (4 - count(winner)) as losses from ( -- Step 1 of 2: Determine the winner and loser for each game. select game_id, winner, case when home = winner then visitor else home end as loser from zzz_game_details ) group by winner order by wins desc
Haga clic en Guardar como.
En el nombre de archivo, escriba
models/zzz_win_loss_records.sql
y, a continuación, haga clic en Crear.Ejecute los modelos: en la línea de comandos, ejecute el comando
dbt run
con las rutas de acceso a los dos archivos anteriores. En la base de datosdefault
(como se especifica en la configuración del proyecto), dbt crea una tabla denominadazzz_game_details
y una vista con el nombrezzz_win_loss_records
. dbt obtiene estos nombres de vista y tabla de sus nombres de archivo.sql
relacionados.dbt run --model models/zzz_game_details.sql models/zzz_win_loss_records.sql
... ... | 1 of 2 START table model default.zzz_game_details.................... [RUN] ... | 1 of 2 OK created table model default.zzz_game_details............... [OK ...] ... | 2 of 2 START view model default.zzz_win_loss_records................. [RUN] ... | 2 of 2 OK created view model default.zzz_win_loss_records............ [OK ...] ... | ... | Finished running 1 table model, 1 view model ... Completed successfully Done. PASS=2 WARN=0 ERROR=0 SKIP=0 TOTAL=2
Ejecute el código SQL siguiente para enumerar la información sobre la nueva vista y seleccionar todas las filas de la tabla y la vista.
Si se conecta a un clúster, puede ejecutar este código SQL desde un cuaderno asociado al clúster, especificando SQL como idioma predeterminado para el cuaderno. Si se conecta a un almacén de SQL, puede ejecutar este código SQL desde una consulta.
SHOW VIEWS FROM default LIKE 'zzz_win_loss_records';
+-----------+----------------------+-------------+ | namespace | viewName | isTemporary | +===========+======================+=============+ | default | zzz_win_loss_records | false | +-----------+----------------------+-------------+
SELECT * FROM zzz_game_details;
+---------+---------------+---------------+------------+---------------+---------------+------------+ | game_id | home | visitor | home_score | visitor_score | winner | date | +=========+===============+===============+============+===============+===============+============+ | 1 | San Francisco | Seattle | 4 | 2 | San Francisco | 2020-12-12 | +---------+---------------+---------------+------------+---------------+---------------+------------+ | 2 | San Francisco | Amsterdam | 0 | 1 | Amsterdam | 2021-01-09 | +---------+---------------+---------------+------------+---------------+---------------+------------+ | 3 | Seattle | San Francisco | 1 | 2 | San Francisco | 2020-12-19 | +---------+---------------+---------------+------------+---------------+---------------+------------+ | 4 | Seattle | Amsterdam | 3 | 2 | Seattle | 2021-01-16 | +---------+---------------+---------------+------------+---------------+---------------+------------+ | 5 | Amsterdam | San Francisco | 3 | 0 | Amsterdam | 2021-01-23 | +---------+---------------+---------------+------------+---------------+---------------+------------+ | 6 | Amsterdam | Seattle | 3 | 1 | Amsterdam | 2021-02-06 | +---------+---------------+---------------+------------+---------------+---------------+------------+
SELECT * FROM zzz_win_loss_records;
+---------------+------+--------+ | team | wins | losses | +===============+======+========+ | Amsterdam | 3 | 1 | +---------------+------+--------+ | San Francisco | 2 | 2 | +---------------+------+--------+ | Seattle | 1 | 3 | +---------------+------+--------+
Paso 3: Creación y ejecución de pruebas
En este paso, creará pruebas, que son aserciones que hace en relación con los modelos. Al ejecutar estas pruebas, dbt le muestra si cada prueba del proyecto se supera o se suspende.
Hay dos tipos de pruebas. Las pruebas de esquema, escritas en YAML, devuelven el número de registros que no superan una instrucción de aserción. Cuando este número es cero, todos los registros son correctos y, por tanto, la prueba se supera. Las pruebas de datos son consultas específicas que deben devolver cero registros para superarse.
Cree las primeras pruebas de esquema: haga clic en (Crear nuevo archivo) en la esquina superior derecha.
En el editor de texto, escriba el siguiente contenido. Este archivo incluye pruebas de esquema que determinan si las columnas especificadas tienen valores únicos, no son valores NULL, solo tienen los valores especificados o una combinación.
version: 2 models: - name: zzz_game_details columns: - name: game_id tests: - unique - not_null - name: home tests: - not_null - accepted_values: values: ['Amsterdam', 'San Francisco', 'Seattle'] - name: visitor tests: - not_null - accepted_values: values: ['Amsterdam', 'San Francisco', 'Seattle'] - name: home_score tests: - not_null - name: visitor_score tests: - not_null - name: winner tests: - not_null - accepted_values: values: ['Amsterdam', 'San Francisco', 'Seattle'] - name: date tests: - not_null - name: zzz_win_loss_records columns: - name: team tests: - unique - not_null - relationships: to: ref('zzz_game_details') field: home - name: wins tests: - not_null - name: losses tests: - not_null
Haga clic en Guardar como.
En el nombre de archivo, escriba
models/schema.yml
y, a continuación, haga clic en Crear.Cree la primera prueba de datos: haga clic en (Crear nuevo archivo) en la esquina superior derecha.
En el editor de texto, escriba la siguiente instrucción SQL. Este archivo incluye una prueba de datos para determinar si se ha jugado algún partido fuera de la temporada estándar.
-- This season's games happened between 2020-12-12 and 2021-02-06. -- For this test to pass, this query must return no results. select date from zzz_game_details where date < '2020-12-12' or date > '2021-02-06'
Haga clic en Guardar como.
En el nombre de archivo, escriba
tests/zzz_game_details_check_dates.sql
y, a continuación, haga clic en Crear.Cree la segunda prueba de datos: haga clic en (Crear nuevo archivo) en la esquina superior derecha.
En el editor de texto, escriba la siguiente instrucción SQL. Este archivo incluye una prueba de datos para determinar si las puntuaciones eran negativas o si hubo algún empate.
-- This sport allows no negative scores or tie games. -- For this test to pass, this query must return no results. select home_score, visitor_score from zzz_game_details where home_score < 0 or visitor_score < 0 or home_score = visitor_score
Haga clic en Guardar como.
En el nombre de archivo, escriba
tests/zzz_game_details_check_scores.sql
y, a continuación, haga clic en Crear.Cree la tercera prueba de datos: haga clic en (Crear nuevo archivo) en la esquina superior derecha.
En el editor de texto, escriba la siguiente instrucción SQL. Este archivo incluye una prueba de datos para determinar si algún equipo tenía registros de victorias o derrotas negativos, más registros de victorias o derrotas que partidos jugados o más partidos jugados de la cuenta.
-- Each team participated in 4 games this season. -- For this test to pass, this query must return no results. select wins, losses from zzz_win_loss_records where wins < 0 or wins > 4 or losses < 0 or losses > 4 or (wins + losses) > 4
Haga clic en Guardar como.
En el nombre de archivo, escriba
tests/zzz_win_loss_records_check_records.sql
y, a continuación, haga clic en Crear.Ejecute las pruebas: en la línea de comandos, ejecute el comando
dbt test
.
Paso 4: Limpieza
Puede eliminar las tablas y vistas que creó para este ejemplo ejecutando el código SQL siguiente.
Si se conecta a un clúster, puede ejecutar este código SQL desde un cuaderno asociado al clúster, especificando SQL como idioma predeterminado para el cuaderno. Si se conecta a un almacén de SQL, puede ejecutar este código SQL desde una consulta.
DROP TABLE zzz_game_opponents;
DROP TABLE zzz_game_scores;
DROP TABLE zzz_games;
DROP TABLE zzz_teams;
DROP TABLE zzz_game_details;
DROP VIEW zzz_win_loss_records;
DROP TABLE diamonds;
DROP TABLE diamonds_four_cs;
DROP VIEW diamonds_list_colors;
DROP VIEW diamonds_prices;
Pasos siguientes
- Más información sobre los modelos de dbt.
- Obtenga información sobre cómo probar los proyectos de dbt.
- Aprenda a usar Jinja, un lenguaje de plantillas, para programar SQL en los proyectos de dbt.
- Más información sobre los procedimientos recomendados para dbt.