下面应该可以工作,但至少您需要提前知道 [first] 表中最大可能的列集
假设最大预期列数为 6 - 分别为:a、b、c、d、e、f
SELECT
id,
REGEXP_EXTRACT(pair, r'(\w+):') AS key,
REGEXP_EXTRACT(pair, r':(\w+)') AS value
FROM (
SELECT
id,
SPLIT(CONCAT(
'a:',IFNULL(STRING(a), ''),
',b:', IFNULL(STRING(b), ''),
',c:', IFNULL(STRING(c), ''),
',d:', IFNULL(STRING(d), ''),
',e:', IFNULL(STRING(e), ''),
',f:', IFNULL(STRING(f), '')
)) AS pair
FROM (
SELECT * FROM
YourTable,
(SELECT NULL AS a, NULL AS b, NULL AS c, NULL AS d, NULL AS e, NULL AS f)
)
)
HAVING NOT value IS NULL
试试下面的例子:
SELECT
id,
REGEXP_EXTRACT(pair, r'(\w+):') AS key,
REGEXP_EXTRACT(pair, r':(\w+)') AS value
FROM (
SELECT
id,
SPLIT(CONCAT(
'a:',IFNULL(STRING(a), ''),
',b:', IFNULL(STRING(b), ''),
',c:', IFNULL(STRING(c), ''),
',d:', IFNULL(STRING(d), ''),
',e:', IFNULL(STRING(e), ''),
',f:', IFNULL(STRING(f), '')
)) AS pair
FROM (
SELECT * FROM
(SELECT 1 AS id, 1 AS a, 2 AS b, 3 AS c),
(SELECT 2 AS id, 4 AS a, 5 AS b, 6 AS c, 7 AS d),
(SELECT 3 AS id, 8 AS a, 9 AS b, 10 AS c, 11 AS e),
(SELECT NULL AS id, NULL AS a, NULL AS b, NULL AS c, NULL AS d, NULL AS e, NULL AS f)
)
)
HAVING NOT value IS NULL
添加用于:我正在寻找没有联合或不知道最大预期列数的解决方案
使用客户端代码 - 你可以
a) 获取表的架构Tables: get API
b) 像上面的答案一样构建动态 sql(现在没有联合)
c) 执行sql