zoukankan      html  css  js  c++  java
  • Hive数据操作和数据查询

    数据操作

    加载数据

    LOAD DATA [LOCAL] IMPATH 'path' [OVERWRITE] INTO TABLE tablename [PARTITION (column = x)];
    
    • LOAD DATA 加载数据
    • LOCAL 本地数据,不加LOCAL就是分布式文件系统数据
    • OVERWRITE表示覆盖表中已有数据,否则表示追加

    通过查询语言插入数据

    这里使用了OVERWRITE关键字,之前分区内容会被覆盖掉。这是一次插入。

    INSERT OVERWRITE INTO TABLE employees
    PARTITION (country = 'US', state = 'OR')
    SELECT * FROM staged_employees se
    WHERE se.cnty = 'US' AND se.st = 'OR';
    

    以下为多次插入,对多个分区目录插入数据

    FROM staged_employees se
    INSERT OVERWRITE TABLE employees
        PARTITION (country = 'US',state = 'OR')
        SELECT * WHERE se.cnty = 'US' AND se.st = 'OR'
    INSERT OVERWRITE TABLE employees
        PARTITION (country = 'US',state = 'CA')
        SELECT * WHERE se.cnty = 'US' AND se.st = 'CA'
    ···
    

    动态分区插入,会自动根据字段匹配插入数据,这个减少了代码量。根据国家和州,自动分区插入数据。也可以动态和静态混合使用。动态分区功能默认情况下没有开启。

    INSERT OVERWRITE TABLE employees
    PARTITION (country,state)
    SELECT se.cnty,se.st
    FROM staged_employees se;
    

    创建表并加载数据

    用AS SELECT关键字

    CREATE TABLE ca_employees
    AS SELECT name,salary,address
    FROM employees se
    WHERE se.state = 'CA'
    

    导出数据

    • 写出多少个文件取决于调用的reducer个数
    • 不管源表数据如何存储,Hive会把所有字段序列化成字符串写入文件
    • 没有LOCAL,导入到HDFS系统上
    INSERT OVERWRITE [LOCAL] DIRECTORY '/path'
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '	'
    SELECT name, salary, address
    FROM employees se
    WHERE se.state = 'CA';
    

    数据查询

    查询语句

    SELECT [ALL | DISTINCT] column1,column2
    FROM tablename
    [WHERE condition]
    [GROUP BY col]
    [ORDER BY col]
    [CLUSTER BY col]
    [SOTY BY col]
    [LIMIT number]
    

    常用函数:count max min sum avg

    正则表达式 %任意个 _一个

    CASE...WHEN...THEN句式

    SELECT name,salary
        CASE
            WHEN salary <5000 THEN 'low'
            WHEN              THEN
            ELSE 
        END 
        FROM employees;
    

    Hive对某些情况的查询不必启动MapReduce,比如简单查询表存储目录下的文件,包括WHERE过滤条件

    Hive只支持等值连接。JOIN ON

    四种排序的差异:ORDER BY、SORT BY、DISTRIBUTE BY、

    • ORDER BY,全局排序
    • SORT BY,区内排序,一般和DISTRIBUTE BY一起用。SORT BY是对一个reduce内的数据排序。DISTRIBUTE BY控制map的输出在reducer中如何划分的
    • CLUSTER BY,相当于SORT BY和DISTRIBUTE BY一起用

    分桶表

    分区针对的是数据的存储路径,分桶针对的是数据文件。分桶是将数据集分解成更容易管理的若干部分的一种技术。

    创建分桶表

    CREATE TABLE tablename(col type)
    CLUSTER BY (col)
    INTO 4 BUCKETS
    //创建分桶表,分成4个桶,有4个文件。
    

    导入数据时,要用MapReduce中的PARTITIONER。这样导入后,目录下有4个文件。

    //先设置桶属性
    set hive.enforce.bucketing=true;
    set mapreduce.job.reduces=-1;//根据桶的个数确定reduce个数,也就是4个。
    
    INSERT INTO TABLE table1
    SELECT * FROM table2
    
    抽样查询

    对于大数据集,用户需要使用一个具有代表性的查询结果,而不是全部的查询结果,可以通过对表进行抽样来满足这个需求

    SELECT * FROM tablename TABLESAMPLE(bucket x out of y on col);
    //根据y的大小决定抽样比例
    z个桶,(x,y) 抽z/y个桶数据
    
  • 相关阅读:
    IE、chrome、火狐中如何调试javascript脚本
    RFS_oracle的操作
    python_操作oracle数据库
    RFS_窗口或区域之间的切换
    RFS_关键字
    python_遇到问题
    python_GUI
    python_文件
    python之深浅拷贝
    python之编码和解码
  • 原文地址:https://www.cnblogs.com/chenshaowei/p/12454445.html
Copyright © 2011-2022 走看看