How to Load Unstructured Data in Snowflake

Published: December 13, 2024

down-chevron

Nikesh Vora

Technical Product Manager @ Coefficient

Desktop Hero Image Mobile Hero Image

Unstructured data holds a wealth of untapped insights for businesses. However, managing this diverse information—from text documents to images and videos—poses unique challenges. 

This guide demonstrates how to use Snowflake’s capabilities to load, process, and query unstructured data effectively. By mastering these techniques, you’ll enhance your team’s ability to build comprehensive data models, uncover hidden patterns, and support more sophisticated analytics projects across your organization.

Unstructured Data 101: Understanding the Basics

Unstructured data refers to information that doesn’t adhere to a predefined data model or schema. It comes in various formats, such as text documents, images, audio files, and videos. Unlike structured data, which fits neatly into rows and columns, unstructured data is more free-form and requires specialized techniques for storage, processing, and analysis.

Challenges in Managing Unstructured Data

  • Lack of a Consistent Structure or Schema: Unstructured data does not have a uniform structure, making it difficult to organize and analyze.
  • Large File Sizes and Storage Requirements: Files such as videos and high-resolution images can consume significant storage space.
  • Difficulty in Querying and Analyzing the Data: Traditional query tools are often not equipped to handle unstructured data formats effectively.
  • Integration Issues with Existing Data Management Systems: Incorporating unstructured data into legacy systems can be complex and resource-intensive.

Benefits of Incorporating Unstructured Data

  • Comprehensive View of the Business: Combining unstructured data with structured data provides a holistic view of organizational operations.
  • Valuable Insights and Patterns: Analyzing unstructured data can reveal trends and insights not evident from structured data alone.
  • Enhanced Decision-Making: A richer data foundation supports better decision-making by providing context and depth.
  • Improved Customer Understanding: Unstructured data, such as social media posts or customer reviews, helps in understanding customer sentiments and preferences.

Visual Comparison of Structured vs. Unstructured Data

AspectStructured DataUnstructured Data
FormatTables, rows, columnsText, images, videos, audio
ExamplesDatabases, spreadsheetsEmails, social media posts
StorageRelational databasesData lakes, cloud storage
ProcessingSQL queriesNLP, machine learning, UDFs
ChallengesData normalizationSchema-less storage, querying

Snowflake’s Unstructured Data Support: Key Features and Capabilities

Snowflake provides extensive support for handling unstructured data, making it a powerful platform for managing diverse data types. Let’s explore some of the key features and capabilities that enable efficient unstructured data management in Snowflake.

File Format Support

Snowflake supports a wide range of file formats for unstructured data, including:

  • Text Files: CSV, JSON, XML
  • Binary Files: Avro, ORC, Parquet
  • Image Files: JPEG, PNG
  • Audio Files: WAV, MP3
  • Video Files: MP4, AVI

This flexibility allows organizations to load and store unstructured data from various sources without the need for complex transformations.

External Tables and Stages

Snowflake introduces the concept of external tables and stages, which simplify the process of loading and querying unstructured data.

External Tables: Provide a metadata layer over the unstructured data files, allowing you to query them using SQL without physically loading the data into Snowflake.

CREATE OR REPLACE EXTERNAL TABLE my_external_table (

    id STRING,

    data VARIANT

)

WITH LOCATION = @my_external_stage

FILE_FORMAT = (FORMAT_NAME = ‘my_file_format’);

Stages: Serve as intermediate storage locations for unstructured data files. You can load data into stages from external sources and then use external tables to query the data directly from the stages.

CREATE STAGE my_external_stage

URL = ‘s3://mybucket/mypath/’

CREDENTIALS = (AWS_KEY_ID = ‘your_aws_key’ AWS_SECRET_KEY = ‘your_aws_secret_key’);

Data Transformation and Processing

Snowflake offers powerful data transformation and processing capabilities for unstructured data. With features like SQL-based transformations, user-defined functions (UDFs), and stored procedures, you can perform complex data manipulations and extractions on unstructured data.

SQL Transformations: Use SQL functions to parse and extract relevant information from text files, apply data cleansing techniques, or perform sentiment analysis on customer reviews.

SELECT data:review::STRING AS review_text,

       sentiment_analysis(data:review::STRING) AS sentiment

FROM my_external_table;

User-Defined Functions (UDFs): Create custom functions to handle specific data processing needs.

CREATE OR REPLACE FUNCTION sentiment_analysis(review STRING)

RETURNS STRING

LANGUAGE PYTHON

RUNTIME_VERSION = ‘3.8’

IMPORTS = (‘@my_stage/sentiment_model.py’)

HANDLER = ‘sentiment_model.analyze’;

Integration with Other Tools

Snowflake seamlessly integrates with various tools and frameworks commonly used for unstructured data processing:

  • Big Data Processing: Apache Spark, Hadoop
  • Data Integration Tools: Informatica, Talend
  • AI and Machine Learning Platforms: TensorFlow, PyTorch

These integrations enable you to leverage the power of specialized tools for tasks such as data ingestion, transformation, and advanced analytics while still benefiting from Snowflake’s scalable and efficient data storage and querying capabilities.

Setting Up Snowflake for Unstructured Data: Step-by-Step Guide

Now that we’ve covered the basics of unstructured data and Snowflake’s capabilities, let’s dive into the step-by-step process of setting up Snowflake to handle unstructured data effectively.

Preparing the Necessary Snowflake Infrastructure

Before you start loading unstructured data into Snowflake, you need to set up the necessary infrastructure components. This includes:

Creating a Snowflake Account: Set up your Snowflake account and configure the necessary permissions and access controls.

Configuring a Virtual Warehouse: Allocate a virtual warehouse to handle the data processing workload.


CREATE OR REPLACE WAREHOUSE my_warehouse

WITH WAREHOUSE_SIZE = ‘MEDIUM’

AUTO_SUSPEND = 300

INITIALLY_SUSPENDED = TRUE;

Creating a Database and Schema: Create a database and schema to store the unstructured data and associated metadata.


CREATE OR REPLACE DATABASE my_database;

CREATE OR REPLACE SCHEMA my_schema;

Setting up Stages, External Tables, and File Formats

To load and query unstructured data in Snowflake, you need to set up stages, external tables, and file formats. Here’s how you can do it:

Create an External Stage: Use cloud storage services like Amazon S3, Azure Blob Storage, or Google Cloud Storage as the external stage location.


CREATE STAGE my_external_stage

URL = ‘s3://mybucket/mypath/’

CREDENTIALS = (AWS_KEY_ID = ‘your_aws_key’ AWS_SECRET_KEY = ‘your_aws_secret_key’);

Define File Formats: Specify the file type, compression, and any additional format-specific properties.


CREATE FILE FORMAT my_file_format

TYPE = ‘CSV’

FIELD_OPTIONALLY_ENCLOSED_BY = ‘”‘

COMPRESSION = ‘GZIP’;

Create External Tables: Reference the unstructured data files in the external stage. The external tables act as a metadata layer, allowing you to query the data using SQL without physically loading it into Snowflake.

sql
Copy code
CREATE OR REPLACE EXTERNAL TABLE my_external_table (

    id STRING,

    data VARIANT

)

WITH LOCATION = @my_external_stage

FILE_FORMAT = (FORMAT_NAME = ‘my_file_format’);

Configuring Data Ingestion Pipelines for Unstructured Data Sources

With the Snowflake infrastructure set up, you can now configure data ingestion pipelines to load unstructured data from various sources into Snowflake. The process typically involves the following steps:

  1. Identify Unstructured Data Sources:
    • Determine the unstructured data sources to load into Snowflake, such as text files, images, audio files, or videos.
  2. Set Up Data Ingestion Tools or Scripts:
    • Extract the unstructured data from the source systems and transfer it to the external stage in Snowflake using tools like Apache NiFi, Kafka, or custom data ingestion scripts.


import boto3

# Transfer file from local system to S3

s3 = boto3.client(‘s3’)

s3.upload_file(‘local_file.csv’, ‘mybucket’, ‘mypath/local_file.csv’)

  1. Handle Necessary Data Transformations:
    • Configure the data ingestion process to handle any necessary data transformations, such as file format conversions, data cleansing, or metadata extraction.
  2. Schedule and Automate the Data Ingestion Process:
    • Ensure regular updates and synchronization of the unstructured data in Snowflake by automating the data ingestion process.


import snowflake.connector

# Load data from S3 into Snowflake

conn = snowflake.connector.connect(

    user=’your_username’,

    password=’your_password’,

    account=’your_account’

)

cursor = conn.cursor()

# Example table creation and insertion

cursor.execute(“””

CREATE OR REPLACE TABLE unstructured_data (

    id INT AUTOINCREMENT,

    text STRING,

    metadata STRING

)

“””)

cursor.execute(“INSERT INTO unstructured_data (text, metadata) VALUES (%s, %s)”, (‘sample text’, ‘sample metadata’))

conn.close()

Optimizing Storage and Performance for Unstructured Data in Snowflake

When loading unstructured data into Snowflake, it’s crucial to optimize storage and query performance. Here are some best practices:

Best Practices for Storage Optimization

  • Use Columnar Storage: Snowflake automatically uses columnar storage, which provides better compression and faster queries for structured portions of your data. This is particularly beneficial when dealing with large datasets.

Partition Large Tables: Partition large tables by date or other key attributes to improve query efficiency. This helps Snowflake to process queries more quickly by scanning only the relevant partitions.

CREATE TABLE large_unstructured_data (

    id INT,

    event_date DATE,

    data VARIANT

)

CLUSTER BY (event_date);

Leverage Snowflake’s Caching: Utilize Snowflake’s result caching to speed up repeated queries on frequently accessed data. Cached results can significantly reduce query times.

— Example query that benefits from result caching

SELECT * FROM large_unstructured_data WHERE event_date = ‘2024-06-11’;

Best Practices for Performance Optimization

Monitor Query Performance: Regularly monitor query performance using Snowflake’s Query Profile and other monitoring tools. This helps in identifying slow queries and optimizing them.

SELECT * FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY())

WHERE EXECUTION_STATUS = ‘SUCCESS’

ORDER BY START_TIME DESC;

Use Indexes or Clustering Keys: Adding clustering keys can optimize the performance of specific queries. Although Snowflake doesn’t use traditional indexes, clustering keys serve a similar purpose by organizing the data more effectively.

ALTER TABLE large_unstructured_data

CLUSTER BY (event_date);

Normalizing and Processing Unstructured Data in Snowflake

Unstructured data often requires additional processing and normalization to extract valuable insights. Snowflake provides several capabilities to transform and enrich this data:

Techniques for Normalizing and Processing Data

SQL Functions for Text Parsing: Use SQL functions like REGEXP_SUBSTR to parse and extract structured elements from text fields. This is useful for pulling out specific data points from text strings.

SELECT REGEXP_SUBSTR(data::STRING, ‘\\d{4}-\\d{2}-\\d{2}’) AS extracted_date

FROM large_unstructured_data;

External Functions and UDFs: Leverage external functions and UDFs to process images, audio, or video files and output structured metadata. These functions can be written in Python or JavaScript and run within Snowflake.

CREATE OR REPLACE FUNCTION process_image(image_url STRING)

RETURNS STRING

LANGUAGE PYTHON

RUNTIME_VERSION = ‘3.8’

IMPORTS = (‘@my_stage/image_processing.py’)

HANDLER = ‘image_processing.extract_metadata’;

Native Data Transformation Features: Apply Snowflake’s native data transformation features like CAST, SPLIT, and FLATTEN to normalize semi-structured data. These functions help convert data into a more structured format.

SELECT FLATTEN(data:json_array) AS flattened_data

FROM large_unstructured_data;

Implement Data Quality Checks: Set up data quality checks and schema evolution processes to handle changing data structures over time. This ensures that the data remains accurate and consistent.

SELECT *

FROM large_unstructured_data

WHERE VALIDATE_JSON(data::STRING) = TRUE;

By combining these techniques, you can turn raw unstructured data into a clean, analytics-ready format within Snowflake.

How to Load Unstructured Data in Snowflake

Loading and managing unstructured data in Snowflake opens up exciting possibilities for deeper insights and analytics. By following best practices for storage and performance optimization, leveraging Snowflake’s processing capabilities, and learning from successful use cases, you can maximize the value of your unstructured data.

Coefficient’s software tools further enhance the Snowflake experience with intuitive interfaces for data management, analytics, and visualization. Visit Coefficient to learn more and start your unstructured data journey today.