zoukankan      html  css  js  c++  java
  • hadoop SQL使用

    转载自:http://slaytanic.blog.51cto.com/2057708/782175

    Hive 是facebook开源的一个基于hadoop框架的查询工具,也就是说,需要用hive的话,就要先安装hadoop。假设你已经有了hive。

     
    1.字段的数据类型。
    hive实际上为了数据挖掘的需要,对hive表的字段设置了数据类型,对于经常where的,还可以设置index。
     
    数据类型分以下几种
     
    STRING 不定长字符串
    TINYINT 3位长整型数
    SMALLINT 5位长整型
    INT 10位整型
    BIGINT 19位整型
    FLOAT 浮点数
    DOUBLE 双精度
    BOOLEAN 布尔型,也就是TRUE和FALSE

    不同的整型数有不同的位数限制,这个创建表的时候需要注意一下,别因为位数不够造成数据截取。位数过大,又会造成元数据的空间浪费。

    还有三种不常用到的
    STRUCTS 结构体
    ARRAY 数组
    MAP 这个不知道该怎么翻译合适
     
    2.创建数据表。
     
    hive的数据表分为两种,内部表和外部表。
     
    内部表指hive创建并通过load data inpath进数据库的表,这种表可以理解为数据和表结构都保存在一起的数据表。当你通过DROP TABLE table_name 删除元数据中表结构的同时,表中的数据也同样会从hdfs中被删除。
     
    外 部表指在表结构创建以前,数据已经保存在hdfs中了,通过创建表结构,将数据格式化到表的结构里。当DROP TABLE table_name 的时候,hive仅仅会删除元数据的表结构,而不会删除hdfs上的文件,所以,相比内部表,外部表可以更放心大胆的使用。
     
    内部表建表语句:
    CREATE TABLE database.table1
    (
    column1 STRING COMMENT 'comment1',
    column2 INT COMMENT 'comment2'
    );
    外部表创建语句:
     
    下面是hdfs中文件不用LZO压缩,纯文本保存时,如何创建外部表:
    CREATE EXTERNAL TABLE IF NOT EXISTS database.table1
    (
    column1 STRING COMMENT 'comment1',
    column2 STRING COMMENT 'comment2'
    )
    ROW FORMAT DELIMITED FIELDS TERMINATED BY " "
    LOCATION 'hdfs:///data/dw/asf/20120201';
     
    下面是,当hdfs中的文件用LZO压缩后,如何创建外部表,当然你需要hadoop-gpl的支持才能以文本形式读取lzo文件。
    CREATE EXTERNAL TABLE IF NOT EXISTS database.table1
    (
    column1 STRING COMMENT 'comment1',
    column2 STRING COMMENT 'comment2'
    )
    ROW FORMAT DELIMITED FIELDS TERMINATED BY " "
    STORED AS INPUTFORMAT "com.hadoop.mapred.DeprecatedLzoTextInputFormat" OUTPUTFORMAT "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat"
    LOCATION 'hdfs:///data/dw/asf/20120201';
    标红部分是十分操蛋的,网上几乎所有涉及该单词的文章基本全是复制粘贴抄的,无一例外,全部写成SORTED,如果你找的hive中文资料不是我这篇,恐怕创建外部表都会报错。
     
    3.删除数据表
     
    正如我们前面所说,数据表在删除的时候,内部表会连数据一起删除,而外部表只删除表结构,数据还是保留的。这个需要注意一下。
     
    4.修改表结构
     
    新添加字段
    ALTER TABLE table1 ADD COLUMNS
    (
    column1 string COMMENT 'comment1',
    column2 string COMMENT 'comment2'
    );
    修改表名
    ALTER TABLE database.table1 RENAME TO database.table2;
    修改数据表,以使用LZO压缩数据。
    ALTER TABLE table1
    SET FILEFORMAT
    INPUTFORMAT "com.hadoop.mapred.DeprecatedLzoTextInputFormat"
    OUTPUTFORMAT
    "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat";
    用这句话,即便原来是文本数据改成了lzo压缩,也可以在不重新创建表的情况下重新使用了。
     
    5.内部表加载数据
     
    从本地文件系统中加载数据。
    LOAD DATA LOCAL INPATH "/opt/data/1.txt" INTO TABLE table1;
    意思是,从本地文件系统/opt/data/1.txt加载到hive的table1中。这时hive会读取该文件,并将内容写到hdfs中table1所在的位置。
     
    从HDFS中加载数据
    LOAD DATA INPATH "/data/datawash/1.txt" INTO TABLE table1;
    意思是从HDFS的/data/datawash/1.txt写入到table1所在目录。
     
    关于加载中的OVERWRITE是这样。
    LOAD DATA LOCAL INPATH "/opt/data/1.txt" OVERWRITE INTO TABLE table1;
    如果加了OVERWRITE,则覆盖原先已经存在的数据,如果你确定原先没有数据,则可以写上。
     
    HIVE还包含很多功能,View,index,自定义函数等,这个慢慢再说吧。
  • 相关阅读:
    hadoop上的C++程序开发
    some phrase for oral english
    python的安装,IDLE基本操作
    of这个变态
    一分钟先生: 程序员面试真经
    Cloud Tool 小探索
    【学习总结】数学-欧拉函数
    第三篇——第二部分——第一文 SQL Server镜像简单介绍
    NYOJ 915 +-字符串
    人类主动探索地外文明(METI)活动正在进行中
  • 原文地址:https://www.cnblogs.com/pingfan/p/3636050.html
Copyright © 2011-2022 走看看