Я использую beeline, клиент JDBC, основанный на SQLLine, для выполнения запросов Hive. Я хотел бы выбрать из списка значений, таких как:
SELECT DISTINCT * FROM (a,b,b,c,d,..z)
это возможно?
Я использую beeline, клиент JDBC, основанный на SQLLine, для выполнения запросов Hive. Я хотел бы выбрать из списка значений, таких как:
SELECT DISTINCT * FROM (a,b,b,c,d,..z)
это возможно?
SELECT DISTINCT *
FROM (
SELECT 12
UNION SELECT 23
UNION SELECT 34
UNION SELECT 12
UNION SELECT 23
) AS t1;
PS: также обратитесь к очень близкому вопросу Как я могу выбрать из списка значений в SQL Server
select * from [a,b,c,d,e, f...z]
, потому что у меня много значений и писать такой запрос больно
- person HISI; 21.02.2018
DISTINCT
здесь лишнее. Операция AUNION
всегда возвращает уникальные строки. Но UNION ALL
с DISTINCT
имело бы смысл.
- person Kaushik Nayak; 22.02.2018
Также вы можете использовать stack
, он работает намного быстрее, чем UNION:
hive> select id from
> (
> select stack(5, --the number of elements
> 10 ,
> 20 ,
> 30 ,
> 40 ,
> 50
> ) as (id)
> )s;
OK
10
20
30
40
50
Time taken: 4.88 seconds, Fetched: 5 row(s)
Вы можете попробовать split
и explode
SELECT DISTINCT * FROM
(
select explode( split('a,b,b,c,d,e,f' ,',')) c
) as t
ORDER BY c