zoukankan      html  css  js  c++  java
  • Hive的DDL(数据定义语言)操作

    数据库的DDL

    建库语法

    CREATE DATABASE [IF NOT EXISTS] database_name   [IF NOT EXISTS] --增强代码的健壮性  
    [COMMENT database_comment]                                      --这个库是干嘛的
    [LOCATION hdfs_path]                                            --你当前的库存储的hdfs路径
    [WITH DBPROPERTIES (property_name=property_value, ...)];        --一点用没有(鸡肋)
    

    切换数据库

    use 库名
    use db_hive2;
    

    create database db_hive
    comment 'this in my first db'
    with dbproperties('dbtype'='hive','owner'='haitun');
    create database db_hive2
    location '/db_hive2';
    
    create database db_hive3
    location '/dsadsadsasd';
    
    create database if not exists db_hive2
    location '/db_hive2';
    
    --在你不指定的location的情况下 默认在你的hdfs/user/hive/warehouse下创建一个以database_name.db名的文件夹 来当做库
    --在你指定location的情况下 拿最后一级目录当做库的名字
    

    drop database 库名
    drop database db_hive2;
    
    drop database if exists db_hive2; --加上 if exists 增加代码的健壮性
    
    drop database db_hive cascade; --强制删除 (当你库下面有表的时候) 慎用(只有你确定所有表都没用的时候)
    

    用户可以使用ALTER DATABASE命令为某个数据库的DBPROPERTIES设置键-值对属性值,来描述这个数据库的属性信息。数据库的其他元数据信息都是不可更改的,包括数据库名和数据库所在的目录位置。
    
    alter database db_hive set dbproperties('dbtype'='db');  --修改原来的属性
    alter database db_hive set dbproperties('createtime'='2020-08-19');  --增加原来的属性
    

    --展示所有的数据库
    show databases; 
    --模糊展示
    show databases like 'db_hive*'
    --描述数据库    --不会展示 库的属性 dbproperties
    desc database 库名
    desc database db_hive; 
    --描述数据库详情 --会展示 库的属性  dbproperties parameters
    desc database extended 库名;
    desc database extended db_hive;
    

    表的DDL

    创建表的语法

    CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name  --external表示创建的表是否为外部表
    [(col_name data_type [COMMENT col_comment], ...)]--列名--列的类型 --列的注释(列拿来干什么的)
    [COMMENT table_comment]                          --表的注释  这个表拿来干嘛的
    [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]   --分区表
    [CLUSTERED BY (col_name, col_name, ...)                            --分桶表
    [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]   --桶内分通字段,桶内以什么排序
    [
     ROW FORMAT DELIMITED                                            
        --这行数据分隔符
     [FIELDS TERMINATED BY char]                                    
        --字段分隔符
        -- songsong,bingbing_lili,xiao song:18_xiaoxiao song:19,hui long guan_beijing_10010 字段分隔符是 ','
        --有默认值  默认值是 ascii 码表  0001  ^A    ctrl+v  ctrl+a
     [COLLECTION ITEMS TERMINATED BY char]                           
        --集合(map array struct)分隔符
        --bingbing_lili xiao song:18_xiaoxiao song:19 hui long guan_beijing_10010 分隔符是'_'
        --有默认值  默认值是 ascii 码表  0010  ^B    ctrl+v  ctrl+b
     [MAP KEYS TERMINATED BY char] 
        --map的kv分隔符
        --xiao song:18   分隔符是 ':'
        --有默认值  默认值是 ascii 码表  0100  ^C    ctrl+v  ctrl+c
     [LINES TERMINATED BY char]
        --行分隔符   默认值是 '
    '
    ] 
    [STORED AS file_format]                 --当前创建的表存储格式
    [LOCATION hdfs_path]                    --当前表的hdf存储路径
    [TBLPROPERTIES (property_name=property_value, ...)]  --表的属性 这个用处比较大
    [AS select_statement]                   --根据查询结果创建一张表 包括表的结构和数据
    [LIKE table_name]                       --模仿一张表  只有表结构没有表的数据
    

    创建内部表(管理表)

    --1.直接创建
    create table student(
    	deptno int,
    	deptname string
    )
    row format delimited fidlds terminated by '	'; --记得指定分隔符
    --2.通过查询结果创建(记得指定分隔符)
    create table student2
    row format delimited fields terminated by '	'
    as select * from student;
    --3.不赋值数据,只复制结构和分隔符
    create table student3 like student;
    

    创建外部表

    外部表的含义:hive不掌握着表的数据生命周期,当hive删除外部表的时候,不会删除hdfs上的数据,只会删除元数据

    思考:如何通过sql删除外部表里的数据?

    1.修改表的属性,把外部表转换成内部表就可以
    注意:属性名和属性值要大写
    alter table table_name set tblproperties('EXTERNAL'='FALSE');
    
    create external table if not exists dept(
    deptno int,
    dname string,
    loc int
    )
    row format dilimited fields terminated by '	'
    location '/company/dept' 			--外部表最好写上存储位置,因为数据有可能在建表前存在
    

    外部表和内部表之间的转换

    通过设置表的tblpropertites里的属性来实现

    表是否为内部表还是外部表是由Table Parameters 里面的EXTERNAL属性来控制 包括TRUE和FALSE 都得大写
    --内部表转换成外部表
    alter table student4 set tblproperties('EXTERNAL'='TRUE');
    --外部表转成内部表
    alter table emp set tblproperties('EXTERNAL'='FALSE');
    

    --1.删除内部表
    drop table student;
    --2.删除外部表
    drop table student; --只能删除元数据,不能删除hdfs源数据 
    --3.清空表
    以下命令只能清空内部表,无法清空外部表
    truncate table student3 ;
    

    --改表名  会连同你的hdfs文件夹名字一起改掉
    alter table oldname rename to newname;
    --更新列  注意改的列的数据类型,只能由小往大改
    alter table stu2 change column 旧列名 新列名 数据类型;
    alter table stu2 change column id id int;
    alter table stu2 change column id ids bigint;
    alter table stu2 change column id idss bigint;
    --增加列
    alter table table_name add columns(weight double,money bigint);
    --替换列
    ALTER TABLE table_name REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)
    -- 替换之减少列  如果你想替换时候较少列 那么你减少后剩余部分 应该和之前字段 满足类型的大小关系
    alter table stu2 replace columns (id bigint , name string);
    -- 替换之增加列  增加部分可以没有类型大小的关系 ,如果有对应的部分则满足类型大小的对应关系
    alter table stu2 replace columns (id bigint , name string , height double, hair bigint);
    

    --展示库下面的所有表
    show tables;
    --描述表
    desc student;
    --描述表的详情
    desc formatted student;
    
  • 相关阅读:
    数组的复制
    二维数组的切片和索引
    一维数组的切片和索引
    is判断函数
    其他方式创建数组
    ndarray对象属性
    创建随机数组
    arange创建数组
    SmartBinding与kbmMW#3
    SmartBinding与kbmMW#2
  • 原文地址:https://www.cnblogs.com/traveller-hzq/p/14075449.html
Copyright © 2011-2022 走看看