es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

JINJA (dbt) ¿Es posible crear una nueva tabla con varias filas basadas en elementos de una sola columna separados por un símbolo?

Tengo una tabla con la siguiente estructura de datos:

ID Tag
1 azul,rojo,verde
2 blanco,azul

Me gustaría convertir esto en una nueva tabla con la siguiente estructura:

ID Tag
1 azul
1 rojo
1 verde
2 blanco
2 azul

¿Es posible hacer esto dentro de dbt, usando JINJA (u otro método)? Mi almacén de datos está completamente alojado en Google BigQuery y conectado a dbt.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible convertir la tabla a la estructura deseada utilizando dbt y JINJA. Puede utilizar el filtro split de JINJA para separar los valores en la columna ‘Tag’ por coma y luego utilizar la transformación list para convertirlo en una lista. Luego puede utilizar la macro expand de dbt y la función unnest para crear múltiples filas para cada etiqueta de cada ID. Aquí hay un ejemplo de modelo dbt que demuestra el enfoque:

    {{ config(materialized='view')}}
    
    SELECT
      ID,
      tags
    FROM nombre_tabla_ejemplo
    
    {# utilizar el filtro split para separar la columna de etiquetas por coma y luego convertirla en una lista #}
    {% set tags_list = source('nombre_tabla_ejemplo')['tags'] | split(',') | list %}
    
    {# utilizar la macro expand y la función unnest para crear múltiples filas para cada etiqueta de cada ID #}
    {% for tag in tags_list %}
      {% if loop.first %}
        UNION ALL SELECT {{ ID }}, '{{ tag }}'
      {% else %}
        UNION ALL SELECT {{ ID }}, '{{ tag }}'
      {% endif %}
    {% endfor %}
    

    Reemplace ‘nombre_tabla_ejemplo’ e ‘ID’ con el nombre de tabla y el nombre de columna correspondientes, respectivamente. Este modelo debería crear una vista con la estructura de salida deseada.

Comments are closed.