Выбрать из списка значений на билайн

Я использую beeline, клиент JDBC, основанный на SQLLine, для выполнения запросов Hive. Я хотел бы выбрать из списка значений, таких как:

SELECT DISTINCT * FROM (a,b,b,c,d,..z)

это возможно?


person HISI    schedule 21.02.2018    source источник
comment
вероятно, дубликат stackoverflow.com/questions/1564956/   -  person arhak    schedule 21.02.2018
comment
@arhak Я уже пробовал это, но это не работает   -  person HISI    schedule 21.02.2018
comment
хорошо, возможно, не тот же самый сценарий, небольшая вариация могла бы помочь   -  person arhak    schedule 21.02.2018


Ответы (3)


SELECT DISTINCT *
FROM (
    SELECT 12
    UNION SELECT 23
    UNION SELECT 34
    UNION SELECT 12
    UNION SELECT 23
) AS t1;

PS: также обратитесь к очень близкому вопросу Как я могу выбрать из списка значений в SQL Server

person arhak    schedule 21.02.2018
comment
Есть ли что-то вроде select * from [a,b,c,d,e, f...z], потому что у меня много значений и писать такой запрос больно - person HISI; 21.02.2018
comment
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)
person leftjoin    schedule 21.02.2018
comment
это работа в билайн? вы никогда не пробовали в билайн? - person HISI; 21.02.2018
comment
@hisi, к сожалению, я не могу проверить билайн прямо сейчас - person leftjoin; 21.02.2018
comment
Это не работает!! Я только что попробовал в билайне - person HISI; 21.02.2018

Вы можете попробовать split и explode

 SELECT DISTINCT * FROM 
 (
 select explode( split('a,b,b,c,d,e,f' ,',')) c
 ) as t
 ORDER BY c
person Kaushik Nayak    schedule 22.02.2018