【impala建表】kudu的表必须有主键,作为分区的字段需排在其他字段前面。

【range分区】(不推荐)
CREATE TABLE KUDU_WATER_HISTORY ( 
id STRING, 
year INT,
device STRING,
reading INT,
time STRING,
PRIMARY KEY (id,year) 
) PARTITION BY RANGE (year)

PARTITION VALUES < 2017, 
PARTITION 2017 <= VALUES < 2018, 
PARTITION 2018 <= VALUES
)
STORED AS KUDU 
TBLPROPERTIES('kudu.master_addresses' = '10.10.30.200:7051');

【hash分区】(不推荐)
CREATE TABLE KUDU_WATER_HISTORY_PARTITION_BY_ID ( 
id STRING, 
year INT,
device STRING,
reading INT,
time STRING,
PRIMARY KEY (id) 
) PARTITION BY HASH (id) PARTITIONS 4
STORED AS KUDU 
TBLPROPERTIES('kudu.master_addresses' = '10.10.30.200:7051');

【hash range混合分区】推荐是用混合分区方式
CREATE TABLE KUDU_WATER_HISTORY (
id STRING,
year INT,
device STRING,
reading INT,
time STRING,
PRIMARY KEY (id,device,year)
) PARTITION BY HASH (device) PARTITIONS 3,
RANGE (year)
(
PARTITION VALUE = 2016,
PARTITION VALUE = 2017,
PARTITION VALUE = 2018,
PARTITION VALUE = 2019
)
STORED AS KUDU
TBLPROPERTIES('kudu.master_addresses' = '10.10.30.200:7051');

CREATE TABLE DEVICE_KUDU (
id STRING,
device STRING,
name STRING,
orgId INT,
PRIMARY KEY (id)
) PARTITION BY HASH (id) PARTITIONS 4
STORED AS KUDU
TBLPROPERTIES('kudu.master_addresses' = '10.10.30.200:7051');

【增加分区】
ALTER TABLE KUDU_WATER_HISTORY ADD RANGE PARTITION VALUE = 2020;

【查询语句】

select
T_3C75F1.`device`,
year(T_3C75F1.`time`),
month(T_3C75F1.`time`),
sum(T_3C75F1.`reading`),
count(1)
from (select DEVICE_KUDU.device,reading,to_timestamp(time,'yyyy-MM-dd HH:mm:ss') as time from KUDU_WATER_HISTORY,DEVICE_KUDU where KUDU_WATER_HISTORY.device=DEVICE_KUDU.device) as `T_3C75F1`
group by
T_3C75F1.`device`,
year(T_3C75F1.`time`),
month(T_3C75F1.`time`);

耗时:DEVICE_KUDU表50条记录,KUDU_WATER_HISTORY表1亿条记录,执行上面的查询语句耗时12秒。同样的数据量和查询方式,比impala+hdfs+parquet快10倍。

【跨数据源的查询】

device表的数据存储在hdfs中,抄表读数的数据存储在kudu中。分别在impala中创建对应的表

explain select
T_3C75F1.`deviceid`,
year(T_3C75F1.`time`),
month(T_3C75F1.`time`),
sum(T_3C75F1.`reading`),
count(1)
from (select device_parquet.deviceid,reading,to_timestamp(time,'yyyy-MM-dd HH:mm:ss') as time from KUDU_WATER_HISTORY,device_parquet where KUDU_WATER_HISTORY.device=device_parquet.deviceid) as `T_3C75F1`
group by
T_3C75F1.`deviceid`,
year(T_3C75F1.`time`),
month(T_3C75F1.`time`);

执行上面的语句,查看执行计划

+-----------------------------------------------------------------------------------------------------------------------------------------+
| Explain String |
+-----------------------------------------------------------------------------------------------------------------------------------------+
| Per-Host Resource Reservation: Memory=.00MB |
| Per-Host Resource Estimates: Memory=.25GB |
| WARNING: The following tables are missing relevant table and/or column statistics. |
| default.device_parquet, default.kudu_water_history |
| |
| PLAN-ROOT SINK |
| | |
| :EXCHANGE [UNPARTITIONED] |
| | |
| :AGGREGATE [FINALIZE] |
| | output: sum:merge(T_3C75F1.reading), count:merge() |
| | group by: T_3C75F1.deviceid, year(T_3C75F1.time), month(T_3C75F1.time) |
| | |
| :EXCHANGE [HASH(T_3C75F1.deviceid,year(T_3C75F1.time),month(T_3C75F1.time))] |
| | |
| :AGGREGATE [STREAMING] |
| | output: sum(reading), count() |
| | group by: device_parquet.deviceid, year(to_timestamp(time, 'yyyy-MM-dd HH:mm:ss')), month(to_timestamp(time, 'yyyy-MM-dd HH:mm:ss')) |
| | |
| :HASH JOIN [INNER JOIN, BROADCAST] |
| | hash predicates: KUDU_WATER_HISTORY.device = device_parquet.deviceid |
| | |
| |--:EXCHANGE [BROADCAST] |
| | | |
| | :SCAN HDFS [default.device_parquet] |
| | partitions=/ files= size=.00KB |
| | |
| :SCAN KUDU [default.kudu_water_history] |
+-----------------------------------------------------------------------------------------------------------------------------------------+

能看到00:SCAN KUDU和01:SCAN HDFS,分别从kudu和hdfs中查询数据。

impala+kudu的更多相关文章

  1. 【大数据之数据仓库】kudu性能测试报告分析

    本文由  网易云发布. 这篇博文主要的内容不是分析说明kudu的性能指标情况,而是分析为什么kudu的scan性能会这么龊!当初对外宣传可是加了各种 逆天黑科技的呀:列独立存储.bloom filte ...

  2. Kudu – 在快数据上的进行快分析的存储

    转自: http://www.tuicool.com/articles/nmYf2uf Cloudera Impala Kudu – 在快数据上的进行快分析的存储     Kudu,对应中文的含义应该 ...

  3. Apache Kudu: Hadoop生态系统的新成员实现对快速数据的快速分析

    A new addition to the open source Apache Hadoop ecosystem, Apache Kudu completes Hadoop's storage la ...

  4. Apache Arrow 内存数据

    1.概述 Apache Arrow 是 Apache 基金会全新孵化的一个顶级项目.它设计的目的在于作为一个跨平台的数据层,来加快大数据分析项目的运行速度. 2.内容 现在大数据处理模型很多,用户在应 ...

  5. [转]CDH QuickStart VM基本使用

    https://blog.csdn.net/wiborgite/article/details/78731944 https://www.cnblogs.com/harrychinese/p/big_ ...

  6. 【原创】大叔经验分享(7)创建hive表时格式如何选择

    常用格式 textfile 需要定义分隔符,占用空间大,读写效率最低,非常容易发生冲突(分隔符)的一种格式,基本上只有需要导入数据的时候才会使用,比如导入csv文件: ROW FORMAT DELIM ...

  7. 大数据和Hadoop时代的维度建模和Kimball数据集市

    小结: 1. Hadoop 文件系统中的存储是不可变的,换句话说,只能插入和追加记录,不能修改数据.如果你熟悉的是关系型数据仓库,这看起来可能有点奇怪.但是从内部机制看,数据库是以类似的机制工作,在一 ...

  8. 记一次Apache Carbondata PR的经历

     前言 前段时间有幸接触到Apache Carbondata,试用过程中发现了一个小小的问题,并且又很快的定位到了问题.然后在社区群里反映了下,负责人问愿不愿意提个JIRA,PR,然后我在没有任何开源 ...

  9. cdh搭建仓库

    搭建内部仓库使用yum安装cm Creating a Permanent Internal Repository 1,安装httpd yum install httpd 删除/etc/httpd/co ...

随机推荐

  1. .NET-DataColumn.DataType 属性

    public DataTable MakeDataTable(){ DataTable myTable; DataRow myNewRow; // Create a new DataTable. my ...

  2. 关于iOS上使用WWW引起的内存泄漏的临时解决方案

    原地址:http://www.unity蛮牛.com/thread-16493-1-1.html 目前,在的4.3.3.和4.3.4版本中存在一个iOS平台上的内存泄漏问题,即当使用WWW来下载和加载 ...

  3. openerp 6.0.2库存业务

    一.复式库存(Double-Entry Stock Management)和库存移动(Stock Move) OpenERP的库存管理采取了独特的复式库存(Double-Entry Stock Man ...

  4. Android自动化测试之MonkeyRunner录制和回放脚本

    Android自动化测试之MonkeyRunner录制和回放脚本(十一) 分类: 自动化测试 Android自动化 2013-02-22 10:57 7346人阅读 评论(2) 收藏 举报 andro ...

  5. Linux-Nginx-关闭进程

    当然就仅仅是介绍一条命令了,就这么简单. nginx默认创建一个工作进程 root 2713 1 0 07:56 ? 00:00:00 nginx: master process ../sbin/ng ...

  6. SCRUM敏捷开发规则一栏

    敏捷.敏捷开发这类词近期非常火!敏捷开发,就是指可以在需求迅速变化的情况下高速开发软件.我们接触最多的和敏捷相关的名词是:极限编程(XP).结对编程.測试驱动开发(TDD)等. 敏捷建模(Agile ...

  7. LaTeX 在编译时出现 File ended while scanning use of \@writefile错误

    LaTeX -在修改论文过程中,重新编译时.出现了File ended while scanning use of \@writefile错误,如以下所示: 问题出现的原因: 因为aux文件没有完整输 ...

  8. jquery 设置checkbox选中 和获取选中值

    经常用到经常网上搜,这次写下来. 1,设置选中: $('#nrowid').prop('checked', false); 2,取选中项的值: $('#nrowid').prop("chec ...

  9. django源码分析---- Model类型&Field类型

    djiango在数据库这方式自己实现了orm(object relationship mapping 对象关系模型映射).这个主要是用到python 元类这一 项python中的高级技术来实现的. c ...

  10. Android错误之--activity_main cannot be resolved or is not a field

    一般在copy别人的项目中会easy出现本错误,截图例如以下: