# 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.