---
# System prepended metadata

title: Extração dados Vinho

---

# Processo de Extração de Dados de Vinho

### Introdução

Processo de extração de dados sobre vinhos. O objetivo é extrair dados relevantes para análise e relatórios sobre os produtos de vinho ativos e disponíveis no E-commerce.

### Tabelas Envolvidas:

* **PRODUCT**: Tabela que armazena informações sobre os produtos disponíveis, como *ID*, *SKU* e *nome do produto*.
* **SHELF_PRODUCT**: Tabela de associação entre prateleiras e produtos.
* **SHELF**: Tabela que contém informações sobre prateleiras, incluindo a URL do caminho da prateleira.
* **ATTRIBUTE_VALUE**: Tabela que armazena valores de atributos para produtos.
* **ATTRIBUTE_LABEL**: Tabela que contém os rótulos dos atributos.
* **ATTRIBUTE**: Tabela principal que define os atributos disponíveis, como o tipo de backend (por exemplo, opção, string, etc.).
* **ATTRIBUTE_OPTION**: Tabela que armazena opções para atributos do tipo 'opção'.

### Atributos considerados na extração:


| Code | Label | Type |
| -------- | -------- | -------- |
| Caracteristicas_gustativas     | Características gustativas     | text     |
| Caracteristicas_olfativa     | Características olfativas     | text     |
| Caracteristicas_visuais     | Características visuais     | text     |
| Descricao     | descricao     | text     |
| Harmonizacao_vinhos     | Harmonização     | text     |
| Marca     | Marca     | option     |
| produtor     | Produtor     | option     |
| Regiao     | Região     | option     |
| Temperatura     | temperatura     | varchar     |
| teorAlcoolico     | Teor Alcóolico     | decimal     |
| tipoUva     | Tipo de uva     | option     |
| Variedade_de_uva     | Variedade da uva     | option     |



### Passo a Passo para a Extração do Relatório:

1. Tabelas Temporárias
    ```sql
    -- Antes de começar a extração, deletar tabelas temporárias caso existam
    DROP TABLE IF EXISTS temp_wine_products;
    DROP TABLE IF EXISTS temp_wine_attributes;
    ```

2. Extração de Informações de Produto
    ```sql
    -- Extrai informações de produto para nova tabela temporária temp_wine_products
    CREATE TABLE temp_wine_products AS
    SELECT DISTINCT
        p.ID,
        p.SKU,
        p.NAME
    FROM
        PRODUCT p
    JOIN 
        SHELF_PRODUCT sp ON sp.PRODUCT_ID = p.ID
    JOIN
        SHELF s ON sp.SHELF_PRODUCT_LIST_ID = s.ID
    WHERE
        s.PATH_URL LIKE '%vinho%'
        AND p.PRODUCT_TYPE_ID = 1
        AND EXISTS (
            SELECT 1
            FROM ATTRIBUTE_VALUE AV
            WHERE AV.ATTRIBUTE_CODE = 'status'
                AND AV.INT_VALUE = (SELECT ao.ID FROM ATTRIBUTE_OPTION ao WHERE ao.name = 'enable')
                AND AV.PRODUCT_ID = P.ID
        )
    ORDER BY p.NAME DESC;
    ```

    * Consulta a tabela **PRODUCT**, juntamente com as tabelas de associação **SHELF_PRODUCT** e **SHELF**, para obter informações sobre produtos de vinho.
    * Os critérios de seleção incluem produtos que estão associados a prateleiras contendo "*vinho*" em sua URL de caminho e que possuem **PRODUCT_TYPE_ID = 1**, ou seja, produtos simples.
    * Os produtos também são filtrados com base em um atributo específico ('status') para garantir que *apenas produtos ativos* sejam considerados.
    * Os resultados são ordenados pelo nome do produto.

3. Extração de Informações de Atributo
    ```sql
    -- Extrai informações de atributos para nova tabela temporária temp_wine_attributes
    CREATE TABLE temp_wine_attributes AS 
    SELECT 
        av.PRODUCT_ID,
        av.ATTRIBUTE_ID,
        al.LABEL,
        av.ATTRIBUTE_CODE,
        a.BACKEND_TYPE,
        CASE 
            WHEN a.BACKEND_TYPE = 'option' THEN (
                SELECT ao.NAME FROM ATTRIBUTE_OPTION ao WHERE ao.ID = av.INT_VALUE 
            )
            ELSE av.STRING_VALUE
        END AS string_value,
        av.TEXT_VALUE,
        av.INT_VALUE,
        av.DOUBLE_VALUE,
        av.DATE_VALUE,
        av.STORE_ID
    FROM 
        ATTRIBUTE_VALUE av 
    JOIN 
        ATTRIBUTE_LABEL al ON al.ATTRIBUTE_ID = av.ATTRIBUTE_ID
    JOIN 
        ATTRIBUTE a ON a.ID = av.ATTRIBUTE_ID
    WHERE 
        av.PRODUCT_ID IN (SELECT twp.ID FROM TEMP_WINE_PRODUCTS twp)
        AND av.ATTRIBUTE_CODE IN (
            'Caracteristicas_gustativas',
            'Caracteristicas_olfativa',
            'Caracteristicas_visuais',
            'Descricao',
            'Harmonizacao_vinhos',
            'Marca',
            'produtor',
            'Regiao',
            'Temperatura',
            'teorAlcoolico',
            'tipoUva',
            'Variedade_de_uva'
        )
    ORDER BY av.ATTRIBUTE_CODE ASC;
    ```
    * Os atributos relevantes para os produtos de vinho são selecionados da tabela **ATTRIBUTE_VALUE**.
    * Os critérios de seleção incluem a referência aos produtos de vinho extraídos na etapa anterior e uma lista específica de códigos de atributos relevantes para vinhos.
    * Os resultados são ordenados pelo código do atributo.

4. Extração de Relatório
    ```sql
    -- Realiza extração de relatório
    SELECT
        twp.SKU,
        twp.NAME AS product_name,
        twp.ID AS product_id,
        twa.label AS attribute_name,
        twa.ATTRIBUTE_CODE,
        twa.ATTRIBUTE_ID,
        twa.string_value,
        twa.TEXT_VALUE,
        twa.INT_VALUE,
        twa.DOUBLE_VALUE,
        twa.DATE_VALUE,
        twa.STORE_ID 
    FROM 
        TEMP_WINE_PRODUCTS twp
    JOIN 
        temp_wine_attributes twa ON twp.ID = twa.PRODUCT_ID
    ORDER BY twp.SKU;
    ```
    * Combinação das tabelas temporárias de produtos e atributos para criar um relatório completo.
    * Os resultados incluem **SKU**, **nome do produto**, **ID** do produto e informações sobre cada atributo relevante, como nome do atributo, valor de string, valor de texto, etc.
    * Os resultados são ordenados pelo SKU do produto.
