仅当字段包含双引号时,GROUP_CONCAT才会自动添加双引号

时间:2014-12-21 14:10:22

标签: google-bigquery

当我在BigQuery中使用GROUP_CONCAT包含双引号的字段时,
结果值是 自动转义并添加一些双引号 但如果字段不包含双引号,则GROUP_CONCAT的行为略有不同。

案例1(带双引号)

Row | word  | num
--- | ----  | ---
 1  | fo"o  |   1
 2  | ba"r  |   1
 3  | ba"z  |   2

和查询

SELECT GROUP_CONCAT(word) AS words, num
FROM Table
GROUP BY num

结果

Row | words         | num
--- | ------------- | ---
 1  | "fo""o,ba""r" |   1
 2  | "ba""z"       |   2

↑它会自动转义。

案例2(没有双引号)

Row | word | num
--- | ---- | ---
 1  | fo'o |   1
 2  | ba'r |   1
 3  | ba'z |   2

和查询

SELECT GROUP_CONCAT(word) AS words, num
FROM Table
GROUP BY num

结果

Row | words     | num
--- | --------- | ---
 1  | fo'o,ba'r |   1
 2  | ba'z      |   2

↑没有添加双引号。

<3>案例3(带双引号的正常CONCAT)

※正常的CONCAT表现不像GROP_CONCAT 不会添加转义双引号。

Row | word  
--- | ----  
 1  | fo"o  
 2  | ba'r  

和查询

SELECT CONCAT(word, '12"3') AS words
FROM Table

结果

Row | words        
--- | ---------
 1  | fo"o12"3
 2  | ba'r12"3

问题

我想知道为什么这些案件的结果会有所不同 Case1时我不想逃避并添加双引号 有没有解决方案?

感谢。

2 个答案:

答案 0 :(得分:2)

此问题已向Google报告,但是他们没有提供ETA的时间。

此问题已发布在Official Google BigQuery issue and feature request tracker,有关此问题的更新中,可在提供的链接中找到。

答案 1 :(得分:0)

正如Marilu's answer中所述,Google提到支持此用例的计划,但在发布时未在feature request中提供ETA。截至2015年2月,该问题一直是&#34;固定&#34;。

Google添加了一个GROUP_CONCAT_UNQUOTED函数,其行为几乎与GROUP_CONCAT完全相同,除非它没有转义双引号。

以下是Google Docs for BigQuery Aggregate Functions

中函数的说明
  

GROUP_CONCAT_UNQUOTED('str' [, separator])

     

将多个字符串连接成一个字符串,其中每个值由可选的separator参数分隔。如果省略separator,则BigQuery返回逗号分隔的字符串。

     

GROUP_CONCAT不同,此函数不会为包含双引号字符的返回值添加双引号。例如,字符串a"b将返回a"b

     

示例: SELECT GROUP_CONCAT_UNQUOTED(x) FROM (SELECT 'a"b' AS x), (SELECT 'cd' AS x);