检查 Hive 列中重复数字或字符的计数

Check count of repeated digits or characters in Hive column

我在配置单元中有一列数字。我想计算那些重复数字的行数,这也可能是一列字符的情况。

例-

输出应该是 6。

我尝试使用 hive 的反向函数,但它也给出了回文数。 我试过的示例代码 -

select sum(case when Number = reverse(Number) then 1 else 0 end) as counts
from table
where Number is not null

你似乎想知道是否所有数字都出现了2的倍数。

一个相当痛苦的方法是:

select t.*
from t
where ( length(number) - length(replace(number, '0', '')) ) % 2 = 0 and
      ( length(number) - length(replace(number, '1', '')) ) % 2 = 0 and
      . . .
      ( length(number) - length(replace(number, '9', '')) ) % 2 = 0
select count(distinct Number) as dist_numbers
from table
where trim(number) rlike ^0+$|^1+$|^2+$|^3+$|^4+$|^5+$|^6+$|^7+$|^8+$|^9+$;

这是一个临时但麻烦的方法。

1.使用配置单元重复函数

with myTable as (
  select 1 Number union
  select 2222 Number union
  select 1221 Number union
  select 33 Number union
  select 4444 Number union
  select 12 Number union
  select 100 Number union
  select 999999 Number union
  select 55 Number union
  select 40 Number 
) -- test data 

select Number from myTable
where Number = repeat(substr(Number,1,1),length(Number))
;
+---------+--+
| number  |
+---------+--+
| 1       |
| 33      |
| 55      |
| 2222    |
| 4444    |
| 999999  |
+---------+--+
6 rows selected

2。使用分解函数

with myTable as (
  select 1 Number union
  select 2222 Number union
  select 1221 Number union
  select 33 Number union
  select 4444 Number union
  select 12 Number union
  select 100 Number union
  select 999999 Number union
  select 55 Number union
  select 40 Number
)  -- test data

select Number from (
  select Number, count(Number) as cnt
  from (
    select distinct Number, s.Chars from myTable 
    lateral view explode(split(Number,'')) s as Chars
  ) t
  where Chars != ""
  group by Number
) t 
where cnt = 1
;