How to load data from Google Analytics to Snowflake

Access your data on Google Analytics

The first step in loading your Analytics data to any data warehouse solution is to access your data and start extracting it.

The Google Analytics Reporting API is the most advanced programmatic method to access report data in Google Analytics. The API also allows you to interact with the Google Analytics account programmatically you own, creating reports and dashboards that can be viewed from within your GA account and embed them into other applications.

Data from Google Analytics is always coming in the form of a report, which means that you have to construct a report and request it from Google Analytics for a specific time period.

Google Analytics is accessed in the same way that every other Google API is. You need to leverage the Google API console to manage applications and access various APIs, including Google Analytics.

In addition to the above, the things that you have to keep in mind when dealing with the Google Analytics API are:

  1. Rate limits. Every API has some rate limits that you have to respect.
  2. Authentication. You authenticate on Google Analytics using an OAuth.
  3. Paging and dealing with a big amount of data. Platforms like Google Analytics that are dealing with clickstream data tend to generate a lot of data, like events on your web properties.

Transform and prepare Google Analytics Data for Snowflake

After you have accessed your data on Google Analytics, you will have to transform it based on two main factors,

  • The limitations of the database that is going to be used
  • The type of analysis that you plan to perform

Each system has specific limitations on the data types and data structures that it supports. Suppose, for example, you want to push data into Google BigQuery. In that case, you can send nested data like JSON directly, but keep in mind that the data you get from Google Analytics is in the form of a tabular report closer to what a CSV or a spreadsheet looks like.

Of course, when you are dealing with tabular data stores, like Microsoft SQL Server, this is not an option. Instead, you will have to flatten out your data, just as in the case of JSON, before loading it into the database.

Also, you have to choose the right data types. Again, depending on the system that you will send data to and the data types that the API exposes to you, you will have to make the right choices. These choices are important because they can limit the expressivity of your queries and limit your analysts on what they can do directly out of the database. Google Analytics has a very limited set of available data types which means that your work to do these mappings is much easier and straightforward, but nonetheless equally important with any other case of a data source.

In order to understand and model your Analytics data correctly, you will need to understand that any data coming out of it is in the form of a report. The report is like a spreadsheet, and it can be naturally mapped into a table. So more or less, you will end up with a one-to-one mapping between a report and a table on your database.

You also need to keep in mind that because of the report nature of data, you will not find any primary keys that can be used for deduplication and reference. This is something that you have to construct by understanding the nature of your report’s data.

Also, as Google analytics is sampling data to generate the report, you might see slightly different values if you pull the same report for the same period, more than once.

Data in Snowflake is organized around tables with a well-defined set of columns, with each one having a specific data type.

Snowflake supports a rich set of data types. It is worth mentioning that a number of semi-structured data types are also supported. It is possible to load data directly in JSON, Avro, ORC, Parquet, or XML format with Snowflake. Hierarchical data is treated as a first-class citizen, similar to what Google BigQuery offers.

There is also one notable common data type that Snowflake does not support. LOB or large object data type is not supported. Instead, you should use a BINARY or VARCHAR type instead. But these types are not that useful for data warehouse use cases.

A typical strategy for loading data from Google Analytics to Snowflake is to create a schema where you will map each API endpoint to a table.

Each key inside the Google Analytics API endpoint response should be mapped to a column of that table, and you should ensure the right conversion to a Snowflake data type.

Of course, you will have to ensure that as the data types from the Google Analytics API might change, you will adapt your database tables accordingly; there’s no such thing as automatic data type casting.

After you have a complete and well-defined data model or schema for Snowflake, you can move forward and start loading your data into the database.

Load data from Google Analytics to Snowflake

Usually, data is loaded into Snowflake in a bulk way, using the COPY INTO command. Files containing data, usually in JSON format, are stored in a local file system or in Amazon S3 buckets. Then a COPY INTO command is invoked on the Snowflake instance, and data is copied into a data warehouse.

The files can be pushed into Snowflake using the PUT command into a staging environment before the COPY command is invoked.

Another alternative is to upload data directly into a service like Amazon S3, from where Snowflake can access data directly.

Updating your Google Analytics data on Snowflake

As you will be generating more data on Google Analytics, you must update your older data on Snowflake. This includes new records and updates to older records that have been updated on Google Analytics for any reason.

You will need to periodically check Google Analytics for new data and repeat the process described while updating your currently available data if needed. Updating an already existing row on a Snowflake table is achieved by creating UPDATE statements.

Another issue that you need to take care of is identifying and removing any duplicate records on your database. Either because Google Analytics does not have a mechanism to identify new and updated records or because of errors on your data pipelines, duplicate records might be introduced to your database.

In general, ensuring the quality of data inserted into your database is a big and difficult issue.

The best way to load data from Google Analytics to Snowflake

So far, we just scraped the surface of what you can do with Snowflake and how to load data into it. Things can get even more complicated if you want to integrate data coming from different sources.

Are you striving to achieve results right now?

Instead of writing, hosting, and maintaining a flexible data infrastructure, RudderStack can automatically handle everything for you.

RudderStack, with one click, integrates with sources or services, creates analytics-ready data, and syncs your Google Analytics to Snowflake right away. Don't want to go through the pain of direct integration? RudderStack’s Google Analytics to Snowflake integration makes it easy to send data from Google Analytics to Snowflake.

Sign Up For Free And Start Sending Data
Test out our event stream, ELT, and reverse-ETL pipelines. Use our HTTP source to send data in less than 5 minutes, or install one of our 12 SDKs in your website or app.
Don't want to go through the pain of direct integration? RudderStack's Google Analytics integration makes it easy to send data from Google Analytics to Snowflake.