Kudu 基本操作,详细操作讲解

          kudu与Apache Impala紧密集成,允许您使用Impala使用Impala的SQL语法从Kudu平板中插入、查询、更新和删除数据,以替代使用Kudu API来构建自定义的Kudu应用程序。此外,您还可以使用JDBC或ODBC将使用任何语言、框架或商业智能工具编写的现有或新应用程序连接到Kudu数据,使用Impala作为代理。

 

内部和外部Impala表

使用Impala创建新的Kudu表时,可以将表创建为内部表或外部表。

内部

一个内部表由Impala管理,当您从Impala中删除它时,数据和表确实会被删除。使用Impala创建新表时,它通常是内部表。

外部

外部表(由CREATE EXTERNAL TABLE)不是由Impala管理的,删除这样的表不会从它的源位置(这里是Kudu)删除该表。相反,它只删除了Impala和Kudu之间的映射。这是Kudu提供的语法中用于将现有表映射到Impala的模式。

见Impala文件有关内部表和外部表的详细信息。

在Impala中查询现有的Kudu表

通过KuduAPI或其他集成创建的表(如ApacheSPark)在Impala中不会自动可见。要查询它们,您必须首先在Impala中创建一个外部表,以便将Kudu表映射到Impala数据库中:

CREATE EXTERNAL TABLE my_mapping_table
STORED AS KUDU
TBLPROPERTIES ('kudu.table_name' = 'my_kudu_table'
);

从Impala中创建一个新的Kudu表

CREATE TABLE my_first_table
(id BIGINT,name STRING,PRIMARY KEY(id)
)
PARTITION BY HASH PARTITIONS 16
STORED AS KUDU;

 

CREATE TABLE语句中,必须首先列出构成主键的列。此外,主键列被隐式标记。NOT NULL.

默认情况下,通过Impala创建的Kudu表使用Tablet复制因子3,如下所示,其中n是要使用的复制因子,复制因子必须是奇数。:

TBLPROPERTIES ('kudu.num_tablet_replicas' = 'n')

注:使用ALTER TABLE更改 kudu.num_Tablet_Copicas 表属性目前没有任何效果。

指定表分区

        每个表分为由一个或多个表服务器提供的表。理想情况下, tablets should split a table’s data 平等地拆分表的数据。Kudu目前没有自动(或手动)拆分预先存在的 tablet的机制。在实现此功能之前,您必须在创建表时指定分区。在设计表格架构时,请考虑使用主键,您可以将表格分割成以相似速率增长的分区。PARTITION BY使用Impala创建表时,可以使用子句指定分区:
 

Impala关键字,如group,在没有在关键字意义上使用时,用反勾号  `  字符括起来。

 

CREATE TABLE cust_behavior (_id BIGINT PRIMARY KEY,salary STRING,edu_level INT,usergender STRING,`group` STRING,city STRING,postcode STRING,last_purchase_price FLOAT,last_purchase_date BIGINT,category STRING,sku STRING,rating INT,fulfilled_date BIGINT
)
PARTITION BY RANGE (_id)
(PARTITION VALUES < 1439560049342,PARTITION 1439560049342 <= VALUES < 1439566253755,PARTITION 1439566253755 <= VALUES < 1439572458168,PARTITION 1439572458168 <= VALUES < 1439578662581,PARTITION 1439578662581 <= VALUES < 1439584866994,PARTITION 1439584866994 <= VALUES < 1439591071407,PARTITION 1439591071407 <= VALUES
)
STORED AS KUDU;

如果有多个主键列,则可以使用元组语法指定分区界限:('va',1), ('ab',2),表达式必须是有效的JSON。

 

Impala数据库和Kudu

每个Impala表都包含在一个名为数据库..默认数据库称为default,用户可以根据需要创建和删除其他数据库。

当从Impala内部创建托管kudu表时,相应的kudu表将被命名为my_database::table_name.

Kudu表不支持Impala关键字

创建Kudu表时不支持下列Impala关键字:PARTITIONED - LOCATION - ROWFORMAT

优化SQL谓词的性能

如果WHERE子句包括与运算符的比较。=<=, '\<', '\>', >=BETWEEN,或IN,Kudu直接评估条件,只返回相关结果。这提供了最佳的性能,因为Kudu只向Impala返回相关的结果。用于谓词!=LIKE或Impala支持的任何其他谓词类型,Kudu不直接计算谓词,而是将所有结果返回Impala,并依赖Impala计算其余谓词并相应地过滤结果。这可能会导致性能上的差异,这取决于评估之前和之后的结果集的增量。WHERE条款。

分区表

根据主键列上的分区模式,将表划分为平板。每个平板电脑至少由一个平板服务器提供服务。理想情况下,表应该被分割成平板,这些平板电脑分布在多个平板服务器上,以最大限度地实现并行操作。您使用的分区架构的详细信息将完全取决于您存储的数据类型以及如何访问它。有关Kudu模式设计的完整讨论,请参见Schema Design.

在创建表之后,kudu目前没有拆分或合并平板电脑的机制。创建表时,必须为其提供分区架构。在设计表时,请考虑使用主键,这将允许您将表划分为以类似速度增长的平板电脑。

您可以使用Impala的PARTITION BY关键字,它支持RANGEHASH..分区方案可以包含零或多个。HASH定义,后面是可选的RANGE定义。这个RANGE定义可以引用一个或多个主键列。例basic和advanced分区如下所示。

 

PARTITION BY RANGE

可以为一个或多个主键列指定范围分区。Kudu中的范围分区允许根据所选分区键的特定值或值范围分割表。这允许您在写操作中平衡并行性和扫描效率。

假设您有一个有列的表statename,和purchase_count..下面的示例创建50台平板电脑,每个美国州一台。

 

单调递增值

如果在值单调增加的列上按范围进行分区,那么最后一块平板将比其他平板大得多。此外,插入的所有数据都将一次写入单个平板,从而限制了数据摄入的可伸缩性。在这种情况下,考虑按HASH而不是,或除了,RANGE.

CREATE TABLE customers (state STRING,name STRING,purchase_count int,PRIMARY KEY (state, name)
)
PARTITION BY RANGE (state)
(PARTITION VALUE = 'al',PARTITION VALUE = 'ak',PARTITION VALUE = 'ar',-- ... etc ...PARTITION VALUE = 'wv',PARTITION VALUE = 'wy'
)
STORED AS KUDU;

PARTITION BY HASH

您可以通过散列将其分发到特定数量的“桶”中,而不是通过显式范围或与范围分布相结合的方式分发。您可以指定要分区的主键列,以及要使用的桶数。行是通过散列指定的键列来分布的。假设被散列的值本身没有显着的倾斜,这将有助于在桶之间均匀地分布数据。

可以指定多个定义,也可以指定使用复合主键的定义。但是,不能在多个散列定义中提及一列。考虑两列,ab: *  HASH(a)HASH(b) *  HASH(a,b) *  HASH(a), HASH(a,b)

 PARTITION BY HASH没有指定列是通过散列所有主键列来创建所需数量的桶的快捷方式。

如果主键值在其域中分布均匀,并且没有明显的数据倾斜(例如时间戳或串行ID),则哈希分区是一种合理的方法。

下面的示例通过散列idsku柱子。这在所有16台平板电脑上都有传播。在本例中,对sku值可能需要读取所有16块平板电脑,因此这可能不是此表的最佳模式。看见高级分区作为一个扩展的例子。

CREATE TABLE cust_behavior (id BIGINT,sku STRING,salary STRING,edu_level INT,usergender STRING,`group` STRING,city STRING,postcode STRING,last_purchase_price FLOAT,last_purchase_date BIGINT,category STRING,rating INT,fulfilled_date BIGINT,PRIMARY KEY (id, sku)
)
PARTITION BY HASH PARTITIONS 16
STORED AS KUDU;

更多参考官网:https://kudu.apache.org/docs/kudu_impala_integration.html#_specifying_tablet_partitioning

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/509994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++ 随机分布

uniform_distribution 模板定义了可以产生随机浮点值的分布对象类型&#xff0c;默认是 double 类型。默认构造函数创建的是标准正态分布&#xff0c;因此期望是 0&#xff0c;方差是 1.0: normal_distribution<double> disX(0, 1.0); uniform_real_distribution 类模板…

TCP的三次握手和四次挥手详解

为什么需要“三次握手” 在谢希仁著《计算机网络》第四版中讲“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端&#xff0c;因而产生错误”。在另一部经典的《计算机网络》一书中讲“三次握手”的目的是为了解决“网络中存在延迟的重复分组”的问题。…

NameNode所需配置,NameNode内存配置计算,NameNode与block关系

NameNode 所需大小&#xff0c;与Block大小&#xff0c;HDFS副本数均有关&#xff0c;计算方式如下&#xff1a; 例&#xff1a;bolck为256M,副本为3个&#xff0c;10台机器&#xff0c;每台4TB数据&#xff0c; Namenode需要的内存为&#xff1a; 10 * 4 * 1024 * 1024 MB …

Debug和Realease版本的区别

vs中的程序有debug和release两个版本&#xff0c;Debug通常称为调试版本&#xff0c;通过一系列编译选项的配合&#xff0c;编译的结果通常包含调试信息&#xff0c;而且不做任何优化&#xff0c;以为开发 人员提供强大的应用程序调试能力。而Release通常称为发布版本&#xff…

zabbix server is not running the information displayed may not be current

页面报错如下 查看日志提示 30037:20190710:193016.878 cannot start alert manager service: Cannot bind socket to "/var/run/zabbix/zabbix_server_alerter.sock": [13] Permission denied.30039:20190710:193016.879 server #30 started [preprocessing manage…

Arrays 工具类

package com.ajax;import java.util.*;public class Example10 {public static void main(String[] args){int[] arr{1,3,2,5,4};System.out.println("排序前:");printArray(arr);Arrays.sort(arr);System.out.println("排序后:");printArray(arr);int ind…

Ubuntu系统opencv4.4 opencv_contribute安装常见问题

安装 下载opencv4.0.1及contribute模块 https://github.com/opencv/opencv/releases/tag/4.0.1 https://github.com/opencv/opencv_contrib/releases/tag/4.0.1 更换国内源 使用 ubuntu 原生源下载速度&#xff0c;可替换为国内源&#xff0c;提升下载速度 备份 ubuntu 原生…

VS2010项目配置详解

首先看一下项目设置中可以使用的宏&#xff08;环境变量&#xff09;&#xff0c;常用的有&#xff1a; ConfigurationName 配置名字&#xff0c;通常是Debug或者Release IntDir 编译器使用的中间目录&#xff0c;产出obj文件 OutDir 链接器使用的输出目录 ProjectDir 项目目录…

Centos7 下 zabbix服务安装与部署,linux监控服务

客户端安装参考&#xff1a;https://mp.csdn.net/postedit/95475740 安装Zabbix 关闭 SeLinux 临时关闭 setenforce 0 永久关闭 vi /etc/selinux/config 关闭防火墙 临时关闭 systemctl stop firewalld.service 永久关闭 systemctl disable firewalld.service安装基础环…

qt安装

sudo apt-get update sudo apt-get install qt4* sudo apt-get install qtcreator

Zabbix 安装agent

服务端安装参考&#xff1a;https://datamining.blog.csdn.net/article/details/95362947 安装前首先添加对应的yum repository rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm yum install -y zabbix-agent 修改配置文件 …

Bootstrap 导入js文件,浏览器找不到文件问题

html导入文件是用href属性来导入&#xff0c;js利用src属性导入&#xff0c;都可以用相对路径来导入文件&#xff0c;只要确保相对路径正确不会找不到。 绝对路径&#xff1a;是从盘符开始的路径&#xff0c;形如C:\windo绝对路径&#xff1a;是从盘符开始的路径&#xff0c;形…

c/c++ 英语专业词汇表

运算符与表达式&#xff1a; 1.constant 常量 2. variable 变量 3. identify 标识符 4. keywords 关键字 5. sign 符号 6. operator 运算符 7. statement语句 8. syntax 语法 9. expression 表达式 10. initialition 初始化 11. number format 数据格式 12 declara…

ubuntu之间传文件

在文件电脑上操作如下 sftp 用户名ip地址 put 路径/文件名 另一台电脑的home文件夹就用这个文件了

windows 安装 zabbix agent 客户端

下载window客户端 https://assets.zabbix.com/downloads/3.4.0/zabbix_agents_3.4.0.win.zip 在C盘建立目录 C:/zabbix &#xff0c;并解压下载文件 修改配置参数 LogFilec:\zabbix\zabbix.log Server服务端ip ServerActive服务端ip Hostnameinstance-2c7t7v&#xff08;右…

C++面试题(一)

谈谈你所做的项目对网络编程熟悉吗&#xff1f;什么是TCP三次握手&#xff1f;那三次握手做了什么事情&#xff0c;有什么作用&#xff1f;UDP丢包的处理&#xff1f;TCP为什么能实现可靠传输&#xff1f;滑动窗口具体是怎么实现的&#xff1f;你觉得你对哪一些技术最擅长&…

Spark-shell 脚本批量执行命令,命令行批量执行命令

spark-shell 执行脚本&#xff0c;批量执行命令 #!/bin/bashsource /etc/profileexec spark-shell --name spark-sql-test --executor-cores 8 --executor-memory 8g --num-executors 1 --conf spark.cleaner.ttl240000 <<!EOF var startTime System.currentTimeM…

vins学习

1.https://cggos.github.io/vinsmono-note-cg.html 2.https://github.com/cggos/vins_mono_cg/blob/master/docs/vinsmono_note_cg.pdf

TCP滑动窗口机制

TCP通过滑动窗口机制检测丢包&#xff0c;并在丢包发生时调整数据传输速率。滑动窗口机制利用数据接收端的接收窗口来控制数据流。 接收窗口值由数据接收端指定&#xff0c;以字节数形式存储于TCP报文头&#xff0c;并告知传输设备有多少数据将会存储在TCP缓冲区。缓冲区就是数…

NLP文本相似度 - LCS(最长公共子序列)java代码

LCS是Longest Common Subsequence的缩写&#xff0c;即最长公共子序列。一个序列&#xff0c;如果是两个或多个已知序列的子序列&#xff0c;且是所有子序列中最长的&#xff0c;则为最长公共子序列。 比如&#xff0c;对于char x[]"aabcd";有顺序且相互相邻的aabc是…