溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Phoenix4.10中的大表異步索引創(chuàng)建實(shí)戰(zhàn)是怎樣的

發(fā)布時(shí)間:2021-12-20 09:19:15 來(lái)源:億速云 閱讀:210 作者:柒染 欄目:大數(shù)據(jù)

Phoenix4.10中的大表異步索引創(chuàng)建實(shí)戰(zhàn)是怎樣的,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。

概述:   

 Phoenix使用HBase作為后端存儲(chǔ),對(duì)于HBase來(lái)說(shuō),我們通常使用字典序的RowKey來(lái)快速訪問數(shù)據(jù),除此之外,也可以使用自定義的Filter來(lái)搜索數(shù)據(jù),但是它是基于全表掃描的。而Phoenix提供的二級(jí)索引是可以避開全表掃描,是在HBase中快速查找或批量檢索數(shù)據(jù)的另一個(gè)選擇。

為什么使用異步索引?

   一般我們可以使用CREATE INDEX來(lái)創(chuàng)建一個(gè)索引,這是一種同步的方法。但是有時(shí)候我們創(chuàng)建索引的表非常大,我們需要等很長(zhǎng)時(shí)間。經(jīng)常會(huì)超時(shí),為了防止超時(shí)我們可通過(guò)調(diào)整超時(shí)時(shí)間來(lái)處理,但是如果這個(gè)表非常大,無(wú)限制的增加超時(shí)時(shí)間就顯得不太合理,Phoenix 4.5以后有一個(gè)異步創(chuàng)建索引的方式 :

    數(shù)據(jù)準(zhǔn)備:

    1.phoenix新建表,

CREATE TABLE IF NOT EXISTS  ljs.testTable211 (id BIGINT not null primary key,order_code char(20),total_amount decimal(10,2),create_time date,user_id bigint);

    這里只是為了演示,我先導(dǎo)入了幾條數(shù)據(jù),一般你使用異步索引肯定是這個(gè)表的數(shù)據(jù)量比較大,不然就沒必要用異步索引了:

upsert into ljs.testTable211 values(1, 'A001', 10.5, '2019-3-19 23:35:00', 1);upsert into ljs.testTable211 values(2, 'A002', 60.0, '2019-3-19 23:36:00', 2);upsert into ljs.testTable211 values(3, 'B001', 66.6, '2019-3-20 01:01:00', 3);upsert into ljs.testTable211 values(4, 'C001', 66.4, '2019-3-20 02:01:00', 3);

 異步索引大體分兩步:

  1. 新建索引表,sql語(yǔ)句最后加上異步索引標(biāo)識(shí) ASYNC:

CREATE INDEX ljs.index2_testTable211 ON testTable211(order_code) INCLUDE(total_amount,create_time,user_id) ASYNC;

2.這時(shí)候創(chuàng)建的索引表中不會(huì)有數(shù)據(jù),查詢索引表驗(yàn)證下。

0: jdbc:phoenix:> select * from ljs.index2_testTable211;+---------------+------+-----------------+----------------+------------+| 0:ORDER_CODE  | :ID  | 0:TOTAL_AMOUNT  | 0:CREATE_TIME  | 0:USER_ID  |+---------------+------+-----------------+----------------+------------++---------------+------+-----------------+----------------+------------+No rows selected (0.204 seconds)0: jdbc:phoenix:>

3.你還需要用HBase自帶的一個(gè)工具類

org.apache.phoenix.mapreduce.index.IndexTool,執(zhí)行一條命令,后端會(huì)啟動(dòng)一個(gè)map reduce任務(wù),只有等到這個(gè)任務(wù)結(jié)束,數(shù)據(jù)都被生成在索引表中后,這個(gè)索引才能被使用。啟動(dòng)工具的方法:

[hbase@salver31 ~]$ hbase org.apache.phoenix.mapreduce.index.IndexTool --schema ljs --data-table testTable211 --index-table index2_testTable211 --output-path /tmp/index_testTable211

參數(shù)解釋:

    -schema   ljs  數(shù)據(jù)庫(kù)名

    --data-table  testTable211  數(shù)據(jù)表名

    --output-path   mapreduce任務(wù)臨時(shí)路徑,可自定義

    --index-table  index2_testTable211 索引表名

執(zhí)行完成后查看索引表,已經(jīng)有了索引數(shù)據(jù):

0: jdbc:phoenix:> select  * from  ljs.INDEX2_TESTTABLE211;+---------------+------+-----------------+--------------------------+------------+| 0:ORDER_CODE  | :ID  | 0:TOTAL_AMOUNT  |      0:CREATE_TIME       | 0:USER_ID  |+---------------+------+-----------------+--------------------------+------------+| A001          | 1    | 10.5            | 2019-03-19 23:35:00.000  | 1          || A002          | 2    | 6E+1            | 2019-03-19 23:36:00.000  | 2          || B001          | 3    | 66.6            | 2019-03-20 01:01:00.000  | 3          || C001          | 4    | 66.4            | 2019-03-20 02:01:00.000  | 3          |

4.這里查看對(duì)應(yīng)的執(zhí)行計(jì)劃驗(yàn)證,下圖的SQL走了索引,而不是全表掃描:

0: jdbc:phoenix:> explain select total_amount,create_time,user_id from  ljs.testTable211  where ORDER_CODE='A001';+-------------------------------------------------------------------------------------------------------------+|                                                    PLAN                                                     |+-------------------------------------------------------------------------------------------------------------+| CLIENT 1-CHUNK PARALLEL 1-WAY ROUND ROBIN RANGE SCAN OVER LJS:INDEX2_TESTTABLE211 ['A001                ']  |+-------------------------------------------------------------------------------------------------------------+1 row selected (0.043 seconds)

5.至此,異步索引執(zhí)行完成。

注意:

    這里一定要注意,異步索引比較繁瑣,需要執(zhí)行兩步命令,后臺(tái)會(huì)啟動(dòng)一個(gè)Mapreduce分布式任務(wù)向索引表插入數(shù)據(jù),如果你的表數(shù)據(jù)很小完全沒有必要用異步索引,啟動(dòng)Mapreduce任務(wù)的時(shí)間就趕上了小表索引創(chuàng)建時(shí)間,切記勿亂用!??!

關(guān)于Phoenix4.10中的大表異步索引創(chuàng)建實(shí)戰(zhàn)是怎樣的問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI