Когда я пытаюсь объединить два массива с одним и тем же типом данных, все работает отлично.
Пример показан ниже
#standardSQL
WITH
table1 AS (
SELECT 'a' id UNION ALL
SELECT 'b' UNION ALL
SELECT 'c'
),
table2 AS (
SELECT 'a' id, [1,2,3,4,5] array_1 UNION ALL
SELECT 'b', [1,2,3,4,5] UNION ALL
SELECT 'c', [1,2,3,4,5]
),
table3 AS (
SELECT 'a' id, [10,20,30,40,50] array_2 UNION ALL
SELECT 'b', [10,20,30,40,50] UNION ALL
SELECT 'c', []
),
joined_table as (
select table1.id,
table2.array_1,
table3.array_2
from
table1
JOIN table2
USING(id)
JOIN table3
using(id)
)
SELECT
joined_table.*,
ARRAY_CONCAT(IFNULL(joined_table.array_1,[]), IFNULL(joined_table.array_2,[])) as concatanated_arrays
FROM joined_table
Но когда я пытаюсь выполнить конкатенацию, но массивы имеют другой тип данных, как пример запроса ниже:
#standardSQL
WITH
table1 AS (
SELECT 'a' id UNION ALL
SELECT 'b' UNION ALL
SELECT 'c'
),
table2 AS (
SELECT 'a' id, [1,2,3,4,5] array_1 UNION ALL
SELECT 'b', [1,2,3,4,5] UNION ALL
SELECT 'c', [1,2,3,4,5]
),
table3 AS (
SELECT 'a' id, ['10','20','30','40','50'] array_2 UNION ALL
SELECT 'b', ['10','20','30','40','50'] UNION ALL
SELECT 'c', []
),
joined_table as (
select table1.id,
table2.array_1,
table3.array_2
from
table1
JOIN table2
USING(id)
JOIN table3
using(id)
)
SELECT
joined_table.*,
ARRAY_CONCAT(IFNULL(joined_table.array_1,[]), IFNULL(joined_table.array_2,[])) as concatanated_arrays
FROM joined_table
мой запрос не запускается и выдает ошибку, подобную этой:
Error: No matching signature for function ARRAY_CONCAT for argument types: ARRAY<INT64>, ARRAY<STRING>. Supported signature: ARRAY_CONCAT(ARRAY, [ARRAY, ...]) at [31:3]
Как объединить эти два массива разного типа?