Как установить диапазон для предельного предложения в улье - PullRequest
0 голосов
/ 01 мая 2018

Как установить диапазон для предложения limit в кусте, я пробовал приведенный ниже запрос, но не смог с синтаксической ошибкой. Может кто-нибудь, пожалуйста, помогите

выберите * из предела таблицы 1000,2000;

Ответы [ 4 ]

0 голосов
/ 01 мая 2018

Я не уверен, чего вы пытаетесь достичь, но ...

Это вернет 1001 и запись 2001 года в наборе результатов запроса, только если вы используете улей с версией улья больше 2.0.0

hive --version

(https://issues.apache.org/jira/browse/HIVE-11531)

0 голосов
/ 01 мая 2018

Предложение LIMIT используется для установки предела количества строк в наборе результатов. Вы получаете синтаксическую ошибку из-за неправильного использования этого предложения HQL.

Запрос может быть записан следующим образом, чтобы вернуть не более 2000 строк:

SELECT * FROM table LIMIT 2000;

Вы также можете написать это так, чтобы возвращать не более 1000 строк:

SELECT * FROM table LIMIT 1000;

Однако вы не можете объединить оба в один и тот же аргумент для LIMIT. Аргумент LIMIT должен принимать постоянное значение.

Я попытаюсь немного расширить эту информацию, чтобы попытаться решить вашу проблему. Если вы пытаетесь «разбить» на страницы ваши результаты, может быть полезно следующее.

ПЕРВЫЙ Я бы рекомендовал не использовать HQL для разбивки на страницы, в большинстве случаев это было бы более эффективно реализовано на стороне логики приложения (запрос большого набора результатов, кеширование того, что вам нужно, разбиение на страницы с логикой приложения). Если у вас нет выбора, кроме как вытащить диапазоны строк, вы можете получить желаемый эффект с помощью комбинации предложений LIMIT, ORDER BY и OFFSET.

LIMIT: это ограничит ваш набор результатов максимальным количеством строк

ORDER BY: Это позволит отсортировать / упорядочить ваш набор результатов на основе одного или нескольких столбцов

OFFSET: Это приведет к тому, что ваш результирующий набор начнет с определенной строки после логической первой записи в таблице.

Вы можете объединить эти три предложения для эффективного запроса «страниц» вашей таблицы. Например, следующие три запроса показывают, как получить первые 3 блока данных из таблицы, где каждый блок содержит 1000 строк, а целевой столбец 'column1' используется для определения логического порядка.

SELECT title as "Page 1", column1, column2, ... FROM table
  ORDER BY column1 LIMIT 1000 OFFSET 0;
SELECT title as "Page 2", column1, column2, ... FROM table
  ORDER BY column1 LIMIT 1000 OFFSET 1000;
SELECT title as "Page 3", column1, column2, ... FROM table
  ORDER BY column1 LIMIT 1000 OFFSET 2000;

Каждый запрос объявляет 'column1' в качестве значения сортировки с ORDER BY. Запросы будут возвращать не более 1000 строк из-за предложения LIMIT. Каждый набор результатов будет начинаться с отдельной строки, так как значение OFFSET увеличивается на «размер страницы» для каждого запроса.

0 голосов
/ 01 мая 2018

Вы можете использовать Row_Number оконную функцию и установить предел диапазона.

Ниже запроса будут получены только первые 20 записей из таблицы

   hive> select * from 
        (
        SELECT *,ROW_NUMBER() over (Order by id) as rowid FROM <tab_name>
        )t 
    where rowid > 0 and rowid <=20;

Использование оператора Между для указания диапазона

 hive> select * from 
            (
            SELECT *,ROW_NUMBER() over (Order by id) as rowid FROM <tab_name>
            )t 
        where rowid between 0 and 20;

Чтобы получить строки от 20 до 40 , затем увеличьте значения нижней / верхней границы

  hive> select * from 
            (
            SELECT *,ROW_NUMBER() over (Order by id) as rowid FROM <tab_name>
            )t 
        where rowid > 20 and rowid <=40;   
0 голосов
/ 01 мая 2018

Limit в Hive дает 'n' количество записей случайным образом. Это не печатать ряд записей. Вы можете использовать order by в сочетании с лимитом, чтобы получить то, что вы хотите

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