---
title: "BigQuery Array Functions: Complete 2025 Guide"
canonical: "https://www.owox.com/blog/articles/bigquery-array-functions"
updated: "2025-03-17"
---

# Understanding BigQuery Array Functions

Explore the comprehensive guide to mastering array functions in BigQuery. Learn how to manipulate and analyze arrays for advanced data insights

[Google BigQuery](/blog/topics/bigquery) · Updated March 17, 2025 · [Alyona Samovar](/team/alyona-samovar) · [Vadym Kramarenko](/team/vadym-kramarenko) · 25 min read

![Understanding BigQuery Array Functions](https://cdn.owox.ai/www/webflow/696a4d174b9bc4690b1f7170_ARRAY-FUNCTIONS.png/public)

Understanding array functions in BigQuery and their role in data manipulation is essential for anyone working with data. Array functions in BigQuery **help manipulate lists of data**, such as combining multiple values into a single list or changing elements within these lists.

![Banner reading “Array functions”, with the BigQuery logo, over fish in water and SQL code.](https://cdn.owox.ai/www/webflow/696a4d364d3a37e4aaf55534_ARRAY-FUNCTIONS.png/public)

This article will guide you through essential array functions and how to avoid common mistakes. It’s designed **for data professionals who want to improve their skills in managing and analyzing data**. You’ll learn how to create, manipulate, and analyze arrays effectively, making your data tasks simpler and more efficient

## **Getting Started with Array Functions in BigQuery**

Starting with functions for managing arrays in BigQuery opens up possibilities for handling data more effectively. BigQuery allows you to **organize data into neat, ordered lists** where each element is similar. This organization enhances your data analysis, whether you’re grouping data for clarity or performing multiple tasks simultaneously.

Incorporating functions for arrays is essential for efficient data processing, enabling you to **manage and manipulate large datasets** with ease.

Understanding how to work with these functions can simplify and streamline your data tasks, helping you gain the insights you need more quickly.

## **BigQuery Array Functions: Constraints for Consideration**

When working with functions for arrays in [BigQuery](https://www.owox.com/blog/articles/loading-data-into-bigquery/), it’s crucial to be aware of certain limitations. These constraints can impact how you structure your [queries](https://owox.com/blog/use-cases/google-bigquery-functions-overview) and analyze your data, so understanding them upfront will help you navigate BigQuery arrays more effectively and avoid common pitfalls in your data projects.

Some of the constraints are:

*   **Handling Nested Arrays:** Navigating through layers of arrays can be complex and requires careful structuring of queries. For example, if you have an array of arrays, accessing elements requires multiple steps.
*   **Uniform Data Types:** All elements within an array must be of the same data type to ensure consistency and prevent errors. For instance, an array containing both strings and integers will cause type conflicts.
*   **Processing Limits:** Be mindful of BigQuery’s processing capabilities, especially when working with large arrays or complex operations. For instance, processing a billion-element array can strain resources.
*   **Query Performance:** Large or poorly structured array queries can slow down performance, so optimization is critical. For example, a poorly optimized array query can take several minutes to execute.
*   **Data Import/Export Limitations:** There may be constraints on the size and structure of arrays when importing or exporting data. Exporting an array with more than 1 million elements may require special handling.
*   **Compatibility with Other Functions:** Not all [SQL](https://owox.com/blog/use-cases/google-bigquery-standard-sql) functions can be directly applied to arrays, which may require additional steps to manipulate the data. Aggregation functions like SUM may require additional steps to work with arrays. 2-3 extra lines of code per incompatible function may be required additionally.

## The Turning Point

OWOX Data Marts

See your first report built in real time. _15 minutes._

1.  Connect your data warehouse
2.  Pick your metrics
3.  Get a live Google Sheets report

In the time it takes to write a ticket. Then imagine never writing that ticket again.

[Book a Demo](https://www.owox.com/demo)

We'll use your actual use case

## **Exploring Key BigQuery Array Functions**

BigQuery Array functions are powerful tools for data manipulation, enabling tasks like creating arrays merging them, or transforming them into strings.

These functions facilitate complex analyses, such as generating series or handling time-series data. Understanding and applying these functions effectively can significantly enhance [BigQuery’s data processing](https://www.owox.com/blog/articles/database-data-warehouse-data-lake/) and analysis capabilities.

### **ARRAY**

This function is useful when you need to **group multiple values into a single entity** that can be easily manipulated or analyzed. Arrays created with this function can store elements of any data type, but all elements must be of the same type. Data transformation is a key aspect when converting data into arrays for better manipulation and analysis.

Using ARRAY enhances data organization, facilitates complex calculations, and enables efficient data manipulation within queries.

**ARRAY Syntax:**

> **ARRAY\[expression AS element\]**

Here:

*   **ARRAY\[\]:** The function and square brackets indicate the start of the array creation.
*   **expression:** This is the value or set of values you want to include in the array.
*   **AS element:** This part is optional and defines each item in the array when using a subquery or a more complex expression.

**ARRAY Example:**

Suppose you’re analyzing survey data in which respondents ranked their top three product features.

> `SELECT ARRAY   (SELECT 1 UNION ALL`

> `SELECT 2 UNION ALL`

> `SELECT 3) AS example_array`

![Creating arrays using the ARRAY function for data organization and processing.](https://cdn.owox.ai/www/webflow/67ab4aa566575af8fb3a175c_AD_4nXfrdiQwV7zUPSVHgbeZ8mCvgeJo3DRb66l5-ZtPsdB2cq-10WEAPEzC8HslNE5xdVXZ5u3mhH1Odxxb9A1TIfgYBWKtjD8ljrR-18hT0JhhwU2ZKe0qcRQwLZhuF8IM_WE13KHgabUbvoiWiPM3DBAG668.png/public)

*   **SELECT:** This keyword is used to specify that you’re querying data.
*   **ARRAY\[1, 2, 3\]:** This creates an array containing the elements 1, 2, and 3.
*   **AS example\_array:** This names the created array example\_array, which you can reference in your query for further analysis.

This query creates an array of those top three features, 1, 2, and 3, for each respondent, making it easier to analyze the data collectively rather than as separate values.

### **ARRAY\_CONCAT**

ARRAY\_CONCAT is a BigQuery function that **merges two or more arrays into a single array.** This function is proper when you need to combine data from multiple sources or consolidate similar data types for analysis. It plays a crucial role in data integration by allowing seamless merging of datasets.

The primary benefit is its ability to simplify data manipulation by aggregating arrays, making data more accessible for further processing or analysis. This function ensures data uniformity and efficiency in handling array-based datasets.

**ARRAY\_CONCAT Syntax:**

> **ARRAY\_CONCAT(array1, array2, …)**

Here:

*   **array1, array2, …:** These are the arrays you want to concatenate. You can combine two or more arrays as long as they contain the same data type.

**ARRAY\_CONCAT Example:**

Imagine you’re analyzing survey data from two different periods, and you have the responses as scores in two separate arrays. To analyze the combined data, you can merge these arrays to create a single dataset for analysis.

> `SELECT ARRAY_CONCAT([1,2], [3,4], [5,6]) AS combined_scores`

![Shows combining multiple arrays into one using the ARRAY\_CONCAT function.](https://cdn.owox.ai/www/webflow/67ab4aa5709971838a427202_AD_4nXfMal_4AGyqajGBEXUc3aW5G3mxHrqgoOXWltA0Izf4pQT0-iy4CouygkVsIBBRz5tIAvzwSP9MUGFFo-zAaf-v7Wch5i2_ryDZ4RsfDSFAW4xm48gJ_A-Af8uNv-mrM9rYveOB4cBNFcGUldrDc-6ByQI.png/public)

*   **\[1,2\]:** Represents scores from the first survey period.
*   **\[3,4\]:** Represents scores from the second.
*   **\[5,6\]:** Represents scores from the third.

Using ARRAY\_CONCAT, these arrays are merged into \[1,2,3,4,5,6\], named combined\_scores, making it easier to perform comprehensive data analysis across three periods.

### **ARRAY\_LENGTH**

The ARRAY\_LENGTH function is a straightforward and efficient way to **find out how many elements are in an array** in BigQuery. This function is handy for working with arrays with different numbers of elements and helps your queries adjust automatically to the data they work with. Additionally, it can be used for data validation to ensure the array contains the expected number of elements.

**ARRAY\_LENGTH Syntax:**

> **ARRAY\_LENGTH(array)**

Here:

*   **array:** The array for which you want to determine the length. It must be an array data type, meaning it is a collection of elements that are of the same type.
*   **ARRAY\_LENGTH:** ​​The function computes and returns the total count of these elements, providing you with the size of the array. 

**ARRAY\_LENGTH Example:**

Suppose you’re managing a database of customer orders, where each order is an array of item IDs. You could use ARRAY\_LENGTH to find out how many items are in each order.

> `SELECT ARRAY_LENGTH([1, 2, 3]) AS array_length`

![Shows how to determine the size of arrays with the ARRAY\_LENGTH function in Google Sheets.](https://cdn.owox.ai/www/webflow/67ab4aa566dfc9d3e20d86fa_AD_4nXeaP245YTC_XnltFWr7q9GWB3b1p7iyaylrpt8altgS1wPWsziQ5tZOM4LHcApQ_ZrStSc-SBMwtPRy7kmhUAKk4GTnbekzvemneWKYZMJRHbm4lpu5MGYsaG3sychjrOCVylHKdpdhqpem9DpnBMmxb-E.png/public)

*   **\[1, 2, 3\]:** Represents an order of three items, with item IDs 1, 2, and 3.
*   **AS array\_length:** Names the function’s output for easy reference, showing that this order contains three items.

The example’s output would be a single integer value representing the number of elements in the array. In this case, the array \[1, 2, 3\] has three components. This indicates that the array length, or the number of items in the given array, is 3.

### **ARRAY\_REVERSE**

The ARRAY\_REVERSE function in BigQuery is a simple yet powerful tool for reversing the order of elements in an array. It can be useful when you need to **invert data sequences for analysis**, such as reversing time series data or the order of operations in a process. The ability to reverse arrays can also aid in data preparation, making it easier to compare or align datasets.

**ARRAY\_REVERSE Syntax:**

> **ARRAY\_REVERSE(array)**

Here:

*   **array:** The array you want to reverse. The elements in this array must be of the same data type.

‍**ARRAY\_REVERSE Example:**

Imagine you have a dataset of monthly sales figures for the past year in descending order (from the most recent month to the oldest). To analyze the sales trend from the beginning of the year, you can use ARRAY\_REVERSE to flip the order of the sales data, making it easier to perform your analysis.

> `WITH example  AS (`**`SELECT`** `ARRAY (`**`SELECT`** `1` **`UNION`** `ALL` **`SELECT`** `2` **`UNION`** `ALL` **`SELECT`** `3)` **`AS`** `array_1)`**`SELECT`**`array_1, ARRAY_REVERSE(array_1)` **`AS`** `reversed_array`**`FROM`** `example`

![Depicts reversing the order of elements in an array with the ARRAY\_REVERSE function.](https://cdn.owox.ai/www/webflow/67adc65f524127af05b2a0aa_Array_revese-function.png/public)

*   **\[1, 2, 3\]:** This query starts with an array containing the elements 1, 2, and 3.
*   **ARRAY\_REVERSE**: It applies the ARRAY\_REVERSE function directly to the array to reverse its order.
*   **AS reversed\_array**: The output column is renamed to reversed\_array for clarity.

The result of this query is an array \[3, 2, 1\], which is the reverse of the original array.

### **ARRAY\_TO\_STRING**

The ARRAY\_TO\_STRING function in BigQuery is a handy tool for **converting arrays into string representations.** This function takes an array and a delimiter as inputs and returns a single string where each element of the array is separated by the specified delimiter. This process is a form of data conversion.

**ARRAY\_TO\_STRING Syntax:**

> **ARRAY\_TO\_STRING(array, delimiter)**

Here:

*   **array:** The array you want to convert into a string.
*   **delimiter:** The string that separates each element in the output string.

**ARRAY\_TO\_STRING Example:**

Suppose, we’re converting an array of integers \[1, 2, 3\] into a single string. The elements of the array need to be separated by a comma (,). The result of this query will be a string 1,2,3, which is stored in the alias string\_array.

> `WITH example  AS (`**`SELECT`** `ARRAY (`**`SELECT`** `'apple'` **`UNION`** `ALL` **`SELECT`** `"orange"` **`UNION`** `ALL` **`SELECT`** `"peach")` **`AS`** `array_1)`**`SELECT`**`array_1, ARRAY_TO_STRING(array_1,  " , ")` **`AS`** `string_array`**`FROM`** `example`

![Converts an array to a string with the ARRAY\_TO\_STRING function using a comma as the delimiter.](https://cdn.owox.ai/www/webflow/67ab4aa59cb52efd59b789a1_AD_4nXdnmkEtjDil6GdG7BEml_UGYcr1xr4VLIOJWNYvcsYbDmeZn_hu3VdP8r9J5lYJgbeev-7kqJGOopuLOi1IRchzmGcVkfrtc3IlN4WKMXA9ARoQbeeLo9axkdZ1BPuct6ZG5fgVzy1x6AV5-dBdfXiT12s3.png/public)

*   **Array of words \[1, 2, 3\]:** This starts with an array containing the words apple, orange, and peach.
*   **Alias/storage name:** The array is given the alias or storage name string\_array.

This function is incredibly useful in scenarios where you need to export array data for use in applications that require string input or when presenting data in a format that’s easier for end-users to read.

### **GENERATE\_ARRAY**

The GENERATE\_ARRAY function in BigQuery **creates an array consisting of a sequence of numbers**, starting from a specified beginning value, ending at a specified stop value, and incrementing by a defined step.

It’s useful for generating series of data for analysis, creating indexes, or even for use in iterative operations within queries.

**GENERATE\_ARRAY Syntax:**

> **GENERATE\_ARRAY(start, end, step)**

Here:

*   **start:** The starting value of the sequence. It defines where the array begins.
*   **end:** The ending value of the sequence. The array will include values up to this point, but not exceeding it.
*   **step:** The increment between each value in the sequence. It determines how the values in the array progress from start to end.

**GENERATE\_ARRAY Example:**

The following example creates an array starting at 1, ending at 15, and increments by 2. The sequence\_array will contain the values \[1, 3, 5, 7, 9, 11, 13, 15\].

> `SELECT GENERATE_ARRAY(1, 15, 2) AS sequence_array`

![Explains creating a sequence of numbers using the GENERATE\_ARRAY function for iterative processing.](https://cdn.owox.ai/www/webflow/67ab4aa52fb6993238bfc2c6_AD_4nXcZ7cv7m0VgCmvAeVU2S7xdKAtLjwXfbqwl2qzcTXVJ1Vdnr3xfLX9obP_UgnwuLTQ4c22pS3AsmYgGMOlCWLLoc2ZWA-JfU9H-EPoLN3UragtJUsPejJ9Bu6asQgNJgbMfDv4Za15qNYdIQhRAmUCRwHFg.png/public)

*   **1:** The start value, indicates where the array starts.
*   **15:** The end value, of the array, will include values up to this number.
*   **2:** The step value, determining the interval between each number in the array.

This function is ideal for scenarios requiring a quick generation of number sequences, such as setting up test data, performing repetitive operations within a controlled loop, or even partitioning data based on numeric intervals.

💡 _If handling text data manually is causing you trouble, find a tool that can simplify string manipulation and eliminate the constraints of manual methods. Discover our comprehensive guide on using_ [_string functions in BigQuery_](https://owox.com/blog/articles/string-functions-bigquery) _for efficient text data processing and transformation._

  [![BigQuery String Functions: Syntax and Usage Examples](https://cdn.owox.ai/www/webflow/67f5564d9316c4d23eb2203c_Frame-23137572-min.png/public) ![](https://cdn.owox.ai/www/webflow/67ab2481c8b464fb967cfbe5_Rectangle-11.svg/public) Dive deeper with this read BigQuery String Functions: Syntax and Usage Examples](https://www.owox.com/blog/articles/string-functions-bigquery/)

### **GENERATE\_DATE\_ARRAY**

The GENERATE\_ARRAY function in BigQuery **creates an array consisting of a sequence of numbers**, starting from a specified beginning value, ending at a specified stop value, and incrementing by a defined step.

It’s helpful in generating a series of data for analysis, creating indexes, or even for use in iterative operations within queries. This function is also essential for data generation in various analytical tasks.

**GENERATE\_DATE\_ARRAY Syntax:**

> **GENERATE\_DATE\_ARRAY(start\_date, end\_date, INTERVAL step\_amount DAY)**

Here: 

*   **start\_date:** The beginning date of the array (inclusive).
*   **end\_date:** The final date of the array (inclusive).
*   **INTERVAL step\_amount DAY:** The step interval between dates in the array, specified in days.

**GENERATE\_DATE\_ARRAY Example:**

The following example creates an array starting at 1, ending at 15, and increments by 2. The sequence\_array will contain the values \[1, 3, 5, 7, 9, 11, 13, 15\].

> `SELECT GENERATE_ARRAY(1, 15, 2) AS sequence_array`

![Generating a sequence of dates using the GENERATE\_DATE\_ARRAY function.](https://cdn.owox.ai/www/webflow/67adc6f3336abda98d71fcdc_Generate_date_array-function.png/public)

*   **start\_date:** ‘2023-01-01’ marks the starting point of the date array.
*   **end\_date:** ‘2023-01-07’ defines the end point, making the array span a week.
*   **INTERVAL 1 DAY:** This specifies that the array should contain every day between the start and end dates, without skipping any

This function is ideal for scenarios requiring a quick generation of number sequences, such as setting up test data, performing repetitive operations within a controlled loop, or even partitioning data based on numeric intervals.

### **GENERATE\_TIMESTAMP\_ARRAY**

GENERATE\_TIMESTAMP\_ARRAY **creates an array of timestamp values** starting from a specified start timestamp to an end timestamp, incremented by a defined step interval. 

**GENERATE\_TIMESTAMP\_ARRAY Syntax:**

> **GENERATE\_TIMESTAMP\_ARRAY(start\_timestamp, end\_timestamp, INTERVAL step\_amount)**

Here: 

*   **start\_timestamp:** The starting point of the timestamp array.
*   **end\_timestamp:** The endpoint for the timestamp array.
*   **INTERVAL step\_amount:** The increment step between each timestamp in the array.

**GENERATE\_TIMESTAMP\_ARRAY Example:**

The following is an example of creating an array of timestamps starting from January 1, 2023, at 00:00 hours to January 2, 2023, at 00:00 hours, with a 12-hour interval between each timestamp.

> `SELECT GENERATE_TIMESTAMP_ARRAY('2023-01-01 00:00:00 UTC', '2023-01-02 00:00:00 UTC', INTERVAL 12 HOUR) AS timestamp_array`

![Highlights creating a sequence of timestamps using the GENERATE\_TIMESTAMP\_ARRAY function.](https://cdn.owox.ai/www/webflow/67ab4aa60f28d41ed390c597_AD_4nXc_HEDSnOVTiqjlF03gffcoUsKPVl69XDSwDBsxRlcQSu3Mk6i0OKPG7E46oopanlZzRWpNpVQort8qm75ebjaRaRF8vVbPKKAfFrJN0IE43AHs3ycBoULFqcMqW9hvw5wPENXnBJ2TrrX-4MsvZHFLi94Y.png/public)

*   **‘2023-01-01 00:00:00 UTC’:** The start timestamp, beginning of January 1, 2023.
*   **‘2023-01-02 00:00:00 UTC’:** The end timestamp, end of January 1, 2023, essentially the start of January 2.
*   **INTERVAL 12 HOUR:** The step interval, indicating that each timestamp in the array will be 12 hours apart.

This function can be highly beneficial for analyzing events or metrics that occur over specific time intervals, such as daily sales, website traffic peaks, or monitoring system performance metrics over time.

### **UNNEST**

The UNNEST function in BigQuery is essential for **transforming array elements into individual rows**, making it easier to work with each item directly in your SQL queries.

This function is particularly useful when you need to join data in an array with other tables or when you’re looking to analyze or manipulate individual array elements separately.

**UNNEST Syntax:**

> **UNNEST(array)**

Here:

*   **array:** The array to be unnested or expanded into separate rows.

**UNNEST Example:**

Suppose you’re working with a simple array containing names. By applying the UNNEST function, you will get output as the names ‘Alice’, ‘Bob’, and ‘Charlie’ as separate rows. 

> `SELECT name FROM UNNEST(['Alice', 'Bob', 'Charlie']) AS name`

![Depicts flattening arrays into individual rows using the UNNEST function for data analysis.](https://cdn.owox.ai/www/webflow/67ab4aa5e84ddf59bcbb8f6d_AD_4nXc16LV3rc18vsvL0oWFBKhnhtah0_JFxR1eJJa69YxTmqV2t6U2Wunks0qCosS6IfpTYL9MuMO4Vnva5RQY7M1vK42B_nOpGGbhN8B838bTprr9RkBTenHe7_eFITqnNOfdqFnUFYdykUldgtjUiEouCaqh.png/public)

*   **‘Alice’, ‘Bob’, ‘Charlie’:** This array of names is expanded so that each name becomes its own row in the output.
*   **SELECT name:** This part of the query specifies that you want to select the names from the unnested array, resulting in a table where each row is a name from the original array.

This functionality is incredibly useful in scenarios where you’re dealing with user data stored in arrays, such as names, and you need to perform operations or analyses on each individual item, like filtering for specific names or counting occurrences.

> **Free guide:** [Modern Data Management Guide](/guides/modern-data-management) →

## **Discover More BigQuery Functions for Advanced Analysis**

If you want to enhance your skills in Google BigQuery, it’s important to explore more advanced functions.

*   [Conversion Functions:](https://owox.com/blog/articles/bigquery-conversion-functions) Acquire knowledge of conversion functions to convert data types and formats within your BigQuery projects seamlessly.

*   [Aggregate Functions](https://owox.com/blog/articles/bigquery-aggregate-functions): Build expertise in aggregate functions to consolidate and effectively examine extensive datasets in BigQuery.

*   [DML](https://owox.com/blog/articles/bigquery-data-manipulation-language) **:** Improve your proficiency in DML for executing updates, deletions, and insertions that alter the data stored in BigQuery.

*   [Numbering Functions:](https://owox.com/blog/articles/bigquery-numbering-functions) Numbering functions assign unique or ranked numbers to rows within a result set, facilitating the ordering and partitioning of data.

*   [Navigation Functions:](https://owox.com/blog/articles/bigquery-navigation-functions) Navigation functions allow access to values in other rows without the need for self-joins, making it easier to lead or lag data within partitions.

*   [Conditional Expressions:](https://owox.com/blog/articles/bigquery-conditional-expressions) These functions enable logic-based operations in BigQuery, returning different results based on specified conditions.[‍](https://owox.com/blog/articles/bigquery-statistical-aggregate-functions)

*   [Statistical Aggregate Functions:](https://owox.com/blog/articles/bigquery-statistical-aggregate-functions) These functions provide advanced statistical operations, including the calculation of standard deviations, variances, and other statistical measures on your data.

## **Resolving Common Errors with Array Functions in BigQuery**

Common errors when using array functions in BigQuery often stem from **type mismatches, handling null or empty arrays, or incorrect function inputs**. Awareness and proactive management of these issues can streamline your data analysis process, making it more efficient and error-free.

### **Multi-Column ARRAY Error**

When using the ARRAY function in BigQuery, an error occurs if the subquery returns more than one column.

 **🚫 Error:**

This error typically happens when the ARRAY function’s subquery generates multiple data columns instead of one. BigQuery expects the ARRAY function to operate on a single column of values, so having multiple columns causes a conflict.

**✅ Solution:**

To resolve this error, ensure that the subquery produces only a single column of data. If you need to work with multiple columns, combine them into a single structured column using the SELECT AS STRUCT syntax.

**Syntax for the single column:**

> **ARRAY(SELECT column\_name FROM table\_name)**

**Syntax for multiple columns as STRUCT:**

> **ARRAY(SELECT AS STRUCT column1, column2 FROM table\_name)**

#### **Example Application of ARRAY with Multiple Columns**

Suppose you have a table named employees with columns first\_name and last\_name and want to create an array of full names. Using the ARRAY function directly would result in the **multi-column array error.** 

Here’s the difference between incorrect and correct syntax.

**Incorrect Syntax:**

> `SELECT ARRAY((SELECT first_name, last_name FROM employees)) AS full_names`

![Demonstrates errors encountered when creating arrays with multiple columns and resolving them.](https://cdn.owox.ai/www/webflow/67ab4aa68a25c1a6c5d4af04_AD_4nXd75cXIkaYMpWoOpX2xtaMFDO1bAvlIsk8cuMJPtWvgib7daGJlZQw3P61GoubcdqCxpj8mBvyi8Goih83MR8OOuex2HYY_Ljidea6Uk_h8NmIoblwuKmccb6Tc95HGXx19-BtRIpAUf5vZ7ya2_ESfXyU.png/public)

**Correct Syntax:**

> `SELECT ARRAY(SELECT AS STRUCT first_name, last_name FROM employees) AS full_names`

In this corrected query, we use **SELECT AS STRUCT** to combine first\_name and last\_name into a single structure. This ensures the ARRAY function receives a single-column input, resolving the multi-column array error.

### **Handling Null and Empty Arrays**

When dealing with null or empty arrays, the behavior of operations on these arrays can be unpredictable. It is crucial to ensure data integrity when managing such cases.

**🚫 Error:**

This error can occur when functions like **ARRAY encounter null** values or when dealing with arrays that have no elements. Depending on the function and the input data, the behavior can vary, leading to unexpected results if not handled correctly.

**✅ Solution:**

The ARRAY function returns an empty array **if there are no rows in the input**, ensuring consistent behavior even with null or empty arrays. However, functions like ARRAY\_CONCAT return NULL if any input array is NULL, requiring careful handling to avoid unexpected outcomes.

**The syntax for using a subquery to generate an array:**

> **ARRAY(SELECT column\_name FROM table\_name)**

**The syntax for concatenating multiple arrays:**

> **ARRAY\_CONCAT(array1, array2, …)**

#### **Example Application of Handling Null and Empty Arrays**

Suppose you have a table with a column named ‘revenue’, and you want to create an array of all positive revenue. 

Let’s see how you can handle null or empty arrays.

**Incorrect Query:**

> **SELECT ARRAY(SELECT amount FROM transactions WHERE revenue > 0) AS positive\_amounts;**

![Explains managing null and empty arrays effectively with BigQuery array functions.](https://cdn.owox.ai/www/webflow/67d7cb55075640651e15e253_unnamed-5.png/public)

**Correct Query:**

> **SELECT ARRAY(SELECT COALESCE(amount, 0) FROM transactions WHERE revenue > 0) AS positive\_amounts;**

In this corrected query, we use COALESCE to replace null values with 0 before creating the array. This ensures that the ARRAY function doesn’t encounter null or empty arrays, thus avoiding uncertainty about the function’s behavior.

### **ARRAY\_CONCAT Type Mismatch**

This error occurs when attempting to concatenate arrays that have different element types using the ARRAY\_CONCAT function. Ensuring data type consistency is crucial to avoid such errors.

**🚫 Error:**

The **ARRAY\_CONCAT** function expects all arrays passed to it to have the same element type. If there’s a mismatch in the element types of the concatenated arrays, BigQuery will throw this error to indicate the type inconsistency.

**✅ Solution:**

To resolve the ARRAY\_CONCAT Type Mismatch error, ensure all arrays being passed to the ARRAY\_CONCAT function have **elements of the same data type**. To avoid this error, you may need to perform data type conversions or ensure consistent data entry.

The following is the syntax for concatenating multiple arrays into a single array:

> **ARRAY\_CONCAT(array1, array2, …)**

Ensure that array1, array2, and any additional arrays provided to ARRAY\_CONCAT contain elements of the same data type.

#### **Example Application of ARRAY\_CONCAT Function**

Suppose you have two arrays, one containing numbers and the other containing strings. Concatenating these arrays directly with ARRAY\_CONCAT would result in the Type Mismatch error. 

Here’s how you can correct it:

**Incorrect Query:**

> `SELECT ARRAY_CONCAT([1, 2, 3], ['Alice, 'Bob']) AS concatenated_array;`

![Combining arrays using the ARRAY\_CONCAT function, highlighting potential type mismatch issues.](https://cdn.owox.ai/www/webflow/67ab4aa59e93f2ab0dce7ef3_AD_4nXe6hnyg27oKhZPnwFvjhBY7RDuRQU2AXhf9Ai4VkhCcLty8yYmNzir8VMyQx4_WmVvSis3tj1xinsOfvhEgewJ0kiBtrHgeHFYkb9PlAea7Kvn6M3LpwgH4Wxyv8zHwPwUngElRgzwua9O1GWiJI1UTactP.png/public)

**Correct Query:**

> `SELECT ARRAY_CONCAT([1, 2, 3], [4, 5, 6]) AS concatenated_array;`

In the corrected query, both arrays \[1, 2, 3\] and \[4, 5, 6\] have elements of the same data type (numbers), avoiding the Type Mismatch error.

### **ARRAY\_LENGTH on Null/Empty Arrays**

Unexpected results occur when using ARRAY\_LENGTH on NULL or empty arrays.

**🚫 Error:**

This error can occur when you use the **ARRAY\_LENGTH** function on an array that is either NULL (contains no data) or empty. In such cases, ARRAY\_LENGTH behaves differently depending on whether the array is NULL or empty, which can lead to unexpected outcomes in your queries. Ensuring data completeness is crucial to avoid such issues.

**✅ Solution:**

To handle this error, it’s essential to understand the behavior of **ARRAY\_LENGTH**:

*   If the array is NULL, ARRAY\_LENGTH will **return NULL.**
*   If the array is empty (contains no elements), ARRAY\_LENGTH will **return 0.**

The following is the syntax for computing the length of the array expression:

> **ARRAY\_LENGTH(array\_expression)**

#### **Example Application of ARRAY\_LENGTH Function**

Consider a scenario where you have a table of sources with an array column source\_list that may sometimes be NULL or empty. You want to determine the length of each array in the source\_list column without encountering errors due to NULL or empty arrays.

**Incorrect Query:**

> **SELECT ARRAY\_LENGTH(source\_list) AS array\_length FROM sources;**

In this query, if item\_list contains NULL or empty arrays, ARRAY\_LENGTH may produce unexpected results or errors.

![Shows calculating the size of arrays using the ARRAY\_LENGTH function, including null and empty array scenarios.](https://cdn.owox.ai/www/webflow/67ab4aa6f8b78a18dc9b708b_AD_4nXfFJViLbEbFR6T-u14WMp0OTL-0QofEtDt6xelCZTp1pU7ihbZeRAHl_vIrzSM4qPsP95Ljt2rchvRmtxPtppKPuG7t5HRGldoXOZ1Lj8GijrZIl-siCfW3sWohJcD_UTR0Sj3wLY9T8UPeTNpXahgKQszF.png/public)

**Correct Query:**

> **SELECT
>   CASE
>     WHEN source\_list IS NULL THEN NULL
>     ELSE ARRAY\_LENGTH(source\_list)
>   END AS array\_length
>   FROM source;**

Here, we use a CASE statement to handle NULL arrays, **returning NULL** for NULL arrays and the **actual array length** for non-NULL arrays. This approach ensures that the ARRAY\_LENGTH function behaves predictably and doesn’t cause unexpected errors or results.

### **Non-Array ARRAY\_REVERSE Input**

This error occurs when using the ARRAY\_REVERSE function on a non-array type input.

**🚫 Error:**

**ARRAY\_REVERSE** is specifically designed to reverse the order of elements within an array. When you attempt to use it on a non-array type, such as a single value or a different data type, BigQuery will throw this error to indicate that the input is incompatible with the function. Proper data validation is essential to ensure the input is an array.

**✅ Solution:**

To resolve the Non-Array ARRAY\_REVERSE Input error, ensure that the input provided to the **ARRAY\_REVERSE function is indeed an array.** Check the data type and structure of the input to avoid this error.

The following is the syntax for reversing the order of elements within the specified array:

**ARRAY\_REVERSE(array)**

> ARRAY\_REVERSE(array)

The input array must be an actual array data type containing elements in an ordered sequence.

#### **Example Application of ARRAY\_REVERSE Function**

Suppose you mistakenly try to reverse a single value instead of an array using ARRAY\_REVERSE. Here’s an example of the error and its correction:

**Incorrect Query:**

> `SELECT ARRAY_REVERSE('Hello') AS reversed_string;`

![Highlights handling errors when attempting to reverse non-array inputs with the ARRAY\_REVERSE function.](https://cdn.owox.ai/www/webflow/67ab4aa5999a5eee6b703289_AD_4nXdbDoHqQfN4mlq8egDGq1H41GPPZTFtusebUydZkMvssC5mj2bek-EA2efdnP2XxjEXnakm36v38aKf8Sba8HETnXdl2kC9p_4tYBVYlGXKF9mluyrgGJMtL_GhZ5rg3xlgB8jgSjhD9g6ERkBpIujVp10.png/public)

**Corrected Query:**

> `SELECT ARRAY_REVERSE(['H', 'e', 'l', 'l', 'o']) AS reversed_array;`

In the corrected query, we provide an actual array (\[‘H’, ‘e’, ‘l’, ‘l’, ‘o’\]) as input to ARRAY\_REVERSE, ensuring that the function **operates** on an array and **avoids** the Non-Array ARRAY\_REVERSE Input error.

### **ARRAY\_TO\_STRING Delimiter Issues**

This error occurs when the ARRAY\_TO\_STRING function produces incorrect string results, often due to **incorrect usage of delimiters** or **null\_text** for NULL array elements.

**🚫 Error:**

ARRAY\_TO\_STRING converts an array into a string, with optional parameters for specifying delimiters and handling NULL array elements. If these parameters are not used correctly, unexpected string outputs may not align with your intended formatting.

**✅ Solution:**

To address ARRAY\_TO\_STRING delimiter Issues, **double-check the usage of delimiters** and ensure they are appropriately placed within the function. Additionally, if dealing with NULL array elements, verify that the null\_text parameter is used correctly to handle these cases and avoid unexpected results.

The following syntax converts an array into a string, using the specified delimiter to separate elements. The optional null\_text parameter defines the replacement text for NULL array elements:

> **ARRAY\_TO\_STRING(array, delimiter \[, null\_text\])**

#### **Example Application of ARRAY\_TO\_STRING Function**

Suppose you want to convert an array of names into a comma-separated string using **ARRAY\_TO\_STRING**. Here’s an example that illustrates the correct usage:

**Incorrect Query:**

> `SELECT ARRAY_TO_STRING(['Alice', 'Bob', NULL, 'Charlie'], ',') AS name_list;`

![Highlights converting arrays to strings using the ARRAY\_TO\_STRING function, emphasizing delimiter handling.](https://cdn.owox.ai/www/webflow/67adc8aea58daddee89cf41a_ARRAY_TO_STRING-Delimiter-Issues-NEW.png/public)

**Corrected Query:**

> `SELECT ARRAY_TO_STRING(['Alice', 'Bob', NULL, 'Charlie'], ' ,', 'Unknown') AS name_list;`

In the corrected query, we provide the null\_text parameter as ‘Unknown’ to handle NULL array elements, ensuring that the ARRAY\_TO\_STRING function produces the desired string output without Delimiter Issues.

### **GENERATE\_ARRAY Step Expression**

This error occurs when using a **step expression of 0 or NaN (Not a Number)** in the GENERATE\_ARRAY function.

**🚫 Error:**

If the step expression for the **GENERATE\_ARRAY function** is set to 0 or NaN, it can lead to mathematical errors or an infinite loop, causing the error. Proper data sequencing is crucial to avoid such issues.

**✅ Solution:**

To resolve the GENERATE\_ARRAY Step Expression error, ensure that the step expression provided to **GENERATE\_ARRAY is a non-zero, non-NaN value**. Using a valid step expression ensures the function can generate the desired sequence of numbers without encountering errors.

The following syntax creates an array of numbers from start to end in increments defined by step:

> **GENERATE\_ARRAY(start, end, step)**

#### **Example Application of GENERATE\_ARRAY Function**

Suppose you want to generate an array of numbers from 1 to 10 with a step of 2 using GENERATE\_ARRAY. 

Here’s an example of how to avoid the error:

**Incorrect Query:**

> `SELECT GENERATE_ARRAY(1, 10, 0) AS number_array;`

![Explains the use of step expressions to control sequences in the GENERATE\_ARRAY function.](https://cdn.owox.ai/www/webflow/67ab4aa5652dec4caa87d5d1_AD_4nXdekn_d8gSyjxMMRJEykIKaxKbH9xhpRZDpeuYUU9k4yjXeqzjYQCETCTO4Zv6gBxjfBX23452W8YOVJcTPM4nFSKbvF79VtKT-4_gpfMBIkkbrglwNHIqNbpYLlgQLCs_d8Qe0WXRKR3Y-u5ke7DmHXW10.png/public)

**Corrected Query:**

> `SELECT GENERATE_ARRAY(1, 10, 2) AS number_array;`

In the corrected query, we use a step expression of 2 instead of 0, ensuring that the GENERATE\_ARRAY function can generate the array without encountering step expression errors.

### **GENERATE\_DATE\_ARRAY Date Order**

When using GENERATE\_DATE\_ARRAY, you may encounter unexpected empty arrays or errors if the **start and end dates** are not **correctly ordered** or if the **step expression is invalid**.

**🚫 Error:**

GENERATE\_DATE\_ARRAY is used to create an array of dates within a specified range, defined by a start date, an end date, and an optional step expression. If the start date is after the end date or if the step expression is not valid, it can lead to errors or empty arrays.

**✅ Solution:**

To avoid GENERATE\_DATE\_ARRAY date order errors, ensure that the start date is before the end date in **chronological order**. Additionally, verify that the step expression, if used, is valid and aligns with the desired interval between dates.

The following is the syntax for generating an array of dates from start\_date to end\_date, incrementing by step\_expression if provided:

> **GENERATE\_DATE\_ARRAY(start\_date, end\_date \[, step\_expression\])**

#### **Example Application of GENERATE\_DATE\_ARRAY Function**

Suppose you want to generate an array of dates from January 1, 2023, to January 7, 2023, with a step of 1 day using GENERATE\_DATE\_ARRAY. 

Here’s the common error made in syntax, along with the correct syntax:

**Incorrect Query:**

> `SELECT GENERATE_DATE_ARRAY('2023-01-07', '2023-01-01', INTERVAL 1 DAY) AS date_array;`

![Shows generating a date sequence with proper ordering using the GENERATE\_DATE\_ARRAY function.](https://cdn.owox.ai/www/webflow/67ab4aa56576e97abdb1279a_AD_4nXd5xGqQ44EnEj7m-zWT3zQSL5JWowU4qPt3tJog4MiEjjiKz_-t5pjO8ngFypsbp0qhA_3v9c2daYeZPZhU5B4CQ7HmMzjLae4qpTkKK5-TQ38iK4EIvoqWnLi3QnTutc9hHFRrnnQMcWiXTJBpBKYrGXvV.png/public)

**Corrected Query:**

> `SELECT GENERATE_DATE_ARRAY('2023-01-01', '2023-01-07', INTERVAL 1 DAY) AS date_array;`

In the corrected query, we ensure that the start date (‘2023-01-01’) comes before the end date (‘2023-01-07’) to avoid Date Order errors in GENERATE\_DATE\_ARRAY.

### **Timestamps in GENERATE\_TIMESTAMP\_ARRAY**

This error occurs when using the GENERATE\_TIMESTAMP\_ARRAY function results in errors or empty arrays due to **incorrect ordering of start and end timestamps**, or **incorrect interval specification**. Ensuring temporal data consistency is crucial to avoid these issues.

**🚫 Error:**

GENERATE\_TIMESTAMP\_ARRAY is used to create an array of timestamps within a specified range and interval. If the start timestamp is after the end timestamp or if the interval is incorrectly specified, it can lead to errors or produce an empty array.

**✅ Solution:**

To avoid Timestamps in GENERATE\_TIMESTAMP\_ARRAY errors, ensure that the **start timestamp** is **before the end timestamp** and that the **interval** is correctly **specified** based on your requirements. Double-checking these parameters will help generate the desired array of timestamps without issues.

The following syntax generates an array of timestamps starting from start\_timestamp up to (and including) end\_timestamp, with the specified interval between timestamps:

> **GENERATE\_TIMESTAMP\_ARRAY(start\_timestamp, end\_timestamp, interval)**

#### **Example Application of GENERATE\_TIMESTAMP\_ARRAY Function**

Suppose you want to generate an array of timestamps for every hour within a specific date range. 

Here’s an example illustrating the common error made along with the correct usage:

**Incorrect Query:**

> `SELECT GENERATE_TIMESTAMP_ARRAY('2023-01-01 00:00:00 UTC', '2023-01-01 00:00:00 UTC', INTERVAL 1 HOUR) AS timestamp_array;`

![Shows creating timestamp sequences and managing time zones with the GENERATE\_TIMESTAMP\_ARRAY function.](https://cdn.owox.ai/www/webflow/67adc945c586bfda978f0391_Timestamps-in-GENERATE_TIMESTAMP_ARRAY-NEW.png/public)

**Corrected Query:**

> `SELECT GENERATE_TIMESTAMP_ARRAY('2023-01-01 00:00:00 UTC', '2023-01-01 23:59:59 UTC', INTERVAL 1 HOUR) AS timestamp_array;`

In the corrected query, we ensure that the start timestamp (‘2023-01-01 00:00:00 UTC’) is before the end timestamp (‘2023-01-01 23:59:59 UTC’) and specify the correct interval of 1 hour, resulting in a valid array of timestamps without any errors or empty arrays.

## **Best Practices for Using Array Functions in BigQuery**

When utilizing functions for handling arrays in BigQuery, it’s important to follow best practices to guarantee efficient and error-free data manipulation.

1.  **Check for Null or Empty Arrays**: Always check the input array for null or empty values before performing operations on it. This precaution can prevent errors and ensure consistent results.
2.  **Use ARRAY\_LENGTH**: Use the ARRAY\_LENGTH function to determine the length of an array before applying further operations. This approach aids in understanding the array’s structure and helps avoid unexpected outcomes.
3.  **Convert Arrays to Strings**: Use the ARRAY\_TO\_STRING function to convert an array to a string, especially when working with text data. This can simplify data presentation and export.
4.  **Generate Arrays**: Use the GENERATE\_ARRAY function to create an array of values, particularly when working with numerical data. Similarly, use the GENERATE\_TIMESTAMP\_ARRAY function to create an array of timestamp values for time-series data.
5.  **Ensure Consistent Data Types**: When working with multiple arrays, ensure that the arrays have the same data type and structure to avoid errors or inconsistencies. This is crucial for functions like ARRAY\_CONCAT.
6.  **Handle Nested Arrays**: Use the UNNEST operator to convert an array into a table with individual rows for each element, especially when working with nested arrays. This makes it easier to perform operations on each element.

## ‍**Build Powerful Reports with OWOX Reports Extension for Google Sheets**

With the foundation laid in manipulating and analyzing array data in BigQuery, you can elevate your reporting and analytics work to new heights. 

The [OWOX Reports](https://workspace.google.com/marketplace/app/owox_reports_charts_pivots_sheets_bigque/263000453832) further enhances this capability by providing seamless integration with your BI tools, enabling dynamic array shaping, advanced data analysis, and efficient reporting directly from your BigQuery data.

Leveraging the techniques and functions discussed alongside powerful tools like the OWOX Reports  empowers you to optimize your queries, uncover deeper insights, and drive more informed decisions across your data projects.

## Your New Normal

Turn your data into decisions.

Governed data marts give you the clean foundation ML needs to actually work.

*   No AI hallucinations
*   Analyst-governed definitions
*   Every number traces to SQL

[Get started free](https://www.owox.com/app-signup)

## FAQ

## Frequently Asked Questions

How to get an array value from a query?

To retrieve an array value from a query in BigQuery, you can directly select the column that holds the array data if it's stored in a table. For more complex scenarios, such as when you need to construct an array dynamically based on query results, you can use the ARRAY\_AGG function to aggregate values into an array. For example, SELECT ARRAY\_AGG(score) FROM scores would return an array of scores from the scores table.

How do you check if an array contains a value in BigQuery?

To check if an array contains a specific value in BigQuery, you can use the ARRAY\_CONTAINS(value, array) function. This function returns a boolean value: TRUE if the array contains the specified value, and FALSE otherwise. For instance, ARRAY\_CONTAINS(2, \[1, 2, 3\]) would return TRUE.

What is ARRAY\_AGG in BigQuery?

ARRAY\_AGG is an aggregate function in BigQuery that concatenates the input values, including nulls, into an array. It's particularly useful in grouping queries where you want to collect multiple values of a column into a single array associated with a group. For example, ARRAY\_AGG(name) would collect all names into an array for each group specified by a GROUP BY clause.

What is the difference between a STRUCT and an Array in BigQuery?

A STRUCT in BigQuery is a complex data type that allows you to group multiple fields into a single entity, possibly of different data types. Think of it as a record or an object that holds structured data. On the other hand, an ARRAY is a collection of items where each item is of the same data type. The key difference lies in the composition: STRUCTs can contain a mix of different data types grouped, while arrays are homogeneous collections of values.

How to convert an array to a string in BigQuery?

To convert an array to a string in BigQuery, you can use the ARRAY\_TO\_STRING(array, delimiter) function. This function joins the elements of the array into a single string, separated by the specified delimiter. For example, ARRAY\_TO\_STRING(\[1, 2, 3\], ',') would result in the string '1,2,3'.

What is an array in BigQuery?

An array in BigQuery is a collection of values that are of the same data type. Each element in an array is identified by an index. Arrays in BigQuery allow you to store and manipulate sets of data as a single entity, making it easier to perform complex data analysis tasks.

## Who wrote this

![Alyona Samovar](https://cdn.owox.ai/www/webflow/6799099d337aa8a997b03b56_Alyona-Samovar.png/public)

[Alyona Samovar](/team/alyona-samovar) · Senior Digital Analyst

Alyona Samovar is a Senior Digital Analyst who spent years at OWOX helping enterprise clients design analytics systems, build BigQuery reporting pipelines, and optimize marketing measurement. She specializes in SQL-based analytics, data modeling, and turning raw marketing data into actionable insights. Alyona writes about practical analytics workflows, BigQuery best practices, and data-driven decision-making.

![Vadym Kramarenko](https://cdn.owox.ai/www/webflow/6798e703afdf787334941cde_Vadym-Kramarenko.png/public)

[Vadym Kramarenko](/team/vadym-kramarenko) · Growth Marketing Manager

Vadym Kramarenko is a Growth Marketing Manager at OWOX, where he drives user acquisition and product-led growth strategies. He hosts the OWOX podcast, interviewing analytics professionals about data-driven marketing, attribution, and reporting best practices. Vadym specializes in turning complex analytics concepts into practical, actionable marketing frameworks.

[LinkedIn](https://www.linkedin.com/in/vadim-kramarenko/) · [All articles](/team/vadym-kramarenko)

[Google BigQuery](/blog/topics/bigquery)

## Related articles

[Google BigQuery · BigQuery Datetime Functions: A Guide for Data Analysts · April 29, 2024](/blog/articles/bigquery-datetime-functions)

[Google BigQuery · Full Guide to Using Wildcard Tables in BigQuery for 2025 · August 8, 2025](/blog/articles/bigquery-wildcard-tables)

[Google BigQuery · Enhanced Data Analysis with BigQuery Navigation Functions · May 26, 2024](/blog/articles/bigquery-navigation-functions)

[See all articles →](/blog/articles)

## References

Pages this page links to, on this site and on docs.owox.com. Where the page has a Markdown twin, its address follows the link.

- [Google BigQuery](https://www.owox.com/blog/topics/bigquery) — /blog/topics/bigquery.md
- [Alyona Samovar](https://www.owox.com/team/alyona-samovar) — /team/alyona-samovar.md
- [Vadym Kramarenko](https://www.owox.com/team/vadym-kramarenko) — /team/vadym-kramarenko.md
- [BigQuery](https://www.owox.com/blog/articles/loading-data-into-bigquery) — /blog/articles/loading-data-into-bigquery.md
- [queries](https://owox.com/blog/use-cases/google-bigquery-functions-overview)
- [SQL](https://owox.com/blog/use-cases/google-bigquery-standard-sql)
- [Book a Demo](https://www.owox.com/demo) — /demo.md
- [BigQuery’s data processing](https://www.owox.com/blog/articles/database-data-warehouse-data-lake) — /blog/articles/database-data-warehouse-data-lake.md
- [string functions in BigQuery](https://owox.com/blog/articles/string-functions-bigquery)
- [Dive deeper with this read BigQuery String Functions: Syntax and Usage Examples](https://www.owox.com/blog/articles/string-functions-bigquery) — /blog/articles/string-functions-bigquery.md
- [Modern Data Management Guide](https://www.owox.com/guides/modern-data-management) — /guides/modern-data-management.md
- [Conversion Functions:](https://owox.com/blog/articles/bigquery-conversion-functions)
- [Aggregate Functions](https://owox.com/blog/articles/bigquery-aggregate-functions)
- [DML](https://owox.com/blog/articles/bigquery-data-manipulation-language)
- [Numbering Functions:](https://owox.com/blog/articles/bigquery-numbering-functions)
- [Navigation Functions:](https://owox.com/blog/articles/bigquery-navigation-functions)
- [Conditional Expressions:](https://owox.com/blog/articles/bigquery-conditional-expressions)
- [‍](https://owox.com/blog/articles/bigquery-statistical-aggregate-functions)
- [Get started free](https://www.owox.com/app-signup)
- [Google BigQuery · BigQuery Datetime Functions: A Guide for Data Analysts · April 29, 2024](https://www.owox.com/blog/articles/bigquery-datetime-functions) — /blog/articles/bigquery-datetime-functions.md
- [Google BigQuery · Full Guide to Using Wildcard Tables in BigQuery for 2025 · August 8, 2025](https://www.owox.com/blog/articles/bigquery-wildcard-tables) — /blog/articles/bigquery-wildcard-tables.md
- [Google BigQuery · Enhanced Data Analysis with BigQuery Navigation Functions · May 26, 2024](https://www.owox.com/blog/articles/bigquery-navigation-functions) — /blog/articles/bigquery-navigation-functions.md
- [See all articles →](https://www.owox.com/blog/articles) — /blog/articles.md
