在BigQuery中使用标准SQL连接数组(每行)
我有一个表,其中包含一列行 表1.a行: “ABC” “DEF” “GHI” 以及一个javascript UDF函数,该函数接受一行作为输入,并为每行输出一个字符串数组在BigQuery中使用标准SQL连接数组(每行),sql,arrays,google-bigquery,user-defined-functions,bigquery-standard-sql,Sql,Arrays,Google Bigquery,User Defined Functions,Bigquery Standard Sql,我有一个表,其中包含一列行 表1.a行: “ABC” “DEF” “GHI” 以及一个javascript UDF函数,该函数接受一行作为输入,并为每行输出一个字符串数组 splitStrings(table_1.row_a) ["A", "B", "C"] ["D", "E", "F"] ["G", "H", "I"] 如何连接这些结果以获得所需的输出表: A B C D E F.. 到目前为止,我有以下代码: CREATE TEMP FUNCTION splitStrings(str
splitStrings(table_1.row_a)
["A", "B", "C"]
["D", "E", "F"]
["G", "H", "I"]
如何连接这些结果以获得所需的输出表:
A
B
C
D
E
F..
到目前为止,我有以下代码:
CREATE TEMP FUNCTION splitStrings(str STRING)
RETURNS ARRAY<STRING>
LANGUAGE js AS """
return str.split();
""";
SELECT * FROM UNNEST(["ABCD", "EFGH", "IJKL", "MNOP"]) AS words
CROSS JOIN UNNEST(splitStrings(words))
我想要每行一封信
A.
B
C.为什么不直接使用
union all
select col1 from t union all
select col2 from t union all
select col3 from t;
或者,如果确实要使用阵列,则不需要UDF:
select val
from (select 'A' as a, 'B' as b, 'C' as c union all
select 'D', 'E', 'F' union all
select 'G', 'H', 'I'
) x cross join
unnest(array[a, b, c]) val;
至于你的方法,我认为你希望:
SELECT val
FROM table_1 CROSS JOIN
UNNEST(splitStrings(table_1.row_a)) val;
也就是说,从
UNNEST()
选择结果,为什么不直接使用union all
select col1 from t union all
select col2 from t union all
select col3 from t;
或者,如果确实要使用阵列,则不需要UDF:
select val
from (select 'A' as a, 'B' as b, 'C' as c union all
select 'D', 'E', 'F' union all
select 'G', 'H', 'I'
) x cross join
unnest(array[a, b, c]) val;
至于你的方法,我认为你希望:
SELECT val
FROM table_1 CROSS JOIN
UNNEST(splitStrings(table_1.row_a)) val;
也就是说,从下面的BigQuery标准SQL示例中选择结果
#standardSQL
WITH `project.dataset.table` AS (
SELECT "ABC" word UNION ALL
SELECT "DEF" UNION ALL
SELECT "GHI"
)
SELECT value
FROM `project.dataset.table`, UNNEST(SPLIT(word, '')) value
结果:
Row value
1 A
2 B
3 C
4 D
5 E
6 F
7 G
8 H
9 I
下面是BigQuery标准SQL的示例
#standardSQL
WITH `project.dataset.table` AS (
SELECT "ABC" word UNION ALL
SELECT "DEF" UNION ALL
SELECT "GHI"
)
SELECT value
FROM `project.dataset.table`, UNNEST(SPLIT(word, '')) value
结果:
Row value
1 A
2 B
3 C
4 D
5 E
6 F
7 G
8 H
9 I
我已经更新了我的代码,以显示交叉连接的结果,这不是我想要的。我确实需要使用UDF,这是一个简化的示例。我不知道如何使用工会。只有一列和数千行。不是col1,col2,col3..@user759885。没有理由重新发明轮子,但第三个查询可以满足您的需要。我已经更新了代码,以显示交叉连接的结果,这不是我想要的结果。我确实需要使用UDF,这是一个简化的示例。我不知道如何使用工会。只有一列和数千行。不是col1,col2,col3..@user759885。你没有理由重新发明轮子,但第三个问题会满足你的需求。