1. 程式人生 > >hive中grouping sets的使用

hive中grouping sets的使用

set hive.new.job.grouping.set.cardinality = 30; 這條設定的意義在於告知直譯器,group by之前,每條資料複製量在30份以內。 grouping sets是一種將多個group by 邏輯寫在一個sql語句中的便利寫法。 demo:  
select
    A,
    B,
    C,
    group_id, 
    count(A)
from
    tableName
group by  --declare columns
    A,
    B,
    C
grouping sets
(
   (A,C),
   (A,B),
   (B,C),
   (C)
)
其中grouping sets中的(A,C),   (A,B),   (B,C),   (C) 代表4個group by 組合, 相當於寫了四個sql查詢語句使用了四個不同的group by策略。 group_id是為了區分每條輸出結果是屬於哪一個group by的資料。它是根據group by後面宣告的順序欄位是否存在於當前group by中的一個二進位制位組合資料。 比如(A,C)的group_id: group_id(A,C) = grouping(A)+grouping(B)+grouping (C) 的結果就是:二進位制:101 也就是5. select中的欄位是完整的A,B,C,但是我們知道由於group by的存在,select 欄位本不應該出現非group by欄位的,所以這裡我們要特別說明,如果直譯器發現group by A,C 但是select A,B,C 那麼執行時會將所有from 表取出的結果複製一份,B都置為null,也就是在結果中,B都為null。

相關推薦

hivegrouping sets的使用

set hive.new.job.grouping.set.cardinality = 30; 這條設定的意義在於告知直譯器,group by之前,每條資料複製量在30份以內。 grouping sets是一種將多個group by 邏輯寫在一個sql語句中的便利寫法。 demo:  

hive grouping sets 等聚合函數

union _id 說明 from div sele gpo 函數 grouping 函數說明: grouping sets 在一個 group by 查詢中,根據不同的維度組合進行聚合,等價於將不同維度的 group by 結果集進行 union allcube 根據

Hive grouping sets 的bug:ParseException line 7:22 missing ) at ',' near '<EOF>'

今天遇到了一個問題,當使用grouping sets 時,一直報錯如下: ParseException line 7:22 missing ) at ',' near '<EOF>' line 7:31 extraneous input ')' expecti

Hive.GROUPING SETS的“陷阱”

      之前整理了一下Hive 0.10版引進的GROUPING SETS子句特性,並作了簡單的句法使用體驗和資料驗證。但是當時沒有注意到稍微複雜一點的情況,然後,在實際使用過程中,妥妥地就中了一槍。        這一槍發生在有JOIN操作的時候,情況是這樣的:我要對

Hive.GROUPING SETS

如果說聚合函式(Simple UDAF / Generic UDAF)是HQL聚合資料查詢或分析的中樞處理器,那GROUP BY可以說是聚合函式的神經了,GROUP BY收集和傳遞材料,然後交給聚合函式們去處理。這些材料的組織形式顯得尤為重要,它們表達著分析者想要的觀察維度或

Hive grouping sets 的bug:ParseException line 7:22 missing ) at ',' near ''

今天遇到了一個問題,當使用grouping sets 時,一直報錯如下:ParseException line 7:22 missing ) at ',' near '<EOF>'line

利用Sqoop將MySQL數據導入Hive

sqoop參考http://www.cnblogs.com/iPeng0564/p/3215055.htmlhttp://www.tuicool.com/articles/j2yayyjhttp://blog.csdn.net/jxlhc09/article/details/168568731.list da

利用sqoop從 hive往mysql中導入表出現的問題

ive ptr 解析 修改 技術 字段 map temp article 這個錯誤的原因是指定Hive中表字段之間使用的分隔符錯誤,供Sqoop讀取解析不正確。如果是由hive執行mapreduce操作匯總的結果,默認的分隔符是 ‘\001‘,否則如果是從HDFS文件導入

[轉]詳解Oracle高級分組函數(ROLLUP, CUBE, GROUPING SETS)

-a set tail serve net 操作 toc mit highlight 原文地址:http://blog.csdn.net/u014558001/article/details/42387929 本文主要講解 ROLLUP, CUBE, GROUPING S

介紹一種非常好用匯總數據的方式GROUPING SETS

介紹 http serve 使用 art 說了 指定 ron 分析 介紹   對於任何人而言,用T-SQL語句來寫聚會查詢都是工作中重要的一環。我們大家也都很熟悉GROUP BY子句來實現聚合表達式,但是如果打算在一個結果集中包含多種不同的匯總結果,可能會比較麻煩。我將舉

Hive如何添加自定義UDF函數以及oozie使用hive的自定義函數

步驟 strong 重啟 一個 文件夾 spa nlog hdfs share 直接來說操作步驟: 1. 修改.hiverc文件 在hive的conf文件夾下面,如果沒有.hiverc文件,手工自己創建一個。 參照如下格式添加: add jar /usr/loc

hive時間操作(二)

to_date day date_add IT mon times () net AS 轉:https://blog.csdn.net/qq646748739/article/details/77997276 --Hive中日期函數總結:--1.時間戳函數--日期轉時間

hive刪除表的錯誤Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException

成了 ret jar tor java-5 drop meta org -c hive使用drop table 表名刪除表時報錯,return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException

hive解析json陣列

  -- hive中解析json陣列 select t1.status ,substr(ss.col,1,10) as col ,t3.evcId ,t3.evcLicense ,t3.evcAddress ,t3.modelName fro

Hive 的複合資料結構簡介以及一些函式的用法說明

目錄[-] 一、map、struct、array 這3種的用法: 1、Array的使用 2、Map 的使用 3、Struct 的使用 4、資料組合 (不支援組合的複雜資料型別) 二、hive中的一些不常見函式的用法: 1、array_contains (

HIVEIN的坑

問題:為什麼HIVE中用了 NOT IN,結果集沒了?   注:這個是原創,轉載請註明,謝謝!直接進實驗室>> > select * from a;OK1 a12 a23 a3Time taken: 0.063 seconds, Fetched: 3 row(s) hive&

Hive使用LZO壓縮的方式

1.建立表的時候指定為lzo格式 CREATE EXTERNAL TABLE foo (      columnA string,      columnB string ) PARTITIO

使用spark將hive的資料匯入到mongodb

import com.huinong.truffle.push.process.domain.common.constant.Constants; import com.mongodb.spark.MongoSpark; import com.mongodb.spark.config.WriteConf

Pig指令碼從Hiveload資料並存入到Hbase

1、我們先建一個Hive表test01: create table test01(name String, age int, phone String,province String, city String) ROW FORMAT DELIMITED FIELDS TERMINATED B

hive的靜態分割槽與動態分割槽

hive中建立分割槽表沒有什麼複雜的分割槽型別(範圍分割槽、列表分割槽、hash分割槽、混合分割槽等)。分割槽列也不是表中的一個實際的欄位,而是一個或者多個偽列。意思是說在表的資料檔案中實際上並不儲存分割槽列的資訊與資料。 下面的語句建立了一個簡單的分割槽表: create table pa