Sql 如何使用Bigquery按前缀选择结构中的字段列表

Sql 如何使用Bigquery按前缀选择结构中的字段列表,sql,google-bigquery,Sql,Google Bigquery,我想做一些类似的事情: SELECT STRUCT( c.customer.name*, r.revenue.type* ) AS customer_revenue FROM customer_table c JOIN revenue_table r USING (transaction_id) 其中,customer是一个包含许多字段的结构,包括一些以“name”开头的字段(以及一些不以“name”开头的字段),而revenue也是一个类似的结构,一些字段以“type

我想做一些类似的事情:

SELECT
  STRUCT(
    c.customer.name*,
    r.revenue.type*
  ) AS customer_revenue
FROM customer_table c
JOIN revenue_table r
USING (transaction_id)
其中,
customer
是一个包含许多字段的结构,包括一些以“name”开头的字段(以及一些不以“name”开头的字段),而
revenue
也是一个类似的结构,一些字段以“type”开头,而一些字段则不以“type”开头


我似乎不知道如何在BigQuery中实现这一点。我只是不断地遇到语法错误,这让我相信这是不可能的。有什么想法吗?

考虑下面的替代方法

#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(你可能需要重新考虑你的需求)”,因此上述解决方案可能会帮助你做到这一点

确实不可行:o(你可能需要重新考虑你的要求谢谢,这很笨重,但似乎是唯一的方法。我感谢你的努力!