How to create temporary table in Google BigQuery
Categories:
Mastering Temporary Tables in Google BigQuery

Learn how to effectively create and utilize temporary tables in Google BigQuery for data manipulation, analysis, and optimizing query performance.
Google BigQuery is a powerful, serverless, and highly scalable data warehouse. When working with complex queries, intermediate results, or data transformations, temporary tables become an invaluable tool. Unlike permanent tables, temporary tables are session-scoped or query-scoped, meaning they are automatically deleted after a certain period or when the session ends. This guide will walk you through the various methods of creating and using temporary tables in BigQuery, highlighting their benefits and best practices.
Why Use Temporary Tables?
Temporary tables offer several advantages in BigQuery. They help break down complex queries into smaller, more manageable steps, improving readability and debugging. They can also optimize performance by materializing intermediate results, preventing BigQuery from re-computing the same subquery multiple times. Furthermore, they provide a clean workspace for data manipulation without affecting your permanent datasets, making them ideal for exploratory analysis or one-off tasks.
flowchart TD A[Start Complex Query] --> B{Intermediate Calculation 1} B --> C[Store as Temp Table 1] C --> D{Intermediate Calculation 2} D --> E[Store as Temp Table 2] E --> F[Final Query using Temp Tables] F --> G[End Query]
Workflow illustrating the use of temporary tables in a complex query.
Methods for Creating Temporary Tables
BigQuery provides a few distinct ways to create temporary tables, each suited for different scenarios. The most common methods involve using CREATE TEMPORARY TABLE
or WITH
clauses (Common Table Expressions - CTEs). Understanding the nuances of each will help you choose the most appropriate approach for your data operations.
WITH
clauses) are technically not temporary tables in the same sense as CREATE TEMPORARY TABLE
, they serve a similar purpose by defining named, temporary result sets that you can reference within a single query. For many use cases, CTEs are preferred for their readability and scope.1. Using CREATE TEMPORARY TABLE
The CREATE TEMPORARY TABLE
statement explicitly creates a temporary table that exists for the duration of your query session. This is particularly useful when you need to perform multiple operations on the same intermediate result set within a single script or session, or when the intermediate result is too large for a CTE to handle efficiently.
CREATE TEMPORARY TABLE my_temp_table AS
SELECT
column1,
column2,
COUNT(*) AS record_count
FROM
`your_project.your_dataset.your_source_table`
WHERE
column3 = 'some_value'
GROUP BY
column1, column2;
-- Now you can query the temporary table
SELECT
column1,
record_count
FROM
my_temp_table
WHERE
record_count > 100;
Example of creating and querying a temporary table using CREATE TEMPORARY TABLE
.
CREATE TEMPORARY TABLE
are automatically deleted when the query session ends. You do not need to explicitly drop them.2. Using Common Table Expressions (CTEs) with WITH
CTEs, defined using the WITH
clause, allow you to define a temporary, named result set that you can reference within a single SELECT
, INSERT
, UPDATE
, or DELETE
statement. They are excellent for improving query readability and breaking down complex logic into logical, reusable blocks. While not physical tables, BigQuery's optimizer often materializes CTEs, providing similar performance benefits to explicit temporary tables for many scenarios.
WITH
DailySales AS (
SELECT
DATE(sale_timestamp) AS sale_date,
SUM(amount) AS total_daily_sales
FROM
`your_project.your_dataset.sales_data`
GROUP BY
sale_date
),
TopSellingDays AS (
SELECT
sale_date,
total_daily_sales
FROM
DailySales
WHERE
total_daily_sales > 10000
)
SELECT
sale_date,
total_daily_sales
FROM
TopSellingDays
ORDER BY
total_daily_sales DESC;
Example of using multiple CTEs to structure a complex query.
CREATE TEMPORARY TABLE
might offer better performance than repeatedly defining the same CTE.Best Practices for Temporary Tables
To maximize the benefits of temporary tables in BigQuery, consider these best practices:
1. Choose the Right Method
For single-query scope and readability, prefer CTEs. For larger, multi-statement intermediate results within a session, CREATE TEMPORARY TABLE
is often more suitable.
2. Name Clearly
Use descriptive names for your temporary tables and CTEs to improve code readability and maintainability.
3. Filter Early
Apply filters and aggregations as early as possible in your temporary table or CTE definition to reduce the amount of data processed in subsequent steps.
4. Avoid Overuse
While beneficial, don't create temporary tables or CTEs unnecessarily. Simple queries might not need them, and excessive nesting can sometimes hinder readability.
5. Monitor Performance
Use BigQuery's query plan explanation to understand how your temporary tables and CTEs are being processed and identify potential bottlenecks.