Big Query 中的正确案例

Posted

技术标签:

【中文标题】Big Query 中的正确案例【英文标题】:Proper Case in Big Query 【发布时间】:2018-07-15 20:20:34 【问题描述】:

我在 Big Query 的“香蕉”列中有“我想买香蕉”这句话。

我想得到“我想买香蕉”。我该怎么做?当我看到 LOWER 和 UPPER 时,我期待 PROPER(Bananas) 函数,但似乎不支持 PROPER 大小写?

DZ

【问题讨论】:

【参考方案1】:

2020 年 10 月更新:

BigQuery 现在支持 INITCAP 函数 - 该函数接受一个 STRING 并将其返回,其中每个单词的第一个字符为大写,所有其他字符为小写。非字母字符保持不变。

因此,不再需要以下类型的花哨 UDF - 而您只需使用

#standradSQL
SELECT str, INITCAP(str) proper_str
FROM `project.dataset.table`

--~~~~~~~~~~~~~~~~~~

以下示例适用于 BigQuery Standrad SQL

#standradSQL
CREATE TEMP FUNCTION PROPER(str STRING) AS (( 
  SELECT STRING_AGG(CONCAT(UPPER(SUBSTR(w,1,1)), LOWER(SUBSTR(w,2))), ' ' ORDER BY pos) 
  FROM UNNEST(SPLIT(str, ' ')) w WITH OFFSET pos
));
WITH `project.dataset.table` AS (
  SELECT 'i Want to buy bananas' str
)
SELECT str, PROPER(str) proper_str
FROM `project.dataset.table`  

结果是

Row str                     proper_str   
1   i Want to buy bananas   I Want To Buy Bananas    

【讨论】:

【参考方案2】:

我扩展了 Mikhail Berlyant 的答案,在连字符 (-) 之后也大写,因为我需要为地名使用正确的大小写。必须从 SPLIT 函数切换到使用正则表达式来执行此操作。

我在开始时测试一个空字符串并返回一个空字符串(而不是 null)以匹配本机 UPPER 和 LOWER 函数的行为。

CREATE TEMP FUNCTION PROPER(str STRING) AS (( 
  SELECT 
    IF(str = '', '',
      STRING_AGG(
        CONCAT(
          UPPER(SUBSTR(single_words,1,1)), 
          LOWER(SUBSTR(single_words,2))
        ), 
        '' ORDER BY position
      )
    )
  FROM UNNEST(REGEXP_EXTRACT_ALL(str, r' +|-+|.[^ -]*')) AS single_words
  WITH OFFSET AS position
));

WITH test_table AS (
  SELECT 'i Want to buy bananas' AS str
  UNION ALL
  SELECT 'neWCASTle upon-tyne' AS str
)

SELECT str, PROPER(str) AS proper_str
FROM test_table 

输出

Row str                     proper_str   
1   i Want to buy bananas   I Want To Buy Bananas  
2   neWCASTle upon-tyne     Newcastle Upon-Tyne

【讨论】:

以上是关于Big Query 中的正确案例的主要内容,如果未能解决你的问题,请参考以下文章

从 Airtable 到 Big Query 中正确且真实的 DateStamp 的十进制字符串样式

如何用 Google Big Query Table 中的另一个分区重写一个分区?

使用 Google Big Query 构建基本漏斗

Google Big Query Error: CSV table 遇到太多错误,放弃。行:1 错误:1

应用电子商务操作过滤器时,Big Query 和 Google Analytics UI 不匹配

如何正确分组 Laravel Query Builder 中的 where 子句