Apache Phoenix запрос занимает много времени - PullRequest
0 голосов
/ 28 октября 2019

Привет! Я использую Apache Phoenix для запроса sql через hbase.

Схема таблицы

CREATE TABLE TABLE_1 (
      SF_ID VARCHAR NOT NULL,
      ENTITY_ID VARCHAR NOT NULL,
      PRODUCT_SKU VARCHAR,
      CITY_NAME VARCHAR,
      SCREEN_NAME VARCHAR, 
      PRODUCT_LIST_VIEWS BIGINT,
      PRODUCT_LIST_CLICKS BIGINT,
      PRODUCT_LIST_CTR FLOAT,
      TIMESTAMP BIGINT NOT NULL,
      POS INTEGER NOT NULL,
      CONSTRAINT pk PRIMARY KEY (SF_ID, ENTITY_ID, TIMESTAMP, POS));

Я создал вторичный индекс следующим образом: -

CREATE INDEX GA_2 ON TABLE_1 (ENTITY_ID) INCLUDE (PRODUCT_LIST_VIEWS, PRODUCT_LIST_CLICKS, PRODUCT_LIST_CTR);

Но следующий запрос занимает от 1,5 с до 2 с при работе на строках 500 000.

select ENTITY_ID as "entityId", sum(PRODUCT_LIST_VIEWS) as "productViewSum", sum(PRODUCT_LIST_CLICKS) as "productClickSum", sum(PRODUCT_LIST_CTR) as "productCTRSum" from "TABLE_1" group by ENTITY_ID;

План объяснения следующий: -

CLIENT 1-CHUNK 0 ROWS 0 BYTES PARALLEL 1-WAY FULL SCAN OVER GA_2 
SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY ["ENTITY_ID"]

Есть ли способ улучшитьвремя ответа на запрос?

/ ******************************************** /

Обновление: - Исходя из плана объяснения, я создал соленую таблицу с 12 ведрами.

Теперь план объяснения следующий: -

+-------------------------------------------------------------------+----------+
|                               PLAN                                | EST_BYTE |
+-------------------------------------------------------------------+----------+
| CLIENT 12-CHUNK PARALLEL 12-WAY FULL SCAN OVER GA_3               | null     |
|     SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY ["ENTITY_ID"]  | null     |
| CLIENT MERGE SORT                                                 | null     |
+-------------------------------------------------------------------+----------+

Но время отклика все равно.

Заметил еще одну вещь: -

Если я не использую сумму в моем ответе, ответ довольно быстрый.

Например,

select ENTITY_ID, SUM(PRODUCT_LIST_VIEWS) from GA_TABLE_2 where SF_ID = '1' group by ENTITY_ID;

этот запрос занял 631 мс

, но

select ENTITY_ID from GA_TABLE_2 where SF_ID = '1' group by ENTITY_ID;

это заняло всего 30 мс.

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