Импала sql только выбрать номера определенной длины - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть переменная, которая использовалась в качестве свободного текстового поля, тысячи строк.

Хотя он должен содержать только номера счетов, он также содержит номера телефонов, текст или NULL.

Мне нужно извлечь столбцы только с номерами счетов (8-значными полями). Как мне заархивировать это в SQL impala, тем более что у нас есть не только числа, но и текст. Также мне нужно знать процент номеров счетов по сравнению с другими, чтобы оценить время, необходимое для исправления других полей. Как это может быть сделано? это будет выглядеть примерно так:

accounts
---------
12345678
23456789
test only
34567890
23443256
23443257
021735547
23443258
23443259
23443260
call back
23443261
53443262
23443263
23443264
23443265
cancel
53443262
53443263
63443264
53443265
73443266
53443267

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Интересно. Я бы использовал regexp_like():

select sum(case when regexp_like(col, '^[0-9]{8}$') then 1 else 0 end) as cnt,
       avg(case when regexp_like(col, '^[0-9]{8}$') then 1.0 else 0 end) as ratio
from t;
0 голосов
/ 30 апреля 2018

Регулярное выражение хорошо для этого. Попробуйте:

select regexp_extract(free_text_column, '^[0-9]{8}$',1) from your_table

Чтобы получить процент вы можете сделать

select count(regexp_extract(free_text_column, '^[0-9]{8}$',1))/count(*)
from your_table

Возможно, вам придется использовать счет как число с плавающей точкой, чтобы заставить дивизию работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...