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(你可能需要重新考虑你的要求谢谢,这很笨重,但似乎是唯一的方法。我感谢你的努力!