Рассмотрим ниже альтернативный способ
#standardSQL
SELECT (
SELECT STRING_AGG(x)
FROM UNNEST(REGEXP_EXTRACT_ALL(TRIM(TO_JSON_STRING(c.customer), '{}'), r'("name\w+":\w+)(?:,|$)')) x
) || ',' || (
SELECT STRING_AGG(y)
FROM UNNEST(REGEXP_EXTRACT_ALL(TRIM(TO_JSON_STRING(r.revenue), '{}'), r'("type\w+":\w+)(?:,|$)')) y
) AS customer_revenue
FROM customer_table c
JOIN revenue_table r
USING (transaction_id)
в случае ниже [супер упрощенных] данных
#standardSQL
WITH customer_table AS (
SELECT 1 transaction_id, STRUCT(1 AS name1, 2 AS name2, 3 AS aaa3, 4 AS bbb4) customer
), revenue_table AS (
SELECT 1 transaction_id, STRUCT(11 AS type11, 22 AS type22, 33 AS type33, 44 AS ccc44) revenue
)
результат будет
Row customer_revenue
1 "name1":1,"name2":2,"type11":11,"type22":22,"type33":33
Очевидно, что это не совсем то, что вы спрашиваете в своем вопросе - но, как я уже прокомментировал, «на самом деле не выполнимо: o (вам может потребоваться переосмыслить ваши требования»), поэтому вышеупомянутое решение может потенциально помочь вам в этом