Domínio 1.6, Recursos de IA/ML e Desenvolvimento de Aplicações
Explore o ecossistema de IA e desenvolvimento de aplicações do Snowflake: Snowpark, Snowflake Cortex (funções LLM, Cortex Search, Cortex Analyst), Snowflake ML, Streamlit e Notebooks.
Domínio 1.6: Recursos de IA/ML e Desenvolvimento de Aplicações
Peso no Exame
O Domínio 1.0 representa ~31% do exame. Os recursos de IA/ML são um foco crescente no exame COF-C03, refletindo o posicionamento do Snowflake como "AI Data Cloud".
Esta lição corresponde ao Objetivo de Exame 1.6: Explicar recursos de IA/ML e desenvolvimento de aplicações, incluindo Snowflake Notebooks, Streamlit, Snowpark, Snowflake Cortex e Snowflake ML.
Snowpark
O Snowpark é o framework de desenvolvimento do Snowflake que permite escrever pipelines de dados e transformações em Python, Java ou Scala usando uma API DataFrame: sem mover dados para fora do Snowflake.
Conceitos-Chave do Snowpark
- O código é escrito em Python/Java/Scala usando a biblioteca Snowpark
- A execução acontece dentro do Snowflake: os dados nunca saem
- Usa avaliação preguiçosa (lazy evaluation): as operações são construídas como um plano de query e executadas quando uma ação é disparada
- Suporta User-Defined Functions (UDFs), User-Defined Table Functions (UDTFs) e Stored Procedures
# Exemplo Python com Snowpark
from snowflake.snowpark import Session
from snowflake.snowpark.functions import col, sum as snow_sum
# Criar uma sessão
session = Session.builder.configs({
"account": "minhaconta",
"user": "meuusuario",
"password": "minhasenha",
"warehouse": "WH_DS",
"database": "ANALYTICS",
"schema": "PUBLIC"
}).create()
# Construir um DataFrame (nenhum dado é movido ainda — lazy evaluation)
df = session.table("pedidos")
# Transformar
resultado = (df
.filter(col("status") == "CONCLUIDO")
.group_by("regiao")
.agg(snow_sum("valor").alias("receita_total"))
.sort("receita_total", ascending=False)
)
# Executar e mostrar resultados (dispara a computação)
resultado.show()
# Gravar resultados de volta no Snowflake
resultado.write.mode("overwrite").save_as_table("receita_por_regiao")UDFs e UDTFs com Snowpark
# Registrar uma UDF Python no Snowflake
from snowflake.snowpark.functions import udf
from snowflake.snowpark.types import StringType, FloatType
@udf(return_type=FloatType(), input_types=[StringType()])
def pontuacao_sentimento(texto: str) -> float:
# Isso executa dentro do sandbox Python do Snowflake
from textblob import TextBlob
return TextBlob(texto).sentiment.polarity
# Usar a UDF em uma query
df.select(pontuacao_sentimento(col("texto_avaliacao")).alias("sentimento")).show()Snowpark para Machine Learning
from snowflake.ml.modeling.linear_model import LinearRegression
from snowflake.ml.modeling.preprocessing import StandardScaler
# Treinar um modelo usando Snowflake ML
scaler = StandardScaler(input_cols=["idade", "renda"], output_cols=["idade_norm", "renda_norm"])
df_normalizado = scaler.fit(df).transform(df)
model = LinearRegression(input_cols=["idade_norm", "renda_norm"], label_cols=["churn"])
model.fit(df_normalizado)
# Implantar modelo como UDF dentro do SnowflakeSnowflake Cortex: Funções SQL de IA
O Snowflake Cortex fornece funções SQL com LLM (Large Language Model, Modelo de Linguagem de Grande Escala) que executam diretamente sobre dados do Snowflake, sem chamadas de API externas do ponto de vista do usuário.
Funções SQL do Cortex AI
Função | Descrição | Caso de Uso de Exemplo |
|---|---|---|
COMPLETE() | Gera texto com um LLM | Resumir, classificar, responder perguntas |
EMBED_TEXT_768() / EMBED_TEXT_1024() | Gera embeddings (representações vetoriais) | Busca semântica, similaridade |
CLASSIFY_TEXT() | Classifica texto em categorias | Análise de sentimento, classificação por tópico |
EXTRACT_ANSWER() | Extrai uma resposta de um texto de contexto | Perguntas e respostas sobre documentos |
SENTIMENT() | Retorna pontuação de sentimento (-1 a 1) | Análise de avaliações de produtos |
SUMMARIZE() | Resume textos longos | Artigos de notícias, documentos |
TRANSLATE() | Traduz texto entre idiomas | Dados multilíngues |
PARSE_DOCUMENT() | Extrai texto de PDFs/imagens | Processamento de documentos |
-- Resumir avaliações de clientes
SELECT
id_avaliacao,
SNOWFLAKE.CORTEX.SUMMARIZE(texto_avaliacao) AS resumo
FROM avaliacoes_clientes;
-- Análise de sentimento
SELECT
id_avaliacao,
SNOWFLAKE.CORTEX.SENTIMENT(texto_avaliacao) AS pontuacao_sentimento
FROM avaliacoes_clientes;
-- Classificar tickets de suporte
SELECT
id_ticket,
SNOWFLAKE.CORTEX.CLASSIFY_TEXT(
corpo_ticket,
['cobranca', 'tecnico', 'conta', 'geral']
):label::STRING AS categoria
FROM tickets_suporte;
-- Gerar completions com LLM
SELECT
SNOWFLAKE.CORTEX.COMPLETE(
'mistral-7b', -- ou 'llama3-70b', 'mixtral-8x7b', 'snowflake-arctic'
'Resuma em uma frase: ' || descricao
) AS resumo_ia
FROM produtos;Cortex Search
O Cortex Search fornece capacidades de busca semântica (vetorial) sobre dados do Snowflake sem gerenciar embeddings manualmente:
-- Criar um serviço Cortex Search
CREATE CORTEX SEARCH SERVICE busca_produtos
ON COLUMN descricao_produto
WAREHOUSE = WH_SEARCH
TARGET_LAG = '1 hour'
AS (
SELECT id_produto, nome_produto, descricao_produto
FROM produtos
WHERE ativo = TRUE
);
-- Consultar o serviço de busca
SELECT SNOWFLAKE.CORTEX.SEARCH_PREVIEW(
'busca_produtos',
'{"query": "fones de ouvido sem fio com cancelamento de ruído", "limit": 5}'
);Cortex Analyst
O Cortex Analyst habilita a geração de SQL a partir de linguagem natural: usuários de negócio fazem perguntas em português e o Cortex Analyst retorna queries SQL e resultados:
- Construído sobre LLMs ajustados para geração de SQL
- Entende o schema do Snowflake e o modelo semântico
- Alimenta interfaces de BI conversacional
- Acessado via API REST ou integração com Streamlit
Snowflake ML
O Snowflake ML é um conjunto de capacidades de Machine Learning integradas ao Snowflake:
Feature Store (Repositório de Features)
Armazene, gerencie e compartilhe features de ML como objetos do Snowflake:
from snowflake.ml.feature_store import FeatureStore, Entity, FeatureView
fs = FeatureStore(session=session, database="BD_ML", name="MEU_FEATURE_STORE", ...)
# Definir uma entidade
entidade_cliente = Entity(name="cliente", join_keys=["id_cliente"])
# Criar uma feature view
fv = FeatureView(
name="features_clientes",
entities=[entidade_cliente],
feature_df=df_features,
refresh_freq="1 day"
)
fs.register_feature_view(fv, version="v1")Model Registry (Registro de Modelos)
Armazene, versione e implante modelos de ML dentro do Snowflake:
from snowflake.ml.registry import Registry
reg = Registry(session=session, database_name="BD_ML", schema_name="PUBLIC")
# Registrar um modelo
mv = reg.log_model(
model=modelo_sklearn_treinado,
model_name="preditor_churn",
version_name="v1",
sample_input_data=df_amostra
)
# Executar inferência
predicoes = mv.run(df_novos_clientes, function_name="predict")AutoML com Snowflake ML
from snowflake.ml.modeling.linear_model import LogisticRegression
from snowflake.ml.modeling.model_selection import GridSearchCV
# Validar hiperparâmetros dentro do Snowflake
grade_parametros = {"C": [0.1, 1, 10], "max_iter": [100, 200]}
cv = GridSearchCV(estimator=LogisticRegression(), param_grid=grade_parametros, cv=5)
cv.fit(df_treino)Snowflake Notebooks
Os Snowflake Notebooks são notebooks interativos no estilo Jupyter embutidos diretamente no Snowsight:
- Suporta células SQL, Python (Snowpark) e Markdown no mesmo notebook
- Células Python executam dentro do Snowflake: os dados nunca saem
- Acesse dados do Snowflake diretamente sem configuração de conexão
- Versionados via integração com Git
- Pode visualizar resultados com bibliotecas Python populares (matplotlib, plotly, altair)
# Em uma célula Python de um Snowflake Notebook
import streamlit as st
import matplotlib.pyplot as plt
# Carregar dados usando Snowpark (já conectado)
df = session.table("pedidos").to_pandas()
# Visualizar
fig, ax = plt.subplots()
df.groupby("regiao")["valor"].sum().plot(kind="bar", ax=ax)
st.pyplot(fig)-- Em uma célula SQL dentro do mesmo notebook
SELECT regiao, count(*) as qtd_pedidos
FROM pedidos
WHERE data_pedido >= DATEADD('month', -3, CURRENT_DATE)
GROUP BY 1
ORDER BY 2 DESC;Streamlit no Snowflake
O Streamlit no Snowflake permite implantar aplicações Python Streamlit diretamente dentro do Snowflake: sem necessidade de hospedagem externa:
- Aplicações Python de dados executam nativamente no Snowflake
- Acesse dados do Snowflake com segurança sem chaves de API
- Compartilhe com usuários dentro da sua conta Snowflake
- Use o RBAC do Snowflake para controlar quem pode acessar o app
- Construa dashboards, exploradores de dados, apps com IA
# streamlit_app.py — executa dentro do Snowflake
import streamlit as st
from snowflake.snowpark.context import get_active_session
# Obter a sessão ativa do Snowflake (pré-autenticada)
session = get_active_session()
st.title("Dashboard de Vendas")
# Consultar dados do Snowflake
df = session.sql("SELECT regiao, sum(valor) as receita FROM pedidos GROUP BY 1").to_pandas()
st.bar_chart(df.set_index("REGIAO")["RECEITA"])
# Usar Cortex para recursos de IA
pergunta = st.text_input("Faça uma pergunta sobre seus dados:")
if pergunta:
resposta = session.sql(f"""
SELECT SNOWFLAKE.CORTEX.COMPLETE('mistral-7b', '{pergunta}')
""").collect()[0][0]
st.write(resposta)-- Implantar um app Streamlit
CREATE STREAMLIT meu_dashboard
ROOT_LOCATION = '@meu_stage/streamlit_app'
MAIN_FILE = 'streamlit_app.py'
QUERY_WAREHOUSE = WH_BI;Tabela Resumo de Recursos de IA/ML
Recurso | O que Faz | Onde Executa |
|---|---|---|
Snowpark | API DataFrame para Python/Java/Scala | Dentro do Snowflake (camada compute) |
Cortex COMPLETE() | Geração de texto com LLM | Endpoints LLM gerenciados pelo Snowflake |
Cortex SENTIMENT() | Análise de sentimento | Endpoints LLM gerenciados pelo Snowflake |
Cortex SUMMARIZE() | Sumarização de texto | Endpoints LLM gerenciados pelo Snowflake |
Cortex Search | Serviço de busca semântica | Índice vetorial gerenciado pelo Snowflake |
Cortex Analyst | Conversão de linguagem natural → SQL | LLM gerenciado pelo Snowflake |
Snowflake ML | ML compatível com Sklearn no Snowflake | Computação do Snowflake |
Feature Store | Gerenciamento de features de ML | Armazenamento + computação do Snowflake |
Model Registry | Versionamento e implantação de modelos ML | Armazenamento + computação do Snowflake |
Notebooks | IDE interativo SQL + Python | Computação do Snowflake |
Streamlit no Snowflake | Hospedagem de apps web Python | Computação do Snowflake |
Questões de Prática
Q1. Um cientista de dados quer treinar um modelo de machine learning usando Python sem mover dados para fora do Snowflake. Qual recurso possibilita isso?
- A) External functions
- B) Snowpark ✅
- C) Dashboards do Snowsight
- D) COPY INTO
Q2. Qual função do Snowflake Cortex retornaria uma pontuação de sentimento entre -1 e 1 para avaliações de clientes?
- A)
COMPLETE() - B)
SUMMARIZE() - C)
SENTIMENT()✅ - D)
EXTRACT_ANSWER()
Q3. Um analista de negócios quer perguntar "Quais foram os 5 principais produtos por receita no último trimestre?" em linguagem natural e obter de volta uma query SQL. Qual recurso Cortex suporta isso?
- A) Cortex Search
- B) Cortex Analyst ✅
- C) Cortex COMPLETE()
- D) Snowflake ML Registry
Q4. As aplicações Streamlit no Snowflake são protegidas usando qual mecanismo do Snowflake?
- A) Chaves de API no código do app
- B) Controle de Acesso Baseado em Funções do Snowflake (RBAC) ✅
- C) Somente OAuth de terceiros
- D) Acesso à internet pública sem autenticação
Q5. O Snowpark usa avaliação preguiçosa (lazy evaluation). O que dispara a computação real?
- A) Criar o objeto DataFrame
- B) Chamar
.filter()ou.group_by() - C) Chamar uma ação como
.show(),.collect()ou.write✅ - D) Conectar-se à sessão
Pontos-Chave para o Dia do Exame:
- Snowpark = API DataFrame para Python/Java/Scala executando DENTRO do Snowflake
- Funções SQL do Cortex = capacidades de LLM como SQL (
SENTIMENT,SUMMARIZE,COMPLETE, etc.) - Cortex Analyst = linguagem natural → SQL para usuários de negócio
- Cortex Search = serviço gerenciado de busca semântica/vetorial
- Streamlit no Snowflake = apps web Python hospedados e protegidos dentro do Snowflake
- Snowflake Notebooks = notebooks no estilo Jupyter com células SQL + Python no Snowsight