Array operations troubleshooting¶
Common issues and solutions when working with array functions in ClickHouse and Tinybird.
Common errors¶
SIZES_OF_ARRAYS_DONT_MATCH¶
Error: SIZES_OF_ARRAYS_DONT_MATCH: Arrays have different sizes
Cause: Trying to operate on arrays of different lengths
Solution: Ensure arrays have same length or handle different sizes
-- Wrong
SELECT array1 + array2 FROM events
-- Correct: Check lengths first
SELECT
CASE
WHEN length(array1) = length(array2) THEN array1 + array2
ELSE array1
END as safe_operation
ZERO_ARRAY_OR_TUPLE_INDEX¶
Error: ZERO_ARRAY_OR_TUPLE_INDEX: Array indices are 1-based
Cause: Using 0-based indexing (arrays are 1-based in ClickHouse)
Solution: Use 1-based indexing
-- Wrong SELECT array_column[0] FROM events -- Correct SELECT array_column[1] FROM events
Type edge cases¶
Working with nested arrays¶
Issue: Complex nested array operations
Solution: Flatten or handle nested structures properly
-- Handle nested arrays SELECT arrayJoin(nested_array) as flattened_item FROM events
Array type mismatches¶
Issue: Arrays with different element types
Solution: Convert to common type
-- Convert array elements to same type SELECT arrayMap(x -> toString(x), mixed_array) as string_array FROM events
Usage patterns that break Pipes¶
Large array operations¶
Issue: Processing large arrays in aggregations
Solution: Pre-process arrays in data sources
-- Pre-calculate array operations SELECT array_column, length(array_column) as array_length, arraySort(array_column) as sorted_array FROM events
Complex array filtering¶
Issue: Complex array filtering in queries
Solution: Use array functions efficiently
-- Use arrayFilter instead of complex WHERE SELECT arrayFilter(x -> x > 0, numeric_array) as positive_values FROM events
Sample fixes¶
Fixing array concatenation¶
-- Problem: Concatenating arrays of different types
SELECT array1 || array2 FROM events
-- Solution: Convert to common type
SELECT
concat(
arrayMap(x -> toString(x), array1),
arrayMap(x -> toString(x), array2)
) as combined_arrays
FROM events
Working with array indices¶
-- Problem: Accessing array elements safely
SELECT array_column[index] FROM events
-- Solution: Check bounds
SELECT
CASE
WHEN index <= length(array_column) THEN array_column[index]
ELSE NULL
END as safe_element
FROM events
Handling empty arrays¶
-- Problem: Operations on empty arrays
SELECT arraySum(empty_array) FROM events
-- Solution: Check for empty arrays
SELECT
CASE
WHEN length(array_column) = 0 THEN 0
ELSE arraySum(array_column)
END as safe_sum
FROM events
Best practices¶
- Use 1-based indexing - ClickHouse arrays start at index 1
- Check array lengths - Validate before operations
- Handle empty arrays - Check for empty arrays before operations
- Convert types consistently - Ensure array elements have same type
- Pre-process large arrays - Do heavy array operations in data sources