Preparing Your Data Files | Snowflake Documentation (2023)

This topic provides best practices, general guidelines, and important considerations for preparing your data files for loading.

File Sizing Best Practices and Limitations

For best load performance and to avoid size limitations, consider the following data file sizing guidelines. Note that these recommendations apply to bulk data loads as well as continuous loading using Snowpipe.

General File Sizing Recommendations

The number of load operations that run in parallel cannot exceed the number of data files to be loaded. To optimize the number of parallel operations for a load, we recommend aiming to produce data files roughly 100-250 MB (or larger) in size compressed.


Loading very large files (e.g. 100 GB or larger) is not recommended.

If you must load a large file, carefully consider the ON_ERROR copy option value. Aborting orskipping a file due to a small number of errors could result in delays and wasted credits. In addition, if a data loading operationcontinues beyond the maximum allowed duration of 24 hours, it could be aborted without any portion of the file being committed.

Aggregate smaller files to minimize the processing overhead for each file. Split larger files into a greater number of smaller files to distribute the load among the compute resources in an active warehouse. The number of data files that are processed in parallel is determined by the amount of compute resources in a warehouse. We recommend splitting large files by line to avoid records that span chunks.

If your source database does not allow you to export data files in smaller chunks, you can use a third-party utility to split large CSV files.

Linux or macOS

The split utility enables you to split a CSV file into multiple smaller files.


split [-a suffix_length] [-b byte_count[k|m]] [-l line_count] [-p pattern] [file [name]]
(Video) NIDILRR Data Archiving and Sharing Training Part 2: Preparing Data and Documentation

For more information, type man split in a terminal window.


split -l 100000 pagecounts-20151201.csv pages

This example splits a file named pagecounts-20151201.csv by line length. Suppose the large single file is 8 GB in size and contains 10 million lines. Split by 100,000, each of the 100 smaller files is 80 MB in size (10 million / 100,000 = 100). The split files are named pages<suffix>.


Windows does not include a native file split utility; however, Windows supports many third-party tools and scripts that can split large data files.

Semi-structured Data Size Limitations

The VARIANT data type imposes a 16 MB size limit on individual rows.

In general, JSON data sets are a simple concatenation of multiple documents. The JSON output from some software is composed of a single huge array containing multiple records. There is no need to separate the documents with line breaks or commas, though both are supported.

Instead, we recommend enabling the STRIP_OUTER_ARRAY file format option for theCOPY INTO <table> command to remove the outer array structure and load the records into separate table rows:

COPY INTO <table>FROM @~/<file>.jsonFILE_FORMAT = (TYPE = 'JSON' STRIP_OUTER_ARRAY = true);
(Video) The Best Way to Manage Files and Folders (ABC Method)

Continuous Data Loads (i.e. Snowpipe) and File Sizing

Snowpipe is designed to load new data typically within a minute after a file notification is sent; however, loading can take significantly longer for really large files or in cases where an unusual amount of compute resources is necessary to decompress, decrypt, and transform the new data.

In addition to resource consumption, an overhead to manage files in the internal load queue is included in the utilization costs charged for Snowpipe. This overhead increases in relation to the number of files queued for loading. This overhead charge appears as Snowpipe charges in your billing statementbecause Snowpipe is used for event notifications for the automatic external table refreshes.

For the most efficient and cost-effective load experience with Snowpipe, we recommend following the file sizing recommendations in File Sizing Best Practices and Limitations (in this topic). Loading data files roughly 100-250 MB in size or larger reduces the overhead charge relative to the amount of total data loaded to the point where the overhead cost is immaterial.

If it takes longer than one minute to accumulate MBs of data in your source application, consider creating a new (potentially smaller) data file once per minute. This approach typically leads to a good balance between cost (i.e. resources spent on Snowpipe queue management and the actual load) and performance (i.e. load latency).

Creating smaller data files and staging them in cloud storage more often than once per minute has the following disadvantages:

  • A reduction in latency between staging and loading the data cannot be guaranteed.

  • An overhead to manage files in the internal load queue is included in the utilization costs charged for Snowpipe. This overhead increases in relation to the number of files queued for loading.

Various tools can aggregate and batch data files. One convenient option is Amazon Kinesis Firehose. Firehose allows defining both thedesired file size, called the buffer size, and the wait interval after which a new file is sent (to cloud storage in this case), calledthe buffer interval. For more information, see theKinesis Firehose documentation. If your source applicationtypically accumulates enough data within a minute to populate files larger than the recommended maximum for optimal parallel processing,you could decrease the buffer size to trigger delivery of smaller files. Keeping the buffer interval setting at 60 seconds (the minimumvalue) helps avoid creating too many files or increasing latency.

Preparing Delimited Text Files

Consider the following guidelines when preparing your delimited text (CSV) files for loading:

  • UTF-8 is the default character set, however, additional encodings are supported. Use the ENCODING file format option to specify the character set for the data files. For more information, see CREATE FILE FORMAT.

  • Fields that contain delimiter characters should be enclosed in quotes (single or double). If the data contains single or double quotes, then those quotes must be escaped.

  • Carriage returns are commonly introduced on Windows systems in conjunction with a line feed character to mark the end of a line (\r \n). Fields that contain carriage returns should also be enclosed in quotes (single or double).

    (Video) Systems Documentation Techniques (AIS Ch 3)

  • The number of columns in each row should be consistent.

Semi-structured Data Files and Columnarization

When semi-structured data is inserted into a VARIANT column, Snowflake extracts as much of the data as possible to a columnar form, based on certain rules. The rest is stored as a single column in a parsed semi-structured structure. Currently, elements that have the following characteristics are not extracted into a column:

  • Elements that contain even a single “null” value are not extracted into a column. Note that this applies to elements with “null” values and not to elements with missing values, which are represented in columnar form.

    This rule ensures that information is not lost, i.e, the difference between VARIANT “null” values and SQL NULL values is not obfuscated.

  • Elements that contain multiple data types. For example:

    The foo element in one row contains a number:


    The same element in another row contains a string:


When a semi-structured element is queried:

  • If the element was extracted into a column, Snowflake’s execution engine (which is columnar) scans only the extracted column.

  • If the element was not extracted into a column, the execution engine must scan the entire JSON structure, and then for each row traverse the structure to output values, impacting performance.

    (Video) Auto-Generated Python Documentation with Sphinx (See comments for update fix)

To avoid this performance impact:

  • Extract semi-structured data elements containing “null” values into relational columns before loading them.

    Alternatively, if the “null” values in your files indicate missing values and have no other special meaning, we recommend setting the file format option STRIP_NULL_VALUES to TRUE when loading the semi-structured data files. This option removes object elements or array elements containing “null” values.

  • Ensure each unique element stores values of a single native data type (string or number).

Numeric Data Guidelines

  • Avoid embedded characters, such as commas (e.g. 123,456).

  • If a number includes a fractional component, it should be separated from the whole number portion by a decimal point (e.g. 123456.789).

  • Oracle only. The Oracle NUMBER or NUMERIC types allow for arbitrary scale, meaning they accept values with decimal components even if the data type was not defined with a precision or scale. Whereas in Snowflake, columns designed for values with decimal components must be defined with a scale to preserve the decimal portion.

Date and Timestamp Data Guidelines

  • For information on the supported formats for date, time, and timestamp data, see Date and Time Input / Output.

  • Oracle only. The Oracle DATE data type can contain date or timestamp information. If your Oracle database includes DATE columns that also store time-related information, map these columns to a TIMESTAMP data type in Snowflake rather than DATE.


Snowflake checks temporal data values at load time. Invalid date, time, and timestamp values (e.g. 0000-00-00) produce an error.


What file format is best for Snowflake? ›

Based on our experience, we recommend that CSV and Avro should be the preferred formats for loading data into Snowflake. Even if you are planning to keep a copy of data on object storage (S3, etc.)

What is the default file format for Snowflake? ›

For loading data from delimited files (CSV, TSV, etc.), UTF-8 is the default. For loading data from all other supported file formats (JSON, Avro, etc.), as well as unloading data, UTF-8 is the only supported character set. Snowflake stores all data internally in the UTF-8 character set.

What size data file for Snowflake loading? ›

General File Sizing Recommendations

To optimize the number of parallel operations for a load, we recommend aiming to produce data files roughly 100-250 MB (or larger) in size compressed. Loading very large files (e.g. 100 GB or larger) is not recommended.

What are the usual data loading steps in Snowflake? ›

Now the following steps are required for Loading Data to Snowflake:
  1. Step 1: Use the demo_db Database. ...
  2. Step 2: Create the Contacts Table. ...
  3. Step 3: Populate the Table with Records. ...
  4. Step 4: Create an Internal Stage. ...
  5. Step 5: Execute a PUT Command to Stage the Records in CSV Files.
Dec 13, 2021

What stages can you use to load data files? ›

  • Bulk Loading from a Local File System. Choosing an Internal Stage for Local Files. Types of Internal Stages. Creating a Named Stage. Staging Data Files from a Local File System. ...
  • Bulk Loading from Amazon S3.
  • Bulk Loading from Google Cloud Storage.
  • Bulk Loading from Microsoft Azure.
  • Troubleshooting Bulk Data Loads.

What SQL is used in Snowflake? ›

Snowflake supports standard SQL, including a subset of ANSI SQL:1999 and the SQL:2003 analytic extensions. Snowflake also supports common variations for a number of commands where those variations do not conflict with each other.

Is Snowflake SQL or no SQL? ›

Snowflake is fundamentally built to be a complete SQL database. It is a columnar-stored relational database and works well with Tableau, Excel and many other tools familiar to end users.

What coding language is Snowflake? ›

For general users, Snowflake provides complete ANSI SQL language support for managing day-to -day operations. It's cloud agnostic, with unlimited, seamless scalability across Amazon Web Services (AWS) and Microsoft Azure (with the prospect of adding Google Cloud soon).

Is Snowflake a database or ETL? ›

Snowflake supports both ETL and ELT and works with a wide range of data integration tools, including Informatica, Talend, Tableau, Matillion and others.

Can you write SQL in Snowflake? ›

Snowflake provides support for standard SQL, including a subset of ANSI SQL:1999 and the SQL:2003 Analytic extensions. It also supports common variations for numerous commands where those variations do not conflict with each other. This guide will take you through the basic steps of configuring and using Snowflake SQL.

What are the six workloads of Snowflake? ›

  • Snowflake Workloads Overview.
  • Data Applications.
  • Data Engineering.
  • Data Marketplace.
  • Data Science.
  • Data Warehousing.
  • Marketing Analytics.
  • Unistore.

What are the types of data files can be loaded in Snowflake? ›

For loading data from delimited files (CSV, TSV, etc.), UTF-8 is the default. For loading data from all other supported file formats (JSON, Avro, etc.), as well as unloading data, UTF-8 is the only supported character set.

What factors affect data load rates in Snowflake? ›

Number and types of columns – A larger number of columns may require more time relative to number of bytes in the files. Gzip Compression efficiency – More data read from S3 per uncompressed byte may lead to longer load times.

What are the stages of loading data into data warehouse? ›

Data warehousing is the process of collecting and managing different-source data to provide meaningful business insights.
The steps to load the data warehouse fact tables include:
  • Create the temp table.
  • Populate the temp table.
  • Update existing records.
  • Insert new records.
  • Perform error handling and logging.

What is the easiest & fastest way to load data in batches from the files placed on cloud? ›

Bulk Loading Using the COPY Command

This option enables loading batches of data from files already available in cloud storage, or copying (i.e. staging) data files from a local machine to an internal (i.e. Snowflake) cloud storage location before loading the data into tables using the COPY command.

What are the 4 stages of data processing? ›

The four main stages of data processing cycle are:
  • Data collection.
  • Data input.
  • Data processing.
  • Data output.

What are the three steps of getting data ready? ›

Data Preparation Steps in Detail. Access the data. Ingest (or fetch) the data. Cleanse the data.

What are the 3 stages of data processing? ›

There are three main steps – data collection, data storage, and data processing. Data can be collected manually or automatically. Once done, it must be stored. Processing is how big data is transformed into useful information.

How to query JSON in Snowflake? ›

  1. Step 1: Log in to the account. ...
  2. Step 2: Select Database. ...
  3. Step 3: Create File Format for JSON. ...
  4. Step 4: Create an Internal stage. ...
  5. Step 5: Create Table in Snowflake using Create Statement. ...
  6. Step 6: Load JSON file to internal stage. ...
  7. Step 7: Copy the data into Target Table. ...
  8. Step 8: Querying the data directly.
Dec 26, 2022

What does Snowflake do for dummies? ›

Snowflake is an elastically scalable cloud data warehouse

Snowflake is a cloud data warehouse that can store and analyze all your data records in one place. It can automatically scale up/down its compute resources to load, integrate, and analyze data.

Can Snowflake be called an ETL? ›

Snowflake supports both transformation during (ETL) or after loading (ELT). Snowflake works with a wide range of data integration tools, including Informatica, Talend, Fivetran, Matillion and others.

What type of DB is Snowflake? ›

Snowflake is a cloud-hosted relational database for building data warehouses. It's built on AWS, Azure, and Google cloud platforms and combines the functionalities of traditional databases with a suite of new and creative capabilities. It is unique in how it addresses businesses' changing needs.

Why Python is used in Snowflake? ›

The Snowflake Connector for Python provides an interface for developing Python applications that can connect to Snowflake and perform all standard operations. It provides a programming alternative to developing applications in Java or C/C++ using the Snowflake JDBC or ODBC drivers.

Is Snowflake better than SQL? ›

Snowflake vs SQL Server: Performance

The rapidly increasing data in business activities is one of the core reasons you would wanna switch from SQL Server to Snowflake. The moment you realize you are pushing through a lot more data to your SQL Server system than it can handle, you will have to add more resources.

Is Snowflake only SQL? ›

The SQL or NoSQL Debate and the SaaS Data Warehouse

Unlike most databases and data stores, Snowflake Cloud Data Warehouse features native support for both semi-structured data formats such as JSON and XML and relational data.

Is Snowflake a JSON? ›

In Snowflake, you can natively ingest semi-structured data not only in JSON but also in XML, Parquet, Avro, ORC, and other formats. This means that in Snowflake, you can efficiently store JSON data and then access it using SQL. Snowflake JSON allows you to load JSON data directly into relational tables.

Is Python an ETL tool? ›

Although Python is a viable choice for coding ETL tasks, developers do use other programming languages for data ingestion and loading.

What is ETL in SQL? ›

ETL, which stands for extract, transform and load, is a data integration process that combines data from multiple data sources into a single, consistent data store that is loaded into a data warehouse or other target system.

How is Snowflake different from SQL? ›

MS SQL data warehousing server processes all share the same pool of compute resources. Snowflake allows you to segregate use cases into their own compute buckets, improving performance and managing cost. Additionally, sometimes you need to throw a lot of computing power at a specific data-processing need.

Does Snowflake require coding? ›

Ans: Snowflake has developed a one-of-a-kind architecture based on Amazon Web Services' cloud data warehouse. Snowflake does not require any additional software, hardware, or maintenance over and above other platforms' needs.

Is Python required for Snowflake? ›

Prerequisites. Before you can install the Python connector for Snowflake, you must first ensure that a supported version of Python is installed. At time of writing, the connector requires either Python 2.7. 9 or Python 3.5.

Is Snowflake same as mysql? ›

For all other functions like aggregate functions and window functions, snowflake performs faster than mysql. For scalar functions like logarithmic, trigonometric and rounding functions, there is not a significant difference in the performance between snowflake and mysql.

What are the four layers of Snowflake? ›

Snowflake has 3 different layers:
  • Storage Layer.
  • Compute Layer.
  • Cloud Services Layer.
Jan 18, 2019

How ETL is done in Snowflake? ›

What is the ETL Process? ETL is an acronym that represents “extract, transform, load.” During this process, data is gathered from one or more databases or other sources. The data is also cleaned, removing or flagging invalid data, and then transformed into a format that's conducive for analysis.

Which 4 file formats are supported when loading data from cloud storage? ›

  • Export JSON Data to Cloud Object Storage.
  • Export Data as CSV to Cloud Object Storage.
  • Export Data as XML to Cloud Object Storage.
  • File Naming with Text Output (CSV, JSON, or XML)

What are the types of data files in SQL Server? ›

The database has a primary data file, a user-defined filegroup, and a log file. The primary data file is in the primary filegroup and the user-defined filegroup has two secondary data files.

How to load data from SQL Server to Snowflake? ›

To migrate data from Microsoft SQL Server to Snowflake, you must perform the following steps:
  1. Step 1: Export Data from SQL Server Using SQL Server Management Studio.
  2. Step 2: Upload the CSV File to an Amazon S3 Bucket Using the Web Console.
  3. Step 3: Upload Data to Snowflake From S3.
Feb 21, 2020

How do you load data faster in a Snowflake? ›

Preparing Data files

Smaller files can be aggregated to cut processing time. Also faster loading can be achieved by splitting large files into smaller files. You can then distribute the load across Snowflake servers for higher speed.

What factors affect data transfer rate? ›

Factors affecting the speed and quality of internet connection
  • Data transfer technology. ...
  • Network centralizer. ...
  • Other devices and users. ...
  • Network technology and terminal device. ...
  • Other users. ...
  • Location. ...
  • Several operators provide a free speed test for their customers.

What is the difference between Snowflake parquet and CSV? ›

Parquet is column oriented and CSV is row oriented. Row-oriented formats are optimized for OLTP workloads while column-oriented formats are better suited for analytical workloads.

What are the two main types of load? ›

Loads are usually classified into two broad groups: dead loads and live loads. Dead loads (DL) are essentially constant during the life of the structure and normally consist of the weight of the structural elements. On the other hand, live loads (LL) usually vary greatly.

What are the 3 types of loads? ›

The loads in buildings and structures can be classified as vertical loads, horizontal loads and longitudinal loads.

What are the techniques of data loading? ›

One approach is the Extract, Transform, Load (ETL) process. The other contrasting approach is the Extract, Load, and Transform (ELT) process. ETL processes apply to data warehouses and data marts. ELT processes apply to data lakes, where the data is transformed on demand by the requesting/calling application.

What are the five stages of data processing? ›

Six stages of data processing
  • Data collection. Collecting data is the first step in data processing. ...
  • Data preparation. Once the data is collected, it then enters the data preparation stage. ...
  • Data input. ...
  • Processing. ...
  • Data output/interpretation. ...
  • Data storage.

What are the 5 key components of a data warehouse? ›

A typical data warehouse has four main components: a central database, ETL (extract, transform, load) tools, metadata, and access tools. All of these components are engineered for speed so that you can get results quickly and analyze data on the fly. Diagram showing the components of a data warehouse.

What are the six stages of data processing cycle? ›

The raw data is collected, filtered, sorted, processed, analyzed, stored, and then presented in a readable format. Data processing is essential for organizations to create better business strategies and increase their competitive edge.

How many types of data loads are there? ›

There are two main types of data loading processes: a full load and an incremental load.

How do you load data from a dataset? ›

The dataset that we are going to use to load data can be found here.
5 Different Ways to Load Data in Python
  1. Manual function.
  2. loadtxt function.
  3. genfromtxt function.
  4. read_csv function.
  5. Pickle.
Apr 15, 2022

How do I fetch data from a database in batches? ›

you need pass n and m values from C# code. for example, you can set n as 1 and m as 1000 , it will fetch you first 1000 records from the DB. You can take this to start with and do changes in C# and modify above Snippet to achieve your requirement.

What is the best approach for loading data into Snowflake? ›

For most use cases, especially for incremental updating of data in Snowflake, auto-ingesting Snowpipe is the preferred approach. This approach continuously loads new data to the target table by reacting to newly created files in the source bucket.

What is the best IDE for Snowflake? ›

The top 5 Snowflake IDEs are as follows:
  • Snowflake IDE: SnowSQL CLI CLient.
  • Snowflake IDE: Aginity Pro.
  • Snowflake IDE: SnowFlake Web UI.
  • Snowflake IDE: SQL Workbench.
  • Snowflake IDE: DBeaver.
Jan 12, 2023

Can I upload a CSV file to Snowflake? ›

You can upload a CSV file that will become a table you can join to existing tables in your Snowflake connection.

What type of storage does Snowflake use? ›

Snowflake is built upon scalable Cloud blob storage. Holding all data, tables and query results, the storage layer is built to scale completely independent of compute resources.

How do I transfer data from one database to another in Snowflake? ›

Sharing Data from Multiple Databases
  1. Connect to your Snowflake account as a user with the ACCOUNTADMIN role or a role granted the CREATE SHARES global privilege. ...
  2. Create a share using CREATE SHARE.
  3. Grant the USAGE privilege on the database you wish to share using GRANT <privilege> …


1. The Best Way to Organize Your Computer Files
(Thomas Frank)
2. View your dbt documentation as a website
(Kahan Data Solutions)
3. How to create online registration form using google docs Forms
4. How To Structure Your Programming Projects
5. How To Transfer Documentation Files | John Deere Operations Center™
(John Deere)
6. Software Documentation
(Tutorials Point)
Top Articles
Latest Posts
Article information

Author: Cheryll Lueilwitz

Last Updated: 02/26/2023

Views: 6583

Rating: 4.3 / 5 (54 voted)

Reviews: 85% of readers found this page helpful

Author information

Name: Cheryll Lueilwitz

Birthday: 1997-12-23

Address: 4653 O'Kon Hill, Lake Juanstad, AR 65469

Phone: +494124489301

Job: Marketing Representative

Hobby: Reading, Ice skating, Foraging, BASE jumping, Hiking, Skateboarding, Kayaking

Introduction: My name is Cheryll Lueilwitz, I am a sparkling, clean, super, lucky, joyous, outstanding, lucky person who loves writing and wants to share my knowledge and understanding with you.