一、数据库操作

--描述表
DESCRIBE tabel_name;--查看分区情况
SHOW PARTITIONS table_name;--查看当前使用数据库
SELECT current_database();--查看建表语句
SHOW CREATE TABLE table_name

创建数据库

--impala创建数据库与hive一样,create database db_name,
--但是这个数据库只是一个impala端的namespace,
--kudu官网中没有提到数据库的概念,猜测可能是没有这个概念
--impala中创建表的时候比如在test数据库中创建table_test对应在kudu中为 test:table_test--创建数据库
CREATE DATABASE IF NOT EXISTS POC_TEST;--进入数据库
use POC_TEST;

二、创建表

创建外部表,内部表

--创建外部表
--假设已经通过Java client等其他方式在kudu中创建了某个表,
--要想对该表进行操作,需要在impala中创建外部表,将其映射到impala当中,例如:
CREATE EXTERNAL TABLE my_mapping_tableSTORED AS KUDUTBLPROPERTIES('kudu.table_name' = 'my_kudu_table');--创建内部表
--假设要通过impala创建一个新的kudu表,需要在impala中创建一个内部表,例如:
CREATE TABLE  testinkudu(…………)partition  by hash  partitions  8STORED AS  KUDU [AS SELECT * FROM OTHER_TABLE];--注:创建内部表时,类似partition by ………stored as kudu的分区声明语句是必须的。
--无论是 通过client创建的kudu表还是通过impala创建的表,
--都可以在master节点的UI界面的tables选项中查看

Kudu中的分区方法主要有两种:partition by hash和partition by range

(1) Hash分区

-- 基于hash的分区方法的基本原理是:基于primary key的hash值将每个row划分到相应的tablet当中,
-- 分区的个数即tablet的个数必须在创建表语句中指定
-- 如果未指定基于某个字段的hash值进行分区,默认以主键的hash值进行分区--主键两个字段,分区字段未指定 hash分区
create table kudu_first_table(id int,name string,age int,gender string,primary key(id,name)
)
partition by hash partitions 4
stored as kudu;--主键一个字段,分区字段未指定 hash分区
CREATE TABLE my_first_table
(id BIGINT,name STRING,PRIMARY KEY(id)
)
PARTITION BY HASH PARTITIONS 16
STORED AS KUDU;--表不存在则创建, 主键一个字段, 分区字段未指定 hash分区
CREATE TABLE IF NOT EXISTS POC_TEST.sdc(id string,name string,PRIMARY KEY (id)
)
PARTITION BY HASH(id) PARTITIONS 2
STORED AS KUDU;
TBLPROPERTIES('kudu.master_addresses'='master.msxf.hadoop:7051','kudu.num_tablet_replicas' = '1');--主键两个字段,分区字段指定,hash分区
create table specify_partition_column(id int,name string,age int,gender string,primary key(id,name)
) partition by hash(id) partitions 3
stored as kudu;--主键两个字段,分区字段指定一个字段,hash分区
create table specify_partition_one_column(id int,name string,age int,gender string,primary key(id)
) partition by hash(id) partitions 3
stored as kudu;--区别:未指定分区字段时,其分区字段默认是主键,若主键有两个列则分区字段为两个,指定分区字段时,
--   需要分区列是主键的子集;否则会报错「 Only key columns can be used in PARTITION BY」
--不指定分区:表依然会创建,但是只有一个分区,会提示「Unpartitioned Kudu tables are ineff

(2) range分区:主要针对时间进行range分区

-- 基于range的分区方法的基本原理是:基于指定主键的取值范围将每个row划分到相应的tablet当中,
-- 用于range分区的主键以及各个取值范围都必须在建表语句中声明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;--优势:可以根据数据的具体情况建立分区,比如:建立2017年之前的分区,2017-2018,2018-2019,2019-2020,2020-2021,。。。
--劣势:如果使用单级range分区的话,容易产生数据热点问题(可混合hash分区使用)、
--    在range分区中,如果有不止一个字段作为分区字段的话也可以,语法暂时不清楚;
--    如果插入一条主键的值不落在任何range区间时会插入失败,并报错

(3) 混合分区

create table tw_details4(user_id string,event_date string,event string,properties string,customer_id int,project_id int,primary key(event_date,event,user_id)) partition by hash(user_id) partitions 3, range(event_date)(partition values < '2017-01-01',partition '2017-01-01' <= values < '2018-01-01',partition '2018-01-01' <= values < '2019-01-01',partition '2019-01-01' <= values < '2020-01-01',partition '2020-01-01' <= values < '2021-01-01'
) stored as kudu;--优势:可以根据时间进行检索,来减少需要scan的tablet,插入的时候不会只有一个tabletserver产生热点

(4) CTAS方式创建表

CREATE TABLE kudu_ti_event_fact_copy primary key(user_id,event_date)partition by hash(user_id) partitions 3stored as kudu
as select user_id,event_date,properties from auto3.ti_event_fact

删除表和删除数据库

DROP TABLE [表名];DROP DATABASE [数据库名];

删除试图

DROP VIEW [视图名];

三、表操作

插入(insert)

--单行插入:
insert into my_first_table(time, uid, event_id, action_value) values(123,"v2", "123", 2)
insert into table1 values(v1,v2,v3)-- 多行插入:
INSERT INTO my_first_table(time, uid, event_id, action_value) VALUES (1, "john"), (2, "jane"), (3, "jim");-- 批量插入(Batch Insert)
--从 Impala 和 Kudu 的角度来看,通常表现最好的方法通常是使用 Impala 中的 SELECT FROM 语句导入数据
INSERT INTO my_kudu_table SELECT * FROM legacy_data_import_table;
insert into table1 select v1,v2,v3 from table2;

插入(upsert)

--根据主键判定,若已经存在则更新,若不存在则插入
upsert into table1 values(v1,v2,v3)

更新(update)

--单行更新
UPDATE my_first_table SET name="bob" where id = 3;--批量更新
UPDATE my_first_table SET name="bob" where id > 2;--where条件后面的column不是主键也可以,但是更改的范围会扩大
--主键中不支持更改,只能删除后重新添加
UPDATE kudu_first_table set age = 32 where id= 2;
UPDATE kudu_first_table set age = 31 where gender= 'female';

查询操作

--获取某一天的时间(时间类型转string类型,在截取时间)
select substr(cast(CREATE_DATE as string),1,10) from CBEE_ELIST WHERE substr(cast(CREATE_DATE as string),1,10) = '2001-02-01'

删除(delete)

DELETE FROM my_first_table WHERE id < 3;

更改表

--修改表名,修改的只是表在impala中的映射名alter table kudu_ti_event_fact_copy rename to kudu_ti_event_fact_copy_rename;--修改kudu存储的表名,但是不会改变在impala端的映射表名,也就是在impala中依然访问更改之前的表名ALTER TABLE kudu_ti_event_fact_copy_renameSET TBLPROPERTIES('kudu.table_name' = 'kudu_ti_event_fact_copy');--添加列alter table kudu_ti_event_fact_copy_rename add columns(method string,time_stamp string);--删除列ALTER table kudu_ti_event_fact_copy_rename drop column method;--删除分区ALTER TABLE range_partition_table DROP RANGE PARTITION VALUES < '2017-01-01';--添加分区alter table range_partition_table add range partition values < '2017-01-01';

修改某个字段属性

alter table subsidy_targets  add columns(focus_amount_01 DECIMAL(17,2) comment "递延收益余额期末");update subsidy_targets set focus_amount_01=cast(focus_amount as DECIMAL(17,2) )ALTER table subsidy_targets  drop column focus_amount;ALTER table  subsidy_targets  change focus_amount_01 focus_amount DECIMAL(17,2)

文章参考:https://fiend.blog.csdn.net/article/details/105966013

Kudu之SQL操作(KUDUImpala基本操作)相关推荐

  1. 14、ORACLE下的基本SQL操作

    ORACLE下的基本SQL操作 1.获取表字段 select * from user_tab_columns where Table_Name='用户表' order by column_name 2 ...

  2. 数据库系统实验8 SQL语言-存储过程基本操作

    数据库实验8 SQL语言-存储过程基本操作 一.实验环境: ​ MYSQL WORKBENCH 二.实验内容与完成情况: (逐题给出相应的SQL语句及执行结果,SQL语句必须能够拷贝,实验结果可截图: ...

  3. python 数据库支持sql_Python 对数据库进行SQL操作

    实现方法 1.导入依赖库 主要是导入pymysql库,用于import pymysql 2.连接数据库 建立数据库连接,准备数据连接光标. sql_1 = "insert user valu ...

  4. pandas使用to_sql方法将dataframe注册为数据库表进行数据整合和数据清洗并不对比SQL操作和dataframe操作

    pandas使用to_sql方法将dataframe注册为数据库表进行数据整合和数据清洗并不对比SQL操作和dataframe操作 SQLite 是一个软件库,实现了自给自足的.无服务器的.零配置的. ...

  5. SQL Server数据库基本操作(一)

    SQL Server数据库基本操作 基本表的定义.删除与修改 1.创建基本表 2.修改基本表 3.删除基本表 基本表的定义.删除与修改 创建数据库 CREATE DATABASE STUDENT 1. ...

  6. 一些比较有用的SQL操作,2011最新整理

    一些比较有用的SQL操作,2011最新整理,SQL批量删除与批量插入,批量删除:wei yuan chuang DELETE FROM MyTable WHERE ID IN (1,2); 批量插入 ...

  7. java操作sql数据库_java-JDBC连接数据库并进行SQL操作

    packagecn.bruce.MySql;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSe ...

  8. 使用ArcSDE SQL操作怎么获得新对象的objectid、GUID

    arcgis9.3.1 现在大家很喜欢使用ArcSDE的SQL操作,这种方式在特殊的环境要求下显得比较方便,那么使用SQL操作最多的是读和写,而写最多的就是新建一个对象,那么翻译成SQL语言就是使用i ...

  9. ArcSDE10.1配置Oracle 监听器来使用SQL操作ST_Geometry(个人改动版)

    发了两天的时间来解决配置Oracle 监听器来使用SQL操作ST_Geometry的配置,网上搜索一大片,结果真正找到的只有方法可用,下面把这个方法我个人在总结下. ArcSDE10.1配置Oracl ...

  10. 怎么配置 Oracle 侦听器来使用SQL操作ST_Geometry

    关于这个内容,其实从ArcSDE9.2推出ST_Geometry就让用户感到很有吸引力,而且特别是在ArcSDE9.3之后,用户使用SQL操作ST_geometry越来越多,但是在配置Oracle监听 ...

最新文章

  1. 方法 retrun 异步的值,创建一个变量直接等于一个异步方法返回的值
  2. eclipse中update maven工程后,项目JDK变为1.6
  3. 数据如何从HBase读到MR
  4. 推荐 | 有三AI生态新的资源干货集中营,好书好工具好内容等你来淘
  5. 在linux下,如何在C语言中使用正则表达式
  6. python形参中传入两个实参_认识Python函数的两个概念:形参与实参(16)
  7. Java LinkedList对象的clone()方法和示例
  8. 全网最全的Numpy开发入门教程(详细案例版)
  9. 第三周作业2——效能测试
  10. 基于Session的认证方式_实现授权功能_Spring Security OAuth2.0认证授权---springcloud工作笔记118
  11. 【CSS】虎躯一震!flex=1 和 flex-grow=1 竟然不一样!
  12. 删库跑路是程序员最后的倔强?
  13. Kubernetes 小白学习笔记(24)--kubernetes的运维-管理Service
  14. 3810.最长连续休息时间-AcWing题库
  15. 计算机cad知识,计算机与Cad制图知识点.doc
  16. Scratch编程与数学:会编程的孩子是怎样解奥数题的?
  17. 手机投屏不是全屏怎么办_一招搞定手机投屏不是全屏问题,手机投屏自适应全屏...
  18. 高德地图E/libEGL: call to OpenGL ES API with no current context (logged once per thread)
  19. 暖心的坚果 Pro 3发布会,Smartisan OS亮点颇多
  20. java反射中method类中的invoke方法是做什么的,他有什么作用?

热门文章

  1. 设备管理策略:工厂中常见的维护方式
  2. Git错误--HTTP Basic: Access denied
  3. 跳槽感悟:明确自己的核心力
  4. GEE案例:利用两期高分辨率土地分类数据进行建成区对比
  5. 这一年对你有帮助的话,帮忙评个分,多谢亲
  6. 安卓右侧字母索引,带滑动气泡,仿微信
  7. python猫咪藏在哪个房间_操作了一把Python,我能叫出所有猫的名字!
  8. 图像识别学习笔记-1-针孔成像模型
  9. ArchLinux搭建高效便捷的平铺式桌面
  10. 4种css实现渐变色边框