过去几天我一直在研究Hive分区。这是我创建的一个例子: -
表 - 事务(非分区管理表):
CREATE TABLE TRANSACTIONS (
txnno INT,
txndate STRING,
custid INT,
amount DOUBLE,
category STRING,
product STRING,
city STRING,
state STRING,
spendby STRING)
以',';
结尾的行格式分隔字段使用load命令加载此表中的数据。
按如下方式创建另一个表: -
表 - Txnrecordsbycat(分区管理表):
CREATE TABLE TXNRECORDSBYCAT(txnno INT, txndate STRING, custno INT, amount DOUBLE, product STRING, city STRING, state STRING, spendby STRING)
按(STRING类别)分区 由(州)INTO 10桶组成 行格式分隔的字段以',';
结尾使用以下查询将Transactions表中的数据加载到Txnrecordsbycat表。
FROM TRANSACTIONS txn INSERT OVERWRITE TABLE TXNRECORDSBYCAT PARTITION(category) select txn.txnno,txn.txndate,txn.custid, txn.amount, txn.product,txn.city, txn.state, txn.spendby,txn.category DISTRIBUTE BY CATEGORY;
现在,只要我从事务中触发select * *等简单的队列并从trxrecordsbycat中选择*,我就可以看到我的查询与非分区表相比在分区表上有效(即占用更少的执行时间)。
但是,只要我的查询变得有点复杂,例如从表中选择count(*),查询就会在分区表上变得不那么有效(即花费更多时间)。
有什么想法可能会发生这种情况吗? 非常感谢您的帮助。