Snowflake Architecture and SQL

For pricing and availability

Contact: Tom Coffing

Email: Tom.Coffing@CoffingDW.com

Phone: 513 300-0341

Reference Guide:  The book is an excellent book for teaching and makes for an excellent reference guide to help on the job.

 

Description: Students will learn Snowflake architecture and SQL starting at the most basic level and going to the most advanced level in this course.

 

Objectives: After this course, students will have detailed knowledge and understanding of the Snowflake architecture, creating and managing warehouses, tables, and objects, utilizing time travel and restoration features, performance tuning expertise, data ingestion, stored procedures, user-defined functions (UDFs), advanced analytics, and essential, intermediate, and advanced SQL hands-on training.  Students will be ready to pass certification exams.

 

Audience:  This course is for anyone who desires to learn Snowflake architecture and SQL, from beginners to experienced users.

 

Prerequisites: None

 

Duration:  3-5-Days

Topics:

  • Snowflake Virtual Warehouse Sizes

  • Create a Snowflake Virtual Data Warehouse

  • Scaling Up or Down the Virtual Data Warehouse

  • Creating a Table with a Clustering Key

  • Account Usage

  • Time Travel

  • Snowflake Caching

  • Zero-Copy Cloning

  • Creating a Transient Schema

  • Fail-Safe

  • Data Sharing

  • Creating a Reader Account

  • AUTOINCREMENT

  • Creating a Task

  • Aggregation

  • Joins

  • Date and Time Functions

  • Format Functions

  • Analytics and Window Functions

  • Temporary Tables  

  • Subqueries

  • Strings

  • Interrogating the Data

  • Views

  • Set Operators

  • Creating Tables

  • Data Manipulation Language (DML)

  • User-Defined Functions (UDF)

  • Stored Procedures

  • Unstructured Data – JSON and XML

  • Statistical Aggregate Functions

  • Data Ingestion

  • Account Monitoring

Snowflake SQL Course Outline

 

Chapter 1 - Getting Started with a Snowflake Trial Account

 

How to Create a Starter Account on Snowflake

Click on the START FOR FREE Menu Item

Start Your 30-Day Free Trial

Choose Your Edition of Snowflake and Cloud Provider

You're Now Signed Up – An Email Will Arrive Soon

Take the Snowflake Email and CLICK TO ACTIVATE

Click the Snowflake Link to Enter a Username and Password

Welcome to Snowflake Message Comes Up

Snowflake Browser and Query Tool

Snowflake Worksheet to Create and Run Queries

Script to Create the Database, Schema, Tables, and Views

Choose the COURSE OUTLINE Button for Snowflake

Press on Download Snowflake Class Database Script Button

Copy All of the Text From Your SnowflakeClass.Txt Script

Run Your Script on the Snowflake Website – First Way

Copy Your Script to the Snowflake Website – Alternative Way

Run Your Script on the Snowflake Website – Alternative Way

Your Systems Tree will Contain the Nexus Database

The SQL_CLASS Schema Contains Your Tables

Set Your Database to NEXUS and Schema to SQL_CLASS

Download Nexus at CoffingDW.com

Nexus Server Migrates All Data Warehouses to Snowflake

Nexus Joins Data Across Platforms with the Super Join Builder

 

Chapter 2 – What is Snowflake?

 

Snowflake IPO Largest in History

Advertising in the Computer Industry Pays off Each Year

Scaling Compute and Storage on Public Clouds

Customer Retention is Gold in the Computer Industry

High-powered Investors are Critical

Who are the Biggest Losers in the IPO?

Sharing Data Between Customers and Providers is Amazing

Standard SQL Makes Application Migration Easy

Hiring a Proven CEO can make the Difference

Snowflake Architecture

Snowflake Architecture – Cloud Services

Snowflake Architecture – Virtual Warehouse

Snowflake Architecture – Data Storage

Snowflake Tables are Immutable

Elasticity

Worker Nodes and Worker Processes

Min-Max Based Pruning

Snowflake Execution Engine

Fault Tolerance

Semi-Structured Data

Snowflake Editions

Snowflake Pricing

Snowflake Virtual Warehouse Sizes

Snowflake Storage Pricing

 

Chapter 3 – Configuring and Managing the Snowflake Warehouse

 

Five System Defined Snowflake Roles

Create a Snowflake Virtual Data Warehouse

Create a Role

Create a User and Grant a Role

Scaling Up or Down the Virtual Data Warehouse

Scaling Up the Virtual Warehouse

Scaling Out the Virtual Data Warehouse

Configuring a Warehouse

The Life of a Query

Resource Monitor

Create Resource Monitor Screen

Creating a Resource Monitor with SQL

 

Chapter 4 – Brilliant Features of Snowflake

 

Snowflake Caching

The Life of a Query With Caching (Option 1)

The Life of a Query With Caching (Option 2)

Time Travel Using OFFSET

Time Travel Using TIMESTAMP Part 1

Time Travel Using TIMESTAMP Part 2 - Troubleshooting

Time Travel Using TIMESTAMP Solution

Time Travel Using QUERY_ID Part 1

Time Travel Using Query_ID Part 2

Restoring Data Using Time Travel Feature (Best Option)

Restoring Data Using Time Travel Feature (Bad Option)

CREATE TABLE with Time Travel Days

Account Usage

Drop and Undrop a Table

Drop and Undrop a Schema

Drop and Undrop a Database

Rename a Table

SHOW TABLES With LIKE

Table Types

TABLE STORAGE METRICS QUERY

Creating a Transient Schema

Zero-Copy Cloning Fundamentals

Zero-Copy Cloning

Zero-Copy Cloning with Time Travel

Zero-Copy Cloning Rules

Zero-Copy Cloning a Database and Schema

Cloning a Temporary Table

Creating Temporary and Transient Tables

Fail-Safe

Fail-Safe Begins when Time Travel Ends

Two Fail-Safe Storage Metrics Query

 

Chapter 5 – Performance Tuning with Cluster Keys

 

What is Parallel Processing?

The Basics of a Single Computer

Data in Memory is Fast as Lightning

Parallel Processing Of Data

Snowflake has Linear Scalability

Snowflake Clustering For Performance Tuning

Creating a Table with a Cluster Key

Creating a Table with a Cluster Key Function

Creating a Table with a Multi-Cluster Key

Altering a Table to Create or Drop a Cluster Key

Joining Tables Can Have the Same Cluster Keys for Speed

The Emp_Tbl CREATE Statement with Eight Rows

Snowflake Quiz –Put the Rows on the Proper Micro-Partition

The First Row is Now on the Proper Micro-Partition

Place the Remaining Rows on the Proper Micro-Partition

The Rows Are Now on the Proper Micro-Partition

Snowflake Slices will use Columnar Storage

Snowflake Micro-Partitions Create Metadata for each Block

Quiz – How Many Blocks Move into Memory?

Answer –How Many Blocks Move into Memory?

Quiz – How Many Blocks Move into Memory?

Answer – How Many Blocks Move into Memory?

Quiz – How Many Blocks Move into Memory?

Answer – How Many Blocks Move into Memory?

Emp_Tbl CREATE Statement with a Cluster Key of DeptNo

Snowflake Quiz –Place the Rows on the Micro-Partition

The First Row is on the Proper Micro-Partition

Place the Remaining Rows on the Proper Micro-Partitions

The Rows are on the Proper Micro-Partitions

Snowflake will use Columnar Storage

Quiz – Can you Place the Metadata Correctly?

Answer – Can you Place the Metadata Correctly?

Quiz – How Many Blocks Move Into Memory?

Answer – How Many Blocks Move into Memory?

Quiz – How Many Blocks Move into Memory?

Answer – How Many Blocks Move into Memory?

Quiz – How Many Blocks Move into Memory?

Answer – How Many Blocks Move into Memory?

Each Block Comes With Metadata

Snowflake Architecture – Data Storage

Min-Max Based Pruning

 

Chapter 6 – Data Sharing

 

Data Sharing

Implementing Data Sharing

Investigating Data Sharing – SHOW SHARES

SEE SHARE DETAILS with the DESC Command

CREATE a Database for the SHARE

Sharing All Tables in a Database and Schema

Investigating Data Sharing – SHOW SHARES

SEE SHARE DETAILS with the DESC Command

Data Sharing for Non-Snowflake Account Users

Steps We Need to Take to Share with Non-Snowflake Users

Creating a Reader Account

Viewing Managed Accounts

Sharing Data with the Managed Account

Troubleshooting Sharing Data with the Managed Account

Gathering the URL for Logging Into a Reader Account

Using the URL to Login to your Snowflake Reader Account

SHOW SHARES for Reader Account

SEE SHARE DETAILS with the DESC Command

CREATE a Database and Warehouse for the SHARE

Create a User and Grant a Role for Reader Account Users

 

Chapter 7 – Snowflake Tasks

 

Creating a Task

Creating a Task Using CRON

Creating a Task Using CRON Using Minute and Hour

Tasks Using CRON Using Minute, Hour, and Day of Week

CRON Using Minute, Hour Range, and Day of Week Range

CRON with Minute, Multiple Hours, and Day of Week Range

CRON with Minute, Multiple Hours, and Last Day of Month

CRON with Minute, Multiple Hours, and Month

CRON Last Friday of the Month

CRON With America/Los Angeles Time

Creating a Tree of Tasks

 

Chapter 8 – Information_Schema System Catalog

 

APPLICABLE_ROLES

COLUMNS

COLUMNS EXAMPLE

DATABASES

ENABLED_ROLES

EXTERNAL_TABLES

FILE_FORMATS

FUNCTIONS

INFORMATION_SCHEMA_CATALOG_NAME

LOAD_HISTORY

OBJECT_PRIVILEGES

PACKAGES

PIPES

PROCEDURES

REFERENTIAL_CONSTRAINTS

REPLICATION_DATABASES

SCHEMATA

SEQUENCES

STAGES

TABLE_CONSTRAINTS

TABLE_PRIVILEGES

TABLE_STORAGE_METRICS

TABLES

USAGE_PRIVILEGES

VIEWS

 

Chapter 9 – Systems Functions

 

ALL_USER_NAMES and CURRENT_IP_ADDRESS

CURRENT_ACCOUNT, CURRENT_AVAILABLE_ROLES

CURRENT_CLIENT and CURRENT_DATE

CURRENT_DATABASE and CURRENT_SCHEMA

CURRENT_SESSION and CURRENT_STATEMENT

CURRENT_TIME and CURRENT_TIMESTAMP

CURRENT_VERSION and CURRENT_WAREHOUSE

CURRENT_TRANSACTION and CURRENT_USER

CURRENT_REGION and CURRENT_ROLE

 

Chapter 10 – Data Ingestion

 

Loading Data

What is a Staging Area?

Snowflake has Four Types of Stages

Snowflake Internal Stages

Data File Details

User Stage

Loading User Stage Data with the Snowflake Web Interface

Go to the Databases Tab to See Your Databases

Click on the Table You Want To Load

The Table Columns Appear – Choose Load Table

Load Data Screen Appears

Choose Your Source Files

Choose Your File Format

Create the File Format

Create the File Format – Press Load

Load Results

Table Stage

Download a Flat File From Our Website for Load Exercise

Choose the COURSE OUTLINE Button for Snowflake

Press on Download Snowflake Class Database Script Button

Copying Data Into a Table Using the Table Stage

The PUT command will not work on Snowflake Browser

Query a Table Residing in the Table Stage

Using the Copy Command with File Format Options

Named Stages

Create Three Internal Named Stages Using SQL

Creating Three Internal Named Stages with Nexus

Using an Internal Named Stage to Load Data with PUT

Create Named Stage Using the Snowflake Browser Tool - 1

Create Named Stage Using the Snowflake Browser Tool - 2

Create Named Stage Using the Snowflake Browser Tool - 3

Create Named Stage Using the Snowflake Browser Tool - 4

Create Named Stage Using the Snowflake Browser Tool - 5

Create Named Stage Using the Snowflake Browser Tool - 6

Importing Data From External Stages

Example of Copy Command from an External Stage

Example of Copy Command Using Pattern

Pattern Results from Loading Multiple Files

Copying Only Some Columns Into a Table

Functions for Transforming Data During a Load

Transformation Example Using CASE and Implicit CAST

Transformation Example To Populate Only Two Columns

Using the ON_ERROR Options

ON_ERROR Defaults to ABORT_STATEMENT

ON_ERROR SKIP_FILE Option

ON_ERROR_<NUMBER> SKIP_FILE Option

ON_ERROR_<PERCENTAGE> SKIP_FILE Option

Creating and Describing a File Format (1 of 3)

Creating and Describing a File Format (2 of 3)

Creating and Describing a File Format (3 of 3)

Altering or Changing Attributes in a File Format

DESCRIBING our File Format to Confirm Attribute Changes

Important Copy Options – Validation Mode

Validation Mode RETURN_ERRORS Example

Validation Mode RETURN_n_ROWS Example of an Error

Validation Mode RETURN_n_ROWS Example of Success

Saving Load Error Rows in a Table

Another Technique to Save Load Error Rows in a Table

SPLIT_PART Function for Easy Reading of Errors

Important Copy Options – Size Limit

Example of Using the Size_Limit Option (1 of 3)

Example of Using the Size_Limit Option (2 of 3)

Example of Using the Size_Limit Option (3 of 3)

Important Copy Options – RETURNED_FAILED_ONLY

RETURNED_FAILED_ONLY Example

Important Copy Options – TRUNCATECOLUMNS

TRUNCATECOLUMNS Example (1 of 3)

TRUNCATECOLUMNS Example (2 of 3)

TRUNCATECOLUMNS Example (3 of 3)

Important Copy Options – FORCE

FORCE Example

An Example of a JSON File

Creating a JSON Stage and File Format

Querying the JSON Table

Tricks and Tips to Query the JSON Table

Tricks and Tips to Query Nested Data in a JSON Table

Tricks and Tips to Query Arrays in a JSON Table

Tricks and Tips to Flatten Arrays in a JSON Table

Creating a Table with Flattened Data

LOAD_HISTORY

LOAD_HISTORY Results

LOAD_HISTORY For Loads Happening Before Today

STAGES View in Information_Schema

Nexus Server Migrates All Data Warehouses to Snowflake

 

Chapter 11 – Introduction to SQL

 

Introduction

SELECTING Current Information

Setting Your Default DATABASE and SCHEMA

SELECT * (All Columns) in a Table

SELECT Specific Columns in a Table

Commas in the Front or Back?

Place your Commas in front for better Debugging Capabilities

Sort the Data with the ORDER BY Keyword

Use a Column Name or Number in an ORDER BY Statement

Two Examples of ORDER BY using Different Techniques

Changing the ORDER BY to Descending Order

NULL Values Sort Last in Ascending Mode (Default)

Using the Nulls First Command

NULL Values Sort First in Descending Mode (DESC)

Using the Nulls Last Command

Major Sort vs. Minor Sort

Multiple Sort Keys using Names vs. Numbers

An Order By That Uses an Expression

Sorts are Alphabetical, NOT Logical

Using A Valued CASE Statement to Sort Logically

Using A Searched CASE Statement to Sort Logically

Quiz – Can you Add a Minor Sort?

Answer – Can you Add a Minor Sort?

Order By Decode

Quiz – Can you Add Two Minor Sorts Using Decode?

Answer – Can you Add Two Minor Sorts Using Decode?

How to ALIAS a Column Name

Using an Alias in the WHERE and ORDER BY Clause

Using an Alias in the ORDER BY Clause with Decode

A Missing Comma Can Become an Alias by Mistake

Comments using Double Dashes are Single Line Comments

Comments for Multi-Lines

Comments for Multi-Lines As Double Dashes Per Line

Comments are a Great Technique for Finding SQL Errors

 

Chapter 12 – The WHERE Clause

 

The WHERE Clause limits Returning Rows

Numbers Don't Need Single Quotes

Not Equal

Searching for NULL Values Using Equality Returns Nothing

Use IS NULL or IS NOT NULL when dealing with NULLs

Use IS NULL or IS NOT NULL when dealing with NULLs

Using Greater Than Or Equal To (>=)

AND in the WHERE Clause

Troubleshooting AND

OR in the WHERE Clause

Troubleshooting OR

WHY OR must utilize the Column Name Each Time

Troubleshooting Character Data

Using Different Columns in an AND Statement

Quiz – How Many Rows will Return?

Answer to Quiz – How Many Rows will Return?

What is the Order of Precedence?

Using Parentheses to change the Order of Precedence

Using an IN List in place of OR

The IN List is an Excellent Technique

IN List vs. OR Brings the Same Results

The IN List Can Use Character Data

Using a NOT IN List

Null Values in a NOT IN List Return No Rows

A Technique for Handling Nulls with a NOT IN List

The BETWEEN Statement is Inclusive

The NOT BETWEEN Statement is also Inclusive

The BETWEEN Statement Works for Character Data

The Like Command Wildcards are Percent and Underscore

LIKE command Underscore is Wildcard for one Character

CASE Matters with the LIKE Command

Using LIKE for all Cases with Lower and Upper

Another Example of UPPER and LOWER

LIKE Command to Find Multiple Characters

LIKE Command to Find Either Character

Using ILIKE Handle Case Issues

Finding Anyone Whose Name Ends in 'Y'

Escape Character in the LIKE Command changes Wildcards

Escape Characters Turn off Wildcards in the LIKE Command

Time Travel Using OFFSET

Time Travel Using TIMESTAMP Part 1

Time Travel Using TIMESTAMP Part 2

Time Travel Using QUERY_ID Part 1

Time Travel Using Query_ID Part 2

 

Chapter 13 – Distinct, Group By, Top, and Pivot

 

The Distinct Command

DISTINCT vs. GROUP BY

Quiz – How many rows come back from the Distinct?

Answer – How many rows come back from the Distinct?

Top Command

Top Command and Order By

Top Command and Order By Plus Nulls Last

The FETCH Clause

Sample and Tablesample

TOP vs. SAMPLE

Two Forms of Data Sampling

The Pivot Command

Extreme Pivot Challenge

Answer - Extreme Pivot Challenge

 

Chapter 14 – Aggregation

 

Quiz – Calculate the Answer Set in your Mind

Answer – Calculate the Answer Set in your Mind

Quiz 2  – Calculate the Answer Set in your Mind

There are Five Aggregates

Quiz – How many Rows Return?

Answer – How many Rows Return?

Casting a Data Type

Troubleshooting Aggregates

GROUP BY Delivers One Row Per Group

GROUP BY DEPT_NO or GROUP BY 1 are Equivalent

Limiting Rows and Improving Performance with WHERE

WHERE Clause in Aggregation limits unneeded Calculations

Keyword HAVING tests Aggregates after they are Totaled

Keyword HAVING is like an Extra WHERE Clause for Totals

ANY_VALUE

COUNT_IF

GROUP BY GROUPING SETS

GROUP BY GROUPING SETS Super Query

GROUP BY ROLLUP

GROUP BY ROLLUP Super Query

GROUP BY CUBE

GROUP BY CUBE Answer Set

GROUP BY CUBE Super Query

 

Chapter 15 – Joining Tables

 

A Two-Table Join Using Traditional Syntax

A Join using Traditional Syntax with Table Alias

You Can Fully Qualify All Columns

A Join using ANSI Syntax

Both Queries Have the Same Results and Performance

Quiz – Can You Finish the Join Syntax?

Answer to Quiz – Can You Finish the Join Syntax?

Quiz – Can You Find the Error?

Answer to Quiz – Can You Find the Error?

Super Quiz – Can You Find the Difficult Error?

Answer to Super Quiz – Can You Find the Difficult Error?

Quiz – Which Rows from Both Tables Won’t Return?

Answer– Which Rows from Both Tables Won’t Return?

LEFT OUTER JOIN

LEFT OUTER Join Results

RIGHT OUTER JOIN

RIGHT OUTER Join Example and Results

FULL OUTER JOIN

FULL OUTER Join Results

Which Tables are the Left and Which are Right?

Answer - Which Tables are the Left and Which are Right?

INNER JOIN with Additional AND Clause

ANSI INNER JOIN with Additional AND Clause

ANSI INNER JOIN with Additional WHERE Clause

OUTER JOIN with Additional WHERE Clause

OUTER JOIN with Additional AND Clause

The DREADED Product Join

The DREADED Product Join Results

Cartesian Product Join with Traditional Syntax

Cartesian Product Join with ANSI Syntax

The CROSS JOIN

The CROSS JOIN Answer Set

The SELF JOIN

The SELF  JOIN with ANSI Syntax

An Associative Table is a Bridge that Joins Two Tables

Quiz – Can you Write the Three-Table Join?

Answer to Quiz – Can you Write the Three-Table Join?

Quiz –Write the Three-Table Join Using ANSI Syntax?

Answer –Write the Three-Table Join to ANSI Syntax?

Quiz – Can you Place the ON Clauses at the End?

Answer – Can you Place the ON Clauses at the End?

The Five-Table Join – Logical Insurance Model

Quiz - Write a Five Table Join Using ANSI Syntax

Answer - Write a Five Table Join Using ANSI Syntax

Quiz - Write a Five Table Join Using Traditional Syntax

Answer - Write a Five Table Join Using Non-ANSI Syntax

Quiz – Re-Write this putting the ON clauses at the END

Answer – Re-Write this putting the ON clauses at the END

 

Chapter 16 – Date Functions

 

CURRENT_DATE

CURRENT_DATE and CURRENT_TIMESTAMP

Current_Timestamp and Local_Timestamp With Precision

CURRENT_TIME vs. LOCALTIME With Precision

Add or Subtract Days from a Date

The ADD_MONTHS Command

ADD_MONTHS to Add a Year to a Date

ADD_MONTHS to Add Five Years to a Date

Incrementing Date Values Using the Dateadd Function

Incrementing Time Values Using the Dateadd Function

Dateadd Function And Add_Months Function are Different

Formatting a Date

The TO_CHAR Command to Format Dollar Signs

The TO_CHAR Command for Formatting Numbers

The EXTRACT Command

MONTHNAME

EXTRACT from DATES and TIME

EXTRACT from DATES and TIME Optional Syntax

Another Option for Extracting Portions of Dates and Times

The DATE_PART Function

Using DATE_PART to Extract

Implied Extract of Day, Month, and Year using TO_CHAR

The DATE_PART Function Using Day of Week (DOW)

Day of Week and a CASE Statement

Day of Week and DECODE

Great Date Functions to Know

Week of Year and Year of Week

First Day and Last Day Functions

DATEDIFF

Using CASE and Extract to Reformat Dates

Using CAST and SUBSTRING to Reformat Dates

The Date_Trunc Function

DATE_TRUNC Command With Time

DATE_TRUNC Command With Dates

LAST_DAY

LAST_DAY

NEXT_DAY

PREVIOUS_DAY

MONTHS_BETWEEN

TIME_SLICE

TO_TIMESTAMP

Using Day, Month, and Year intervals

The Basics of a Simple Interval

 

Chapter 17 – Temporary Tables

 

Derived Query Examples with Three Different Techniques

Most Derived Tables Are Used To Join To Other Tables

The Three Components of a Derived Table

Visualize This Derived Table

Quiz - Derived Table Challenge

Answer to Quiz - Derived Table Challenge

An Example of Two Derived Tables Using WITH

WITH RECURSIVE Derived Table Hierarchy

WITH RECURSIVE Derived Table Query

WITH RECURSIVE Derived Table Definition

WITH RECURSIVE Derived Table Seeding

WITH RECURSIVE Derived Table Looping

WITH RECURSIVE Derived Table Looping in Slow Motion

WITH RECURSIVE Derived Table Looping Continued

WITH RECURSIVE Derived Table Looping Continued

WITH RECURSIVE Derived Table Ends the Looping

WITH RECURSIVE Derived Table Final SELECT

WITH RECURSIVE Results

Creating a Temporary Table

CREATE a Temporary TABLE using LIKE

Creating a Temporary Table using a CTAS

CREATE Temporary Table AS (CTAS) with Specific Columns

CREATE a Temporary Table AS (CTAS) Using a Join

Cloning a Temporary Table

Dropping a Temporary Table

 

Chapter 18 – Sub-query Functions

 

An IN List is much like a Subquery

An IN List Never has Duplicates – Just like a Subquery

An IN List Ignores Duplicates

The Subquery

The Three Steps of How a Basic Subquery Works

These are Equivalent Queries

The Answer Set from the Subquery

Quiz- Answer the Difficult Question

Answer to Quiz- Answer the Difficult Question

Should you use a Subquery or a Join?

Quiz - Write the Subquery

Answer to Quiz- Write the Subquery

Quiz - Write the More Difficult Subquery

Answer to Quiz - Write the More Difficult Subquery

Quiz – Write the Extreme Subquery

Answer To Quiz – Write the Extreme Subquery

Quiz - Write the Subquery with an Aggregate

Answer to Quiz- Write the Subquery with an Aggregate

Quiz- Write the Correlated Subquery

Answer to Quiz- Write the Correlated Subquery

The Basics of a Correlated Subquery

The Top Query always runs first in a Correlated Subquery

Correlated Subquery Example vs. a Join with a Derived Table

Quiz- A Second Chance To Write a Correlated Subquery

Answer - A Second Chance to Write a Correlated Subquery

Quiz- A Third Chance To Write a Correlated Subquery

Answer - A Third Chance to Write a Correlated Subquery

Quiz- Last Chance To Write a Correlated Subquery

Answer – Last Chance to Write a Correlated Subquery

Quiz – Write the Extreme Correlated Subquery

Answer To Quiz – Write the Extreme Correlated Subquery

NOT IN Subquery Returns Nothing when NULLs are Present

Fixing a NOT IN Subquery with Null Values

Quiz- Write the NOT IN Subquery

Answer to Quiz- Write the NOT Subquery

Quiz - Write the Subquery using a WHERE Clause

Answer - Write the Subquery using a WHERE Clause

Quiz- Write the Subquery with Two Parameters

Answer to Quiz- Write the Subquery with Two Parameters

How the Double Parameter Subquery Works

More on how the Double Parameter Subquery Works

Quiz – Write the Triple Subquery

Answer to Quiz – Write the Triple Subquery

IN is equivalent to =ANY

Using a Correlated Exists

How a Correlated Exists Matches Up

The Correlated NOT Exists

 

Chapter 19  – Analytic and Window Functions

 

ROW_NUMBER

Quiz – How did the Row_Number Reset?

Quiz – Return Only the last Two Days Per Product_ID

Answer – Return Only the last Two Days Per Product_ID

Quiz – Return Two Students Per Class_Code with Highest Grades

Answer – Return Two Students Per Class_Code with Highest Grades

Using a Derived Table

RANK

Dense_Rank

RANK vs. DENSE_RANK

Getting RANK to Sort in DESC Order

RANK() OVER, PARTITION BY, and QUALIFY

Using a Derived Table

DENSE_RANK() OVER and PARTITION BY

PERCENT_RANK() OVER with 14 rows in Calculation

PERCENT_RANK() OVER with 21 rows in Calculation

PERCENT_RANK and PARTITION BY

Cumulative Sum

Cumulative Sum – The Sort Explained

Cumulative Sum – Rows Unbounded Preceding Explained

Cumulative Sum – Making Sense of the Data

Cumulative Sum – Major and Minor Sort Keys

Reset with a PARTITION BY Statement

Totals and Subtotals through Partition By

Moving SUM every 3-rows vs. a Continuous Average

Partition By Resets the Calculations

Moving Average

The Moving Window is Current Row and Preceding n

How Moving Average Handles the Order By

Quiz – How is that Total Calculated?

Answer to Quiz – How is that Total Calculated?

Quiz – How is that 4th Row Calculated?

Quiz – How is that 4th Row Calculated?

Answer to Quiz – How is that 4th Row Calculated?

Moving Average every 3-rows Vs. a Continuous Average

The Partition By Statement

Partition By Resets an ANSI OLAP

Moving Difference

Moving Difference with Partition By

Finding a Value of a Column in the Next Row with MIN

Finding a Next Row Value with MIN and PARTITION BY

Finding Multiple Values of a Column in Upcoming Rows

Finding The Next Date using MAX

COUNT OVER for a Sequential Number

COUNT OVER using ROWS UNBOUNDED PRECEDING

The MAX OVER Command

MAX OVER  with PARTITION BY Reset

The MIN OVER Command

The MIN OVER Command with PARTITION BY

Finding Gaps Between Dates

CSUM For Each Product_ID For the First Three Days

FIRST_VALUE

Using FIRST_VALUE

FIRST_VALUE With Partitioning

Daily_Sales Minus FIRST_VALUE With Partitioning

FIRST_VALUE After Sorting by the Highest Value

FIRST_VALUE Combined with Row_Number and Qualify

FIRST_VALUE and Qualify with a Row_Number

FIRST_VALUE and a Derived Table

Last_Value Can Be Confusing

Last_Value Working Properly

Last_Value With Partitioning

Last_Value And First_Value with Partitioning

First and Last Value Difference

Using LEAD

Using LEAD with a PARTITION Statement

Using LEAD With an Offset of 2

Using LEAD With an Offset of 2 and a PARTITION

Using LAG

Using LAG with a PARTITION Statement

Using LAG With an Offset of 2

Using Two LAG Statements

Using LAG With an Offset of 2 and a PARTITION

CUME_DIST

CUME_DIST With a Tie Value

CUME_DIST With Qualify

CUME_DIST and a Derived Table

CUME_DIST and a Partition By Statement

CUME_DIST with 14 Rows

CUME_DIST With a Partition on 7 Rows

CURRENT ROW AND UNBOUNDED FOLLOWING

Different Windowing Options

How Ntile Works

Ntile Example

Ntile Continued

Ntile Percentile

Using Quantiles (Partitions of Four)

Using Deciles (Partitions of Ten)

NTILE With a Partition

MEDIAN Example

MEDIAN with Partitioning and a WHERE Clause

MEDIAN with Partitioning

PERCENTILE_CONT Function Description and Syntax

Result Information About PERCENTILE_CONT

PERCENTILE_CONT Function Arguments

PERCENTILE_CONT Example

PERCENTILE_CONT Example with Percentage Change

PERCENTILE_CONT With PARTITION Example

PERCENTILE_CONT With PARTITION and (0.4)

PERCENTILE_DISC Function Description and Syntax

PERCENTILE_DISC Function Arguments

PERCENTILE_DISC Example

PERCENTILE_DISC Example with Percentage Change

PERCENTILE_DISC With PARTITION Example

PERCENTILE_DISC With PARTITION and (0.4)

LISTAGG Basic Example

LISTAGG With a Pipe-Separated List

LISTAGG With a Comma-Separated List in Groups

NTH_VALUE Function and Syntax

NTH_VALUE Arguments

NTH_VALUE Function and Syntax

NTH_VALUE With Partition

NTH_VALUE With Partition and Ignore Nulls

RATIO_TO_REPORT Function

RATIO_TO_REPORT Example

ANY_VALUE

MODE

Width_Bucket

COUNT_IF

 

Chapter 20 – Strings

 

UPPER and lower  Functions

The Length Command Counts Characters

LENGTH Does Not Work on Fixed Length Columns

OCTET_LENGTH

The TRIM Command Trims Leading and Trailing Spaces

The RTRIM and LTRIM Command Trims Spaces

Concatenation

Concat and Concat_WS for Concatenation

The SUBSTR and SUBSTRING Commands

How SUBSTR Works with NO ENDING POSITION

Using SUBSTR and CHAR_LENGTH Together

The POSITION Command finds a Letters Position

The POSITION Command is brilliant with SUBSTR

CHARINDEX Finds a Letter's Position in a String

CHARINDEX Command is Brilliant with SUBSTRING

The CHARINDEX Command Using a Literal

LPAD and RPAD

The REPLACE Function

REGEXP Example for Whitespace Character

REGEXP Example for Non-Whitespace

REGEXP Example for [xyz]

REGEXP Example Start of a String

REGEXP Example End of a String

REGEXP Example Matching Within a Range

REGEXP_REPLACE

REGEXP_REPLACE Example

Another REGEXP_REPLACE Example

REGEXP_INSTR

REGEXP_LIKE

RLIKE

REGEXP_SUBSTR

REGEXP_SUBSTR Example

SOUNDEX Function to Find a Sound

The REVERSE String Function

The RIGHT Function

The LEFT and RIGHT Functions

The ASCII Function

 

Chapter 21 – Interrogating the Data

 

Quiz – Fill in the Answers for the NULLIF Command

Answer – Fill in the Answers for the NULLIF Command

The COALESCE Command

COALESCE is Equivalent to this CASE Statement

Some Great CAST (Convert And Store) Examples

A Rounding Example Using CAST

CAST will Round Values Up or Down

Valued Case vs. Searched Case

Combining Searched Case and Valued Case

The DECODE Command

DECODE

A Trick for getting a Horizontal Case

Put a CASE in the ORDER BY

Using A Searched CASE Statement to Sort Logically

Quiz – Can you Add a Minor Sort?

Answer – Can you Add a Minor Sort?

Order By DECODE

Quiz – Can you Add Two Minor Sorts Using Decode?

CASE Challenge

Answer - CASE Challenge

 

Chapter 22 – View Functions

 

The Fundamentals of Views

Creating a Simple View to Restrict Sensitive Columns

Creating a Simple View to Restrict Rows

Creating a View to Join Tables Together

Sometimes We Create Views for Formatting

Basic Rules for Views

How to Modify a View

Creating a Secure View to Restrict DDL Viewing

The Exception to the ORDER BY Rule inside a View

Another Exception to the ORDER BY Rule is TOP

Derived Columns in a View Must Have a Column Alias

The Standard Way Most Aliasing is Done

Another Way to Alias Columns in a View CREATE

What Happens When a View Column gets Aliased Twice?

 

Chapter 23 – Set Operators

 

Rules of Set Operators

INTERSECT Explained Logically

Answer - Intersect Explained Logically

Quiz - Union Explained Logically

Answer - Union Explained Logically

Quiz - Union ALL Explained Logically

Answer - Union ALL Explained Logically

Quiz - Except Explained Logically

Answer - Except Explained Logically

Quiz - Minus Explained Logically

Answer - MINUS Explained Logically

Quiz - Testing Your Knowledge

Answer - Testing Your Knowledge

Rule 1 - Equal Number of Columns in Both SELECT Lists

Rule 2 -  Top Query Handles all Aliases

Rule 3 - The Bottom Query does the ORDER BY

Intersect Challenge

Answer - Intersect Challenge

UNION Vs. UNION ALL

Using UNION ALL and Literals

Using UNION ALL for Speed in Merging Data Sets

Great Trick:  Place your Set Operator in a Derived Table

A Great Example of how EXCEPT and MINUS work

Using UNION to be same as GROUP BY GROUPING SETS

USING Multiple SET Operators in a Single Request

Changing the Order of Precedence with Parentheses

 

Chapter 24 – Creating Tables

 

Table Types

SHOW TABLES With LIKE

TABLE STORAGE METRICS QUERY

Snowflake Data Types

More Snowflake Data Types

Show Databases and Table DDL Commands

Finding Constraints

The Basics of Creating a Table

Creating a Table

Creating Temporary and Transient Tables

Snowflake Clustering

Creating a Table with a Cluster Key

Creating a Table with a Cluster Key Function

Creating a Table with a Multi-Cluster Key

Altering a Table to Create or Drop a Cluster Key

Joining Tables Can Have the Same Cluster Keys for Speed

Creating Tables with a Primary Key/Foreign Key Relationship

Primary Key Does Not Enforce Uniqueness

A Table with a NOT NULL Constraint

AUTOINCREMENT

AUTOINCREMENT START = 10 INCREMENT = 20

Restoring Data Using Time Travel Feature (Best Option)

Restoring Data Using Time Travel Feature (Bad Option)

Fail-Safe

Fail-Safe Begins when Time Travel Ends

CREATE TABLE with Time Travel Days

Create Table LIKE

CREATE a Temporary TABLE using LIKE

CREATE TABLE AS (CTAS) Populates the Table With Data

CREATE TABLE AS (CTAS) Can Choose Certain Columns

CREATE a Temporary Table (CTAS) with Specific Columns

CREATE a Temporary Table AS (CTAS) Using a Join

Create a Table IF NOT EXISTS

A Table with a NOT NULL Constraint

Create a Table with a Column Default Value

Creating a Transient Schema

Zero-Copy Cloning Fundamentals

Zero-Copy Cloning

Zero-Copy Cloning with Time Travel

Zero-Copy Cloning Rules

Zero-Copy Cloning a Database and Schema

Cloning a Temporary Table

CREATE TABLE AS (CTAS) Populates the Table With Data

CREATE TABLE AS (CTAS) Can Choose Specific Columns

CREATE Temporary Table AS (CTAS) with Specific Columns

CREATE a Temporary Table AS (CTAS) Using a Join

 

Chapter 25 – Inserts, Updates, and Deletes

 

INSERT Syntax # 1

INSERT Syntax # 2

INSERT Example with Multiple Rows

Inserting Null Values into a Table

INSERT/SELECT Command

INSERT/SELECT to Build a Data Mart

UPDATE Examples

Example of Subquery UPDATE Command

MERGE

Drop and Undrop a Table

Drop and Undrop a Schema

Drop and Undrop a Database

Rename a Table

Deleting Rows in a Table

 

 

 

Chapter 26 – Unstructured Data – JSON and XML

 

JSON and the Internet of Things

JSON Syntax Explanation

Building a Complex Object

Continuing to Build a Complex Object

Creating a Table and Inserting JSON Data

Querying the JSON Table

Performing a Flatten to Display Rows Like a Typical Table

Creating a View on a Flattened Table

Further Building a Complex Object

Creating a Table and Inserting JSON Data

Querying the JSON Table

Creating a JSON Table

Inserting Two Objects Into a JSON Table

How to Query a JSON Variant Data Type

Inserting 10 Objects Into a JSON Table

JSON Technique to CREATE a Table and INSERT Data

How to Query JSON USING $1

How to Format JSON Data

Querying Portions of Semi-Structured Data

Querying Semi-Structured Data With a WHERE Clause

Using the FLATTEN Function to Parse Arrays

Using the FLATTEN Function to Parse Nested Arrays

Extracting Values by Path Using the GET_PATH Function

Creating an XML Table

Insert Into An XML Table

XMLGET and FLATTEN Function For XML Data

PARSE_JSON Semi-Structured Data Function

Describing a Table that Contains a Variant Data Type

Inserting a Wide Variety of Data Into a Variant Data Type

Using the TYPEOF Function

Using the STRIP_NULL_VALUE Function

 

Chapter 27 – User Defined Functions (UDFs)

 

User-Defined Functions

CREATE Function Syntax

Two Simple Functions with Hard-Coded Values

You Can Use a Function in a Join

You Can Use a Function in WHERE Clause

You Can Use a Function in the ORDER BY Clause

Creating a function with an Input Argument

Create a Function to get Factorial Numbers

Creating a function to Get Fibonacci Numbers

Creating a function with the Keyword TABLE

Joining a Function with the Keyword TABLE

JavaScript UDF with a Try-Catch Block

Using a JavaScript UDF with a Try-Catch Block for Validation

JavaScript UDF with IF, ELSE IF, and ELSE Try-Catch Block

DDL and DML Operations are Not Supported in Functions

An EXAMPLE of a CASE Statement Using Two Functions

Functions With Duplicate Names But Different Arguments

You ALTER a Function for Three Reasons

Examples of Altering a Function

SHOW User Functions

Information_Schema Functions

GET DDL Function

Conversion Functions and TRY_CAST

Semi-Structured Data Functions

Functions for Array and Object Creation and Manipulation

Functions for Semi-structured Extraction and Conversion

Functions for Semi-structured Extraction and Type Predicates

 

Chapter 28 – Stored Procedures

 

Why Use Snowflake Stored Procedures?

Stored Procedure Syntax Using Javascript

Create and Execute Your First Javascript Stored Procedure

Create and Execute with an Argument Using Backticks

A Stored Procedure to INSERT Using Language SQL

SQL Stored Procedure INSERT Using Input Parameters

Creating a Snowflake Stored Procedure that Updates

Stored Procedure UPDATE Using Subquery

Stored Procedure Delete Using an Input Parameter

Snowflake Stored Procedure Control Structures

A Stored Procedure With IF and END IF Logic

A Stored Procedure With IF, ELSEIF, and ELSE Logic

A Stored Procedure With Simple Valued Case Logic

A Stored Procedure With Searched Case Logic

Using Loops in Stored Procedures

Using a WHILE Loop

Using a FOR Loop

Using a FOR Reverse Loop

Stored Procedure Workshop

Stored Procedure Workshop Answer Using Loop

Stored Procedure Workshop Answer Using WHILE

Stored Procedure Workshop Answer Using FOR Loop

Procedure Workshop Answer Using Reverse FOR Loop

Creating a Complex Javascript Stored Procedure

Inserting a Row Into a Table Using Javascript

Updating a Row Into a Table Using Javascript

Deleting a Row Into a Table Using Javascript

DDL that Applies to Stored Procedures

Describe Procedure

Procedure Definition from Information_Schema

Procedure Definition from GET_DDL

Procedure Definition from GET_DDL using TRUE Keyword

Alter Procedure

Renaming a Procedure

Dropping a Procedure

Snowflake Data Types you must Convert to Javascript

Stored Procedure to Get Methods from an Object

Stored Procedure Javascript Methods Part 1

Stored Procedure JavaScript Methods

Stored Procedure Javascript Methods Part 2

Stored Procedure to Get Methods from a ResultSet Object

Stored Procedure Javascript ResultSet Methods

Make Your Arguments in Upper Case

Best Practice – Make Your Arguments in Upper Case

How to Catch and Error using Try/Catch

Using a WHILE Loop

Creating a Stored Procedure to Get Fibonacci Numbers

Create a Stored Procedure to get Factorial Numbers

Using a WHILE Loop Example ResultSet

Line Continuation for Long SQL Statements

Loading Rows From a Join Into a Table

Using Stored Procedures to Produce Dynamic SQL

Dynamic SQL Example to Truncate a Table

Dynamic SQL Store Procedure that Calls Another Procedure

Stored Procedures Privileges

Information_Schema for a Database and a Schema

A Stored Procedure to Show Privileges

Finding Details About Procedures

Granting and Revoking Usage on a Procedure to Another Role

 

Chapter 29 – Statistical Aggregate Functions

 

The Stats Table

The KURTOSIS Function

A KURTOSIS Example

The SKEW Function

SKEW Example

The STDDEV_POP Function

STDDEV_POP Example

The STDDEV_SAMP Function

A STDDEV_SAMP Example

The VAR_POP Function

A VAR_POP Example

The VAR_SAMP Function

A VAR_SAMP Example

The CORR Function

A CORR Example

Another CORR Example so you can Compare

The VARIANCE Function

A VARIANCE Example

The COVAR_POP Function

A COVAR_POP Example

Another COVAR_POP Example so you can Compare

The COVAR_SAMP Function

A COVAR_SAMP Example

Another COVAR_SAMP Example so you can Compare

The REGR_INTERCEPT  Function

A REGR_INTERCEPT  Example

Another REGR_INTERCEPT Example so you can Compare

The REGR_SLOPE Function

A REGR_SLOPE Example

Another REGR_SLOPE  Example so you can Compare

The REGR_AVGX Function

A REGR_AVGX Example

Another REGR_AVGX  Example so you can Compare

The REGR_AVGY   Function

A REGR_AVGY Example

Another REGR_AVGY  Example so you can Compare

The REGR_COUNT   Function

A REGR_COUNT   Example

The REGR_R2 Function

A REGR_R2 Example

The REGR_SXX   Function

A REGR_SXX Example

The REGR_SXY Function

A REGR_SXY Example

The REGR_SYY Function

A REGR_SYY Example

Using GROUP BY

APPROX_COUNT_DISTINCT

 

Chapter 30 – Mathematical Functions

 

Numeric Manipulation Functions

ABS

ACOS

ACOSH

ASIN

ASINH

ATAN

ATAN2

ATANH

CBRT

Ceil

COS

COSH

COT

DEGREES

Numeric Function – DIV0 (Division Operator)

EXP

FACTORIAL

Floor

HAVERSINE

LN

LOG

MOD

PI

POW or POWER

RADIANS

ROUND

SIGN

SIN

SINH

SQRT

SQUARE

TAN

TANH

TRUNC or TRUNCATE