zoukankan      html  css  js  c++  java
  • Hive数据定义

    数据定义

    创建数据库

    Hive不支持行级插入操作、更新操作和删除操作,也不支持事务。HiveQL和MySQL比较相似。

    创建Hive的数据库,数据库的文件目录名以.db结尾。

    CREATE DATABASE IF NOT EXISTS databasename;
    
    SHOW DATABASES LIKE 'H.*';
    

    可以通过以下命令来修改默认的位置:

    CREATE DATABASES databasename LOCATION 'path';
    

    查看数据库信息,会显示数据库文件目录位置路径

    DESCRIBE DATABASE databasename;
    

    创建表

    创建表,COMMENT信息,LOCATION存储位置,TBLPROPERTIES文档说明

    CREATE [EXTERNAL] TABLE [IF NOT EXSITS] tablename
    [(col_name date_type)]//列名和类型
    [COMMENT table_comment]//注释
    [PARTITIONED BY (col_name date_type,...)]//分区信息,文件夹
    [CLUSTER BY (cil_name,col_name)]//分桶,分文件
    [SORTED BY (col_name)]
    [ROW FORMAT row_format]//分隔信息
    [STORED BY file+format]//存储格式
    [LOCATION hdfs_path]//存储路径
    
    CREATE TABLE IF NO EXISTS mydb.employees (
        name        STRING COMMENT 'Employee name',
        salary      FLOAT COMMENT 'Employee salary',
        subordinates    ARRAY<STRING> ,
        deductions      MAP<STRING, FLOAT> COMMENT 'Keys are deductions names,values are percentages',
        address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT>
        )
        COMMENT 'Description of the table'
        TBLPROPERTIES ('creator'='me','created_at'='2012-01-02')
        LOCATION 'usr/hive/warehouse/mydb.db/employee';
    
    内部表和外部表

    内部表删除时,也会删除数据,内部表不适合和其他工具共享数据。
    外部表则不会,只会删除元数据信息。

    CREATE EXTERNAL TABLE()//创建外部表
    
    分区表

    以column分区,相同column的一个目录。提高了搜索速度,缩小搜索范围。

    CREATE TABLE employees (
    )
    PARTITIONED BY (country STRING, state STRING);
    

    分区表加载数据时,要指定分区目录,否则加载失败

    修改表,增加一个分区

    ALTER TABLE log_messages ADD PARTITION(year = 2012, month = 1, day = 2)
    LOCATION 'hdfs://data/log_messages/2012/01/02'
    

    Hive不关心一个分区对应的分区目录是否存在或者分区目录下是否有文件。

    三种上传数据方式:上传数据后修复;上传数据后添加分区;数据load到分区

    msck repair table tablename;
    //在hdfs上建立目录后,上传数据,修复后才能查询到
    
    修改表

    重命名

    ALTER TABLE tablename RENAME TO tablename2;
    

    增加、修改和删除表分区

    ALTER TABLE tablename ADD/DROP/SET
    

    修改列信息

    ALTER TABLE log_messages
    CHANGE COLUMN hms hours_minutes_seconds INT
    AFTER severity;//字段转移到severity字段之后
    

    修改表属性和存储属性

    ALTER TABLE table1 SET TBLPROPERTIES();
    
    ALTER TABLE table1 PARTITION() SET FILEFORMAT SEQUENCEFILE;//存储为sequencefile格式
    
  • 相关阅读:
    linux:centos7开启指定端口,开放外网访问
    zookeeper 集群搭建
    单机安装zookeeper的3.4.7版本
    CentOS7下安装jdk1.8并配置环境变量,防火墙设置开关
    Redis分布式锁的正确实现方式
    MySQl5.7 忘记密码怎么办?
    Flink 之Window(窗口)
    Flink之Sink(文件、Kafka、Redis、Es、Mysql)
    Canal同步Mysql数据至Hbase
    Flink 之分流Select与Split
  • 原文地址:https://www.cnblogs.com/chenshaowei/p/12450375.html
Copyright © 2011-2022 走看看