如何在 Google BigQuery 中使用 SQL 以正确的大小写格式化名称

BigQuery

修复 Google BigQuery 中的名称标准化:实用指南

想象一下,收到一份报告,其中的名称到处都是——有些全部大写,有些大小写正确,有些完全不一致。这不仅仅是一个审美问题;标准化格式对于干净的数据分析至关重要。 🧐

如果您正在处理存储主管或销售人员姓名的数据集,这种情况可能听起来很熟悉。当“STEVE MARK”和“ANDRY WIU”等名字与“Jonathan Lu”等格式正确的条目混合时,您的工作就会变得不必要的挑战性。 🙈

值得庆幸的是,Google BigQuery 中的 SQL 提供了强大的工具来解决这个问题。即使您不喜欢 REGEX 或不确定其复杂性,也有一个解决方案可以将这些名称转换为正确的大小写(其中每个单词的第一个字母都是大写)。结果呢?干净、专业的数据集!

在本文中,我们将探讨如何使用简单的 SQL 技术有效地标准化 BigQuery 中的全名。最后,您将拥有一个像“Steve Mark”和“Sally Chow”这样的标准化列表,而不是他们当前的混乱状态。让我们清理您的数据并使其焕发光彩! ✨

命令 使用示例
INITCAP 用于将字符串中每个单词的第一个字母大写,同时将所有其他字母转换为小写。 例子: INITCAP('史蒂夫·马克') 结果 “史蒂夫·马克”
LOWER 将字符串中的所有字符转换为小写。 例子: 下('安德烈·吴') 结果 '安德里·吴'
REGEXP_REPLACE 替换字符串中与正则表达式模式匹配的部分。 例子: REGEXP_REPLACE('乔纳森卢', r'(bw)', UPPER('1')) 将每个单词的第一个字母大写。
ARRAY_TO_STRING 使用指定的分隔符将数组的元素组合成单个字符串。 例子: ARRAY_TO_STRING(['史蒂夫', '马克'], ' ') 结果 “史蒂夫·马克”
SPLIT 根据指定的分隔符将字符串拆分为子字符串数组。 例子: SPLIT('卢乔纳森', ' ') 结果 [‘乔纳森’、‘卢’]
UNNEST 将数组转换为一系列行,允许对单个元素进行操作。 例子: UNNEST(SPLIT('陆兆禧', ' ')) 为“Jonathan”和“Lu”生成单独的行。
WITH 创建公共表表达式 (CTE) 用于组织复杂查询或可重用子查询。 例子: WITH test_data AS (SELECT 'Jonathan Lu')
CREATE TEMP FUNCTION 在自定义操作的查询中定义临时用户定义函数 (UDF)。 例子: 创建临时函数 ProperCase(输入字符串) AS (...)
UPPER 将字符串中的所有字符转换为大写。 例子: UPPER('史蒂夫马克') 结果 “史蒂夫·马克”

将名称转换为正确的大小写:分步说明

上面提供的脚本旨在解决 Google BigQuery 中名称格式不标准化的问题。第一种方法利用 函数,这是 BigQuery 中的内置 SQL 功能。该命令简单高效,可将任何字符串转换为正确的大小写格式。例如,它将每个单词的第一个字母大写并将其余字母转换为小写,从而将“STEVE MARK”转换为“Steve Mark”。这在处理大型数据集时特别有用,因为不一致可能会破坏报告。将此视为一根魔杖,可以轻松地为您的数据演示做好准备。 🪄

第二种方法介绍 ,一种利用正则表达式 (REGEX) 的更精细的方法。该技术提供了对文本转换过程的精确控制。首先使用 函数以确保所有字符均为小写,然后 REGEXP_REPLACE 应用一种模式将每个单词的第一个字母大写。在处理非标准数据(例如具有意外大写模式或特殊字符的输入)时,此方法非常理想。想象一下试图为一场婚礼整理一份混乱的宾客名单;这种方法可确保每个名称的格式美观且一致。 💍

第三种方法,利用 ,特别适合具有独特格式要求的复杂数据集。通过在 BigQuery 中使用 JavaScript 创建自定义函数,此方法可以更动态地处理每个名称。它将名称拆分为数组,对每个元素应用格式化逻辑,然后将它们组合回格式正确的字符串。这种模块化方法非常适合需要可重用解决方案以适应不断变化的数据结构的团队。例如,如果公司的数据库存储带有附加元数据或混合分隔符的名称,则 UDF 提供灵活性和自定义选项。

每种方法都是为了解决特定的用例而设计的,在简单性、精确性和适应性之间提供了平衡。例如, 方法对于干净的数据集快速有效,而 REGEX 方法为稍微混乱的数据提供了多功能性。另一方面,UDF 方法在处理高度可变的输入时表现出色。这些技术可确保无论数据集的状态如何,您都可以有效地标准化名称并保持专业、精美的输出。有了这些工具,清理数据集不再感觉像是一场艰苦的战斗,而是一项可以实现且令人满意的任务! 🌟

使用 SQL 将 Google BigQuery 中的名称标准化为正确的大小写

该脚本使用 Google BigQuery 中的 SQL 将非标准化名称数据转换为正确的大小写格式。

-- Approach 1: Using BigQuery's INITCAP function (Optimized for simplicity)
-- This approach converts names to Proper Case using INITCAP, handling capitalization directly.
SELECT
  INITCAP(Director) AS StandardizedDirector,
  INITCAP(Salesperson) AS StandardizedSalesperson
FROM
  your_dataset.your_table;
-- The INITCAP function automatically handles capitalizing the first letter of each word.
-- Ensure you replace 'your_dataset.your_table' with your actual table reference.

使用 REGEX 精确控制大小写转换

该解决方案结合使用 SQL 和 REGEX 和 BigQuery 函数,可以更灵活地处理各种情况。

-- Approach 2: Applying REGEX to ensure each word's first letter is capitalized
SELECT
  REGEXP_REPLACE(LOWER(Director), r'(\b\w)', UPPER('\\1')) AS StandardizedDirector,
  REGEXP_REPLACE(LOWER(Salesperson), r'(\b\w)', UPPER('\\1')) AS StandardizedSalesperson
FROM
  your_dataset.your_table;
-- This method first converts all text to lowercase using LOWER,
-- and then capitalizes the first letter of each word using REGEXP_REPLACE.
-- Replace 'your_dataset.your_table' with your actual table name.

将 SQL 与 UDF(用户定义函数)相结合以进行高级大小写转换

这种高级方法使用 BigQuery 基于 JavaScript 的 UDF 来处理边缘情况和自定义逻辑。

-- Approach 3: Defining a UDF for custom name formatting
CREATE TEMP FUNCTION ProperCase(input STRING) AS (
  (ARRAY_TO_STRING(
    ARRAY(SELECT INITCAP(word)
          FROM UNNEST(SPLIT(input, ' ')) AS word), ' '))
);
-- Applying the UDF to standardize columns
SELECT
  ProperCase(Director) AS StandardizedDirector,
  ProperCase(Salesperson) AS StandardizedSalesperson
FROM
  your_dataset.your_table;
-- This UDF splits the text into words, applies INITCAP to each, and then joins them back.

在不同环境中测试解决方案

本节介绍 SQL 测试脚本来验证每个解决方案的结果。

-- Test Script: Validate output consistency
WITH test_data AS (
  SELECT 'JONATHAN LU' AS Director, 'STEVE MARK' AS Salesperson
  UNION ALL
  SELECT 'LIAM LEE', 'WINDY WU'
  UNION ALL
  SELECT 'ANDRY WIU', 'SALLY CHOW'
)
SELECT
  INITCAP(Director) AS TestDirector1,
  REGEXP_REPLACE(LOWER(Salesperson), r'(\b\w)', UPPER('\\1')) AS TestSalesperson2
FROM
  test_data;
-- Replace the test_data CTE with your actual dataset to test in production.

使用高级 SQL 技术简化数据清理

当处理不一致的数据集时 ,确保跨领域标准化对于数据准确性和可用性至关重要。管理文本密集的列(例如名称)时会出现一个关键挑战,其中大小写不一致可能会扰乱分析。除了标准案例转换技术之外,BigQuery 还提供了通过附加逻辑来丰富数据清理的机会。例如,您可能会遇到某些场景,其中某些单词(如“McDonald”或“O'Connor”)需要特殊的格式规则,而通用函数如 可能无法有效处理。通过将 SQL 与条件逻辑或外部 UDF 相结合,您可以微调转换以无缝处理此类异常。 🚀

另一个有用的角度是将这些转换集成到更大的工作流程中。例如,在清理名称时,您可能还需要根据预定义列表验证它们或应用过滤器来识别异常。通过将大小写转换逻辑嵌入到公共表表达式 (CTE) 中,您可以创建模块化查询,从而简化调试并提高可重用性。这种分层方法允许您在单个管道中处理格式化和验证,从而节省时间和精力。此类流程在客户分析或营销分析等大规模运营中尤其有价值。

最后,在处理海量数据集时,利用 BigQuery 的可扩展性可以改变游戏规则。无论是数百万行客户名称还是区域数据记录,UDF 和 REGEX 等优化的 SQL 技术都可确保性能保持高效。将这些工具与索引和分区等最佳实践结合起来,可以确保即使是最复杂的查询也能快速执行。通过采取全面的方法,您不仅可以立即解决格式问题,还可以为干净且可维护的数据库奠定基础。 🌟

  1. 什么是 功能做什么?
  2. 这 函数将字符串中每个单词的第一个字母大写,将其余字母转换为小写。
  3. 能 处理边缘情况,例如带有特殊字符的名称?
  4. 是的,您可以在其中制作自定义图案 解释带有连字符或撇号的名称,例如“O'Connor”。
  5. 使用有什么好处 在 BigQuery 中执行此任务?
  6. 与一个 ,您可以创建可重用、可自定义的逻辑来处理独特的格式挑战,使其成为大型或复杂数据集的理想选择。
  7. 我如何验证我的转换?
  8. 将您的转换与 CTE 结合起来,根据参考表或模式交叉检查输出,以获得更高的准确性。
  9. BigQuery 是否可以使用这些函数有效处理大型数据集?
  10. 是的,BigQuery 旨在处理海量数据集,并使用优化的查询,例如 和 确保快速执行。
  11. 有没有办法自动化这个过程?
  12. 您可以在 BigQuery 中安排 SQL 脚本,或通过 Dataflow 或 Cloud Composer 等工具将它们集成到工作流程中。
  13. 该流程可以处理多语言数据吗?
  14. 是的,但您可能需要调整模式 或者在 UDF 中使用特定于语言的逻辑。
  15. 测试这些脚本的最佳方法是什么?
  16. 创建测试数据集并对子集运行查询,以确保输出满足您的期望,然后再将其应用到完整数据集。
  17. 如何处理完全大写的名称?
  18. 首先,使用 将它们转换为小写,然后应用 或基于正则表达式的转换。
  19. 这些方法可以处理以多种语言存储的名称吗?
  20. 是的,BigQuery 的功能类似于 和 UDF 具有适应性,但非拉丁脚本可能需要额外的逻辑。
  21. 如果我的名字分布在多个字段中怎么办?
  22. 使用 在应用转换之前将字段合并到单个列中。

在 BigQuery 中标准化名称并不一定令人头疼。通过使用 INITCAP 等内置函数或利用自定义 REGEX 模式,您甚至可以将最混乱的数据集转换为干净、一致的格式。正确的方法取决于数据集的复杂性和大小。 😊

无论您是处理客户列表、员工记录还是营销数据,正确的格式都可以确保清晰度和专业性。这些技术不仅可以清理您当前的数据集,还可以帮助您构建可扩展的工作流程以满足未来的需求。一个结构良好的数据库总是值得付出努力的! 🌟

  1. 探索使用 以及 BigQuery 中的其他字符串操作函数。 网址: BigQuery 文档
  2. 提供有关优化大规模数据集和文本处理的 SQL 查询的见解。 网址: 走向数据科学
  3. 讨论在 BigQuery 中使用 UDF 进行文本转换的高级技术。 网址: 数据转换博客