检查 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
;
我在配置单元中有一列数字。我想计算那些重复数字的行数,这也可能是一列字符的情况。
例-
输出应该是 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
;