zoukankan      html  css  js  c++  java
  • Hive技术拾遗

    1. SELECT语句可以使用正则表达式做列选择,下面的语句查询除了ds和h 之外的所有列:SELECT `(ds|hr)?+.+` FROM sales

    2. LEFT SEMI JOIN的限制是, JOIN子句中右边的表只能在ON子句中设置过滤条件,在WHERE子句、SELECT子句或其他地方过滤都不行。

    3. Hadoop和Hive中数据都是用UTF-8编码的,所以, 所有中文必须是UTF-8编码, 才能正常使用。

    4. count(distinct)   当前的Hive不支持在一条查询语句中有多Distinct。如果要在Hive查询语句中实现多Distinct,需要使用至少n+1条查询语句(n为 distinct的数目),前n条查询分别对n个列去重,最后一条查询语句对n个去重之后的列做Join操作,得到最终结果。

    5. HAVING   不支持HAVING操作。如果需要这个功能要嵌套一个子查询用where限制

    6. Join中处理null值的语义区别    SQL标准中,任何对null的操作(数值比较,字符串操作等)结果都为null。Hive对null值处理的逻辑和标准基本一致,除了Join时的特殊 逻辑。这里的特殊逻辑指的是,Hive的Join中,作为Join key的字段比较,null=null是有意义的,且返回值为true。

    7. 分号字符

        分号是SQL语句结束标记,在HiveQL中也是,但是在HiveQL中,对分号的识别没有那么智慧,例如:
    select concat(cookie_id,concat(';',’zoo’)) from c02_clickstat_fatdt1 limit 2;
    FAILED: Parse Error: line 0:-1 cannot recognize input '<EOF>' in function specification
        可以推断,Hive解析语句的时候,只要遇到分号就认为语句结束,而无论是否用引号包含起来。
        解决的办法是,使用分号的八进制的ASCII码进行转义,那么上述语句应写成:
    select concat(cookie_id,concat('73','zoo')) from c02_clickstat_fatdt1 limit 2;

    8. Hive编译器将一个Hive QL转换操作符。操作符Operator是Hive的最小的处理单元,每个操作符代表HDFS的一个操作或者一道MapReduce作业。操作符如下:
        TableScanOperator:扫描hive表数据
        ReduceSinkOperator:创建将发送到Reducer端的<Key,Value>对
        JoinOperator:Join两份数据
        SelectOperator:选择输出列
        FileSinkOperator:建立结果数据,输出至文件
        FilterOperator:过滤输入数据
        GroupByOperator:GroupBy语句
        MapJoinOperator:/*+mapjoin(t) */
        LimitOperator:Limit语句
        UnionOperator:Union语句
        Hive通过ExecMapper和ExecReducer执行MapReduce任务。在执行MapReduce时有两种模式,即本地模式和分布式模式 。

    9. Hive cli命令:

    reset     重置配置为默认值
    set     输出用户覆盖的hive配置变量
    set -v     输出所有Hadoop和Hive的配置变量
    add FILE[S] <filepath> <filepath>*
    add JAR[S] <filepath> <filepath>*
    add ARCHIVE[S] <filepath> <filepath>*     添加 一个或多个 file, jar,  archives到分布式缓存
    list FILE[S]
    list JAR[S]
    list ARCHIVE[S]     输出已经添加到分布式缓存的资源。
    list FILE[S] <filepath>*
    list JAR[S] <filepath>*
    list ARCHIVE[S] <filepath>*     检查给定的资源是否添加到分布式缓存
    delete FILE[S] <filepath>*
    delete JAR[S] <filepath>*
    delete ARCHIVE[S] <filepath>*     从分布式缓存删除指定的资源
    source FILE <filepath>     在CLI里执行一个hive脚本文件

  • 相关阅读:
    在线学习Java免费资源推荐
    pycharm控制台输出乱码
    服务器质检文件传输——scp
    git使用小结
    更换python依赖包的下载路径
    查看某一时间段的cpu使用情况,sar(监控系统性能)
    运行脚本:‘$’ ’: 未找到命令’错误
    bash脚本,获取当前日期或时间作为参数
    installing new crontab-添加调度任务成功
    Mysql-删除数据表-三种方式详解
  • 原文地址:https://www.cnblogs.com/aprilrain/p/3726205.html
Copyright © 2011-2022 走看看