Snowflake is like that friend who’s always got something new up their sleeve! Snowflake is all about staying up-to-date and cool, regularly spicing up its lineup of awesome features to keep up with the changing times in the world of data. So, in this blog post, get ready for a front-row seat to the show as I walk you through these cool updates and show you exactly how to use them to make your data game even stronger. We’ll be covering the following SQL functions:
- EXCLUDE
- RENAME
- REPLACE
- ILIKE
- GROUP BY ALL
Throughout this blog post, we will reference Snowflake’s Tasty Bytes dataset. To learn more about how to set up your Tasty Bytes data, here’s a handy Snowflake quickstart guide: An Introduction to Tasty Bytes.
EXCLUDE
In Snowflake, you have the option of using the EXCLUDE
keyword within your SELECT
statement to give certain columns the slip, ensuring they stay out of your query results. This trick comes in handy especially when you’re dealing with a large number of columns and only want to give the boot to a select few, making your query outcomes cleaner and more focused. For example, let’s look at the following SQL:
SELECT * FROM FROSTBYTE_TASTY_BYTES.RAW_POS.MENU;
This dataset contains 11 columns. Typically, if you want to exclude a handful of columns, you’d have to painstakingly list out the chosen columns within your SELECT
statement. Now, with EXCLUDE
, you can simply select all columns and exclude the one you don’t want in your query results. Let’s say you don’t want your query to contain MENU_TYPE_ID
, you can simply add EXCLUDE
followed by the MENU_TYPE_ID
:
SELECT * EXCLUDE MENU_TYPE_ID FROM FROSTBYTE_TASTY_BYTES.RAW_POS.MENU;
If you want to exclude multiple columns at once, all you have to do is put those columns together within a set of trusty brackets:
SELECT * EXCLUDE (MENU_TYPE_ID, MENU_ITEM_ID) FROM FROSTBYTE_TASTY_BYTES.RAW_POS.MENU;
RENAME
Snowflake also allows you to rename specific columns in your SELECT statement. Think of it as a sibling to the exclude feature we talked about earlier; it functions in a similar manner:
SELECT * RENAME TRUCK_BRAND_NAME AS TRUCK_NAME FROM FROSTBYTE_TASTY_BYTES.RAW_POS.MENU;
Just like you’d gather columns within brackets to exclude them for renaming, you can apply the same principle:
SELECT * RENAME (TRUCK_BRAND_NAME AS TRUCK_NAME, MENU_ITEM_NAME AS ITEM_NAME) FROM FROSTBYTE_TASTY_BYTES.RAW_POS.MENU;
You can also combine them and use EXCLUDE
and RENAME
in the same statement, for example:
SELECT * EXCLUDE (CC_CLOSED_DATE_SK, CC_CALL_CENTER_ID) RENAME (CC_REC_START_DATE AS CC_START_DATE, CC_REC_END_DATE AS CC_END_DATE) FROM SNOWFLAKE_SAMPLE_DATA.TPCDS_SF100TCL.CALL_CENTER LIMIT 1000;
REPLACE
In your Snowflake toolkit, there’s another handy function called REPLACE
, which lets you seamlessly switch up the values of particular columns right within your statement. Just as with EXCLUDE
and RENAME
, this comes to the rescue when you’re aiming to tweak the values of one or more columns in a targeted manner:
SELECT * REPLACE (UPPER(MENU_TYPE) AS MENU_TYPE) FROM FROSTBYTE_TASTY_BYTES.RAW_POS.MENU;
You can combine EXCLUDE
, REPLACE
and RENAME
; however, EXCLUDE
needs to be the first keyword, followed by REPLACE
then RENAME
, for example:
SELECT * EXCLUDE (MENU_TYPE_ID, MENU_ITEM_ID) REPLACE (UPPER(MENU_TYPE) AS MENU_TYPE) RENAME (TRUCK_BRAND_NAME AS TRUCK_NAME, MENU_ITEM_NAME AS ITEM_NAME) FROM FROSTBYTE_TASTY_BYTES.RAW_POS.MENU;
ILIKE
ILIKE
allows matching of strings based on comparison with a pattern and now joins the party in your SELECT
statement just like EXCLUDE
RENAME
and REPLACE
. Imagine the dataset we explored earlier. Now, suppose we’re aiming to simplify things by retaining only those column names that include the string “MENU.” The process is as straightforward as follows:
SELECT * ILIKE '%MENU%' FROM FROSTBYTE_TASTY_BYTES.RAW_POS.MENU;
You can also combine ILIKE
with all the keywords we mentioned before, except EXCLUDE
. For example, let’s test this out by specifying ILIKE
, REPLACE
and RENAME
in the same SELECT
statement:
SELECT * ILIKE '%MENU%' REPLACE (UPPER(MENU_TYPE) AS MENU_TYPE) RENAME (MENU_TYPE AS ITEM_TYPE, MENU_ITEM_NAME AS ITEM_NAME) FROM FROSTBYTE_TASTY_BYTES.RAW_POS.MENU;
GROUP BY ALL
This new function liberates you from the task of explicitly listing every column in your GROUP BY
statement. Let’s kick off by setting the stage with a straightforward product sales table and insert into it some mock data to get things rolling:
CREATE OR REPLACE TABLE PRODUCT_SALES ( PRODUCT_ID NUMBER ,PRICE NUMBER ,QUANTITY NUMBER ,STORE_NAME STRING ,COUNTRY STRING ); INSERT INTO PRODUCT_SALES VALUES (1, '50', 3, 'Store 1', 'Australia') ,(1, '50', 1, 'Store 2', 'Australia') ,(1, '50', 2, 'Store 3', 'New Zealand') ,(2, '25', 1, 'Store 1', 'Australia') ,(2, '25', 6, 'Store 2', 'Australia') ,(2, '25', 1, 'Store 4', 'Australia') ,(3, '15', 4, 'Store 4', 'Australia') ,(4, '33', 1, 'Store 4', 'Australia');
Suppose we’re aiming to capture the sales (PRODUCT * QUANTITY) across different stores and countries. In such a scenario, the benefit of utilising GROUP BY ALL
becomes apparent – it spares us the effort of individually listing each column in the group by statement, as demonstrated in the following instance:
SELECT STORE_NAME ,COUNTRY ,SUM(PRICE * QUANTITY) AS SALES FROM PRODUCT_SALES GROUP BY ALL ;
While this example may appear straightforward, consider the potential convenience when dealing with a large number of columns within your SELECT
statement. Just envision the efficiency boost that awaits in such scenarios.
You can also put GROUP BY ALL
to work alongside the keywords we explored earlier. For instance:
SELECT * ILIKE '%TYPE%' REPLACE (UPPER(MENU_TYPE) AS MENU_TYPE) RENAME (MENU_TYPE AS TYPE) , COUNT(*) AS RECORD_COUNT FROM FROSTBYTE_TASTY_BYTES.RAW_POS.MENU GROUP BY ALL ;
Considerations
Be aware that when specifying a combination of keywords after SELECT *
you cannot specify both ILIKE
and EXCLUDE
.
When specifying EXCLUDE
with REPLACE
or RENAME
you must specify EXCLUDE
before any other keyword:
SELECT * EXCLUDE ... REPLACE ...
SELECT * EXCLUDE ... RENAME ...
SELECT * EXCLUDE ... REPLACE ... RENAME ...
When specifying ILIKE
with REPLACE
or RENAME
, you must specify ILIKE
before any other keyword:
SELECT * ILIKE ... REPLACE
SELECT * ILIKE ... RENAME ...
SELECT * ILIKE... REPLACE ... RENAME
When specifying REPLACE
and RENAME
, you must specify REPLACE
first:
SELECT * REPLACE ... RENAME ...
Wrap Up
Thanks for taking the time to learn more about Snowflake’s new features! We’ve introduced some awesome functions like EXCLUDE
, RENAME
, REPLACE
, ILIKE
and GROUP BY ALL
, each ready to turbocharge your data management. Snowflake’s got your back with these slick functions, making data challenges a breeze. Now, armed with these tricks, you’re all set to dive into your data world with newfound confidence!