Улей выборки таблиц и ведро - PullRequest
1 голос
/ 13 апреля 2020

Я новичок в Hive и столкнулся с некоторой проблемой. Сейчас я изучаю группирование, и моя задача - создать таблицу Hive, состоящую из 2 блоков, а затем поместить в эту таблицу как минимум 5 записей. Ну, эта часть ясна, я думаю:

CREATE TABLE <tablename>(id INT,field2 STRING,field3 TINYINT) CLUSTERED BY(id) INTO 2 BUCKETS;

Для заполнения таблицы я просто использовал оператор вставки в значения (...). На самом деле я не знаю следующее: мне нужно выполнить этот запрос:

SELECT * FROM <tablename> TABLESAMPLE(BUCKET 1 OUT OF 2 ON id)

Когда я его запускаю, он возвращает 0 строк, и я не знаю, почему. Я попытался найти его на inte rnet, но не нашел точного ответа. Если я заменяю идентификатор другим полем в таблице, он возвращает строки в этом сегменте. Так может кто-нибудь объяснить это, пожалуйста?

1 Ответ

0 голосов
/ 14 апреля 2020

здесь я даю вам несколько советов по созданию и вставке в таблицы сегментов.

Формирование корзины - это подход для повышения производительности запросов Hive.

Bucketing хранит данные в отдельных файлах, а не в отдельных подкаталогах, таких как разделы. Он делит данные практически случайным образом, а не предсказуемым образом, как разделение. Когда записи вставляются в таблицу с пакетами, Hive вычисляет коды ha sh значений в указанном столбце группирования и использует эти коды ha sh для разделения записей на сегменты. По этой причине группирование иногда называют разделением ha sh. Цель группирования - равномерно распределить записи по заранее определенному количеству сегментов. Группирование может повысить производительность объединений, если все объединенные таблицы объединены в столбец ключа объединения.

Подробнее о объединении см. На странице руководства по языку Hive с описанием таблиц с объединением по адресу https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL+BucketedTables ?.

В качестве примера группирования:

Давайте посмотрим, как мы можем создавать Табличные таблицы в Hive.

Табличные таблицы - это не что иное, как Ха sh Разбиение в обычных базах данных. Нам нужно указать предложение CLUSTERED BY, а также INTO BUCKETS для создания таблицы Bucketed.

CREATE TABLE orders_buck (
  order_id INT,
  order_date STRING,
  order_customer_id INT,
  order_status STRING
) CLUSTERED BY (order_id) INTO 8 BUCKETS
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

DESCRIBE FORMATTED orders_buck;

Давайте посмотрим, как мы можем добавлять данные в таблицы Buckted.

Обычно мы используем команду INSERT чтобы получить данные в таблицы с разбивкой, поскольку исходные данные могут не соответствовать критерию нашей таблицы с разбивкой. Если данные находятся в файлах, сначала нам нужно получить данные для этапа, а затем вставить их в таблицу с интервалом. У нас уже есть данные в таблице заказов, давайте использовать их для вставки данных в нашу таблицу с контурами. Для orders_buck hive.enforce.bucketing должно быть установлено значение true.

Вот пример вставки данных в таблицу с контурами из обычного управляемого или внешний стол.

SET hive.enforce.bucketing;
SET hive.enforce.bucketing=true;

INSERT INTO orders_buck
SELECT * FROM orders;

-- check out into the directory of the bucketed table if the 
-- number of files is equal to number of buckets

dfs -ls /user/hive/warehouse/training_retail.db/orders_buck;

SELECT * FROM orders_buck TABLESAMPLE(BUCKET 1 OUT OF 2 ON order_id);

-- In my case this query works perfectly well

Надеюсь, это может быть печально,

С уважением.

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