You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用HIVEQL实现电话号码与DDD区号的拆分存储

HiveQL 实现DDD区号与电话号码拆分方案

前置假设

基于你提供的样例数据逻辑,默认符合以下规则:

  • 巴西DDD区号固定为2位数字
  • 已正确拆分的数据满足:DDD字段为2位有效数字,Phone字段为不带区号的纯电话号码
  • 未正确拆分的数据满足:DDD字段为空/非2位有效值,Phone字段前2位为DDD区号,后续内容为纯电话号码

核心实现逻辑

  • 若DDD字段已为2位有效内容,直接保留原有DDD和Phone的值
  • 若DDD字段无效,提取Phone前2位作为新的DDD,Phone保留第3位开始的剩余内容

代码实现

1. 预览验证(先执行查询确认拆分结果符合预期)

SELECT
  -- 处理后的DDD字段
  CASE
    WHEN length(trim(DDD)) = 2 THEN trim(DDD)
    ELSE substr(trim(Phone), 1, 2)
  END AS DDD,
  -- 处理后的Phone字段
  CASE
    WHEN length(trim(DDD)) = 2 THEN trim(Phone)
    ELSE substr(trim(Phone), 3)
  END AS Phone
  -- 其余需要保留的原始表字段直接追加在此处即可
FROM 你的原始表名称;

2. 写入目标表(验证结果无误后执行)

-- 第一步:创建目标表(已创建可跳过)
CREATE TABLE IF NOT EXISTS 你的目标表名称(
  DDD STRING COMMENT '2位区号',
  Phone STRING COMMENT '不含区号的电话号码'
  -- 其余字段和原始表保持一致
) STORED AS ORC; -- 存储格式可按需调整

-- 第二步:写入处理后的拆分数据
INSERT OVERWRITE TABLE 你的目标表名称
SELECT
  CASE
    WHEN length(trim(DDD)) = 2 THEN trim(DDD)
    ELSE substr(trim(Phone), 1, 2)
  END AS DDD,
  CASE
    WHEN length(trim(DDD)) = 2 THEN trim(Phone)
    ELSE substr(trim(Phone), 3)
  END AS Phone
  -- 其余需要保留的原始表字段直接追加在此处即可
FROM 你的原始表名称;

注意事项

  • 若存在特殊非2位长度的DDD区号,调整length(trim(DDD)) = 2的判断规则即可
  • DDD和Phone建议用STRING类型存储,避免数字类型丢失前导0
  • 请务必先执行SELECT预览结果,确认拆分逻辑适配你的实际数据后再执行写入操作

内容的提问来源于stack exchange,提问作者Felipe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:30:02