phoenix 大表 小表 顺序 join查询

粗糙的全表扫描例子:

T_EXTENSION_ALL_DATAS_LOGIN 大表,200W+数据。

T_EXTENSION_ALL_DATAS_SHOW  小表,几十条数据。

select T1.LOGIN_DATE,T1.COUNTRY,T1.IP,T1.BROWSER,T1.USER_NAME,T1.GENDER,T1.EMAIL,T2.TIME_SPEND,T2.CAM_SITE,T2.TOKEN_EARNED,T2.REVENUE,T2.TIPS_SENT,T2.TOY 
FROM T_EXTENSION_ALL_DATAS_LOGIN T1 
INNER JOIN T_EXTENSION_ALL_DATAS_SHOW T2 
ON (T1.LOGIN_DATE=T2.SHOW_DATE AND T1.EMAIL = T2.EMAIL);

查询结果:6 rows selected (0.646 seconds)

如果将大小表的join顺序调换一下:

select T1.SHOW_DATE,T1.EMAIL,T1.TIME_SPEND,T1.CAM_SITE,T1.TOKEN_EARNED,T1.REVENUE,T1.TIPS_SENT,T1.TOY,T2.COUNTRY,T2.IP,T2.BROWSER,T2.USER_NAME,T2.GENDER
FROM T_EXTENSION_ALL_DATAS_SHOW T1 
INNER JOIN T_EXTENSION_ALL_DATAS_LOGIN T2 
ON (T1.SHOW_DATE=T2.LOGIN_DATE AND T1.EMAIL = T2.EMAIL);

查询结果:超时报错!! 

exception: org.apache.hadoop.hbase.ipc.CallTimeoutException: Call id=145561, waitTime=60008, rpcTimeout=60000

所以,大小表join的顺序很重要。要根据自己的业务场景选择。

我举的例子只是很粗的,phoenix join关联,还是要利用主键的优势。

将小表的查询结果,与大表的主键字段。进行ON条件关联。速度很快。

请参考官网:

http://phoenix.apache.org/joins.html

结论:大表要在前面。准确的说应该是结果集大小。

猜你喜欢

转载自blog.csdn.net/Cky079/article/details/83931341