背景: 这是实际项目中遇到的实例,主要涉及到rowkey查询,索引查询 以及主键primary key。问题是在sql使用order by 查询 时遇到的,以下为个人浅见,仅供参考。
内容:
Hbase中存在数据表如下:
CREATE TABLE IF NOT EXISTS Test.AppLog (
UserId INTEGER NOT NULL,
Number INTEGER NOT NULL,
AcType INTEGER NOT NULL,
Upserttime DATE NOT NULL,
UploadCount INTEGER NULL,
Token VARCHAR(50) NULL,
IsSuccess BOOLEAN NULL,
Data VARCHAR NULL,
ErrorMessage VARCHAR NULL,
CONSTRAINT pk_TestAppLog
PRIMARY KEY (UserId, Number, AcType, Upserttime)
) default_column_family='apl', SALT_BUCKETS=8;
建立表相应的索引
CREATE INDEX IF NOT EXISTS idx_TestAppLog_Upserttime ON Test.AppLog (Upserttime)
INCLUDE (UserId, Number, AcType) SALT_BUCKETS=8;
针对上表,当我们使用select * 查询时,是走主键(rowkey)查询的。
eg:
explain select * from Test.AppLog
where userid = 10

在Phoenix中,通过SQL查询HBase时,使用`SELECT *`通常会走主键(rowkey)查询,但带有特定字段和`ORDER BY`的查询可能走索引。如果`ORDER BY`字段与主键和索引相同,Phoenix会默认使用索引。解决方法是确保查询字段与索引包含字段不完全一致,或者避免使用`ORDER BY`索引字段。

1922

被折叠的 条评论
为什么被折叠?



