🎉 75% of content is free forever — Unlock Premium from $10/mo →
CW
đŸ’ŧ Servicesâ„šī¸ Aboutâœ‰ī¸ ContactView Pricing Plansfrom $10

Snowflake Notebooks

đŸŸĸ Free Lesson

Advertisement

Snowflake Notebooks

Snowflake Notebooks provide an interactive environment for data exploration, analysis, and visualization directly within the Snowflake platform.

Snowflake Notebooks ArchitectureNotebookCells (SQL/Python)KernelSnowpark RuntimeWarehouseComputeDataTables/ViewsOutputResults/VizSQL CellsDirect warehouse executionPython CellsSnowpark ML/DataFrameMarkdown CellsDocumentation/Notes
Cell Execution FlowWrite CodeExecuteRun on WHGet ResultsVisualizeCells execute sequentially with shared session stateVariables persist across cells within same notebook session

Notebook Definition

Notebook Features

SQL Cells

SQL cells execute queries directly against Snowflake warehouses, returning results as tabular output. SQL cells support all standard Snowflake DDL, DML, and analytical functions.

-- Example SQL cell: Aggregation query
SELECT
    category,
    COUNT(*) AS product_count,
    AVG(price) AS avg_price,
    SUM(quantity_sold) AS total_sold
FROM products
WHERE region = 'US'
GROUP BY category
ORDER BY total_sold DESC;

Python Cells (Snowpark)

Python cells run Snowpark Python code, allowing DataFrames, ML model training, and complex transformations using Python libraries.

from snowflake.snowpark import Session
from snowflake.snowpark.functions import col, avg, count

# Create a Snowpark session from notebook context
session = session  # Session is auto-available in notebook

# Load data as Snowpark DataFrame
df = session.table("orders")

# Perform transformations
result = df.filter(col("order_date") >= "2025-01-01") \
    .groupBy("region", "product_category") \
    .agg(
        count("*").alias("order_count"),
        avg("order_total").alias("avg_order_value")
    ) \
    .orderBy(col("order_count").desc())

# Show results
result.show()

Markdown Cells

Markdown cells provide documentation, notes, and explanations within the notebook, making it easy to share context with collaborators.

Visualizations

Notebooks support inline visualizations using Python plotting libraries or Snowflake's built-in chart capabilities.

import matplotlib.pyplot as plt
import pandas as pd

# Convert Snowpark DataFrame to pandas for plotting
pdf = result.to_pandas()

plt.figure(figsize=(10, 6))
plt.bar(pdf['PRODUCT_CATEGORY'], pdf['AVG_ORDER_VALUE'])
plt.xlabel('Category')
plt.ylabel('Average Order Value ($)')
plt.title('Average Order Value by Product Category')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

Best Practices for Notebook Organization

  • Start with a Markdown cell describing the notebook purpose, data sources, and expected outputs
  • Use separate SQL cells for each logical operation (data loading, transformation, aggregation)
  • Keep cells focused: Each cell should perform one clear task and display one result
  • Add Markdown cells between code cells to explain what the next code block does
  • Use clear variable names that indicate data lineage and processing steps
  • Include error handling in Python cells for production-oriented notebooks
  • Version control notebooks by committing them to Git or using Snowflake's notebook versioning
  • Document assumptions about data schema, date ranges, and filter criteria in Markdown cells

Use Cases

Data Exploration

-- Explore table structure and sample data
SELECT column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_name = 'CUSTOMER_DATA'
ORDER BY ordinal_position;

SELECT * FROM customer_data LIMIT 100;

ML Model Prototyping

from snowflake.ml.modeling.preprocessing import StandardScaler
from snowflake.ml.modeling.linear_model import LinearRegression

# Load training data
train_df = session.table("training_features")
labels = session.table("training_labels")

# Feature engineering
scaler = StandardScaler(
    input_cols=["feature_1", "feature_2", "feature_3"],
    output_cols=["scaled_1", "scaled_2", "scaled_3"]
)
scaler.fit(train_df)
scaled_df = scaler.transform(train_df)

# Train model
lr = LinearRegression(
    input_cols=["scaled_1", "scaled_2", "scaled_3"],
    label_cols=["target"]
)
lr.fit(scaled_df)

# Evaluate
predictions = lr.predict(scaled_df)
predictions.select("target", "PREDICTED_TARGET").show(20)

Team Collaboration

-- Create a shareable analysis notebook
-- Cell 1: Data quality checks
SELECT
    COUNT(*) AS total_records,
    SUM(CASE WHEN email IS NULL THEN 1 ELSE 0 END) AS missing_email,
    SUM(CASE WHEN signup_date IS NULL THEN 1 ELSE 0 END) AS missing_signup,
    MIN(signup_date) AS earliest_signup,
    MAX(signup_date) AS latest_signup
FROM customer_master;

See Also

  • Snowpark Python - Snowpark Python SDK for data engineering and ML workflows
  • Cortex AI - AI and ML functions within Snowflake
  • Stored Procedures - Packaging notebook logic into reusable stored procedures
  • Monitoring - Monitoring notebook usage and warehouse consumption

Need Expert Snowflake Help?

Get personalized tutoring, project support, or professional consulting.

Advertisement