Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在BigQuery中使用标准SQL连接数组(每行)_Sql_Arrays_Google Bigquery_User Defined Functions_Bigquery Standard Sql - Fatal编程技术网

在BigQuery中使用标准SQL连接数组(每行)

在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

我有一个表,其中包含一列行

表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 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。你没有理由重新发明轮子,但第三个问题会满足你的需求。