Hive 安裝及配置

https://cwiki.apache.org/confluence/display/Hive/GettingStarted

安裝和配置

您可以通過下載tarball來安裝Hive的穩定版本,或者下載源代碼來構建Hive。

運行HiveServer2和 Beeline

要求

  • Java 1.7
    注意: Hive版本 1.2 以后需要Java 1.7或更新版本。Hive版本0.14到1.1也適用于Java 1.6。強烈建議用戶開始使用Java 1.8(請參閱 HIVE-8607)。
  • Hadoop 2.x(首選),1.x(不支持Hive 2.0.0以上版本)。
    Hive版本0.13也支持Hadoop 0.20.x,0.23.x.
  • Hive常用于生產Linux和Windows環境。Mac是一個常用的開發環境。本文檔中的說明適用于Linux和Mac。在Windows上使用它需要稍微不同的步驟。

安裝穩定版本

首先從其中一個Apache下載鏡像下載最新的Hive穩定版本(請參閱Hive發行版)。

接下來,你需要解壓tarball。這會創建一個名為hive-x.y.z (其中x.y.z是版本號)的子目錄:

  $ tar -xzvf hive-x.y.z.tar.gz

將環境變量設置HIVE_HOME為指向安裝目錄:

  $ cd hive-x.y.z
  $ export HIVE_HOME={{pwd}}

最后,添加$HIVE_HOME/bin到您的PATH

  $ export PATH=$HIVE_HOME/bin:$PATH

從源代碼構建Hive

最新Hive代碼的GIT存儲庫位置:git clone [https://git-wip-us.apache.org/repos/asf/hive.git](https://git-wip-us.apache.org/repos/asf/hive.git)
( 主分支)。

所有發布版本都位于名為“branch-0.#”或“branch-1.#”或即將推出的“branch-2.#”的分支中,但版本0.8.1在“branch-0.8-r2 ”。任何具有其他名稱的分支都是正在進行中的功能分支。有關 詳細信息,請參閱 了解Hive分支

從0.13開始,Hive使用Apache Maven構建。

在master上編譯Hive

要從主分支構建當前的Hive代碼,請執行以下操作:

  $ git clone https://git-wip-us.apache.org/repos/asf/hive.git
  $ cd hive
  $ mvn clean package -Pdist
  $ cd packaging/target/apache-hive-{version}-SNAPSHOT-bin/apache-hive-{version}-SNAPSHOT-bin
  $ ls
  LICENSE
  NOTICE
  README.txt
  RELEASE_NOTES.txt
  bin/ (all the shell scripts)
  lib/ (required jar files)
  conf/ (configuration files)
  examples/ (sample input and query files)
  hcatalog / (hcatalog installation)
  scripts / (upgrade scripts for hive-metastore)

這里{version} 指的是當前的Hive版本。

如果使用Maven(mvn)構建Hive源代碼,對于文中其他部分,我們將"/packaging/target/apache-hive-{version}-SNAPSHOT-bin/apache-hive-{version}-SNAPSHOT-bin"目錄作為 <install-dir>。

在分支上編譯Hive

參考: https://cwiki.apache.org/confluence/display/Hive/GettingStarted

運行Hive

Hive使用Hadoop,因此:

  • 您必須在您的路徑中安裝Hadoop
  • export HADOOP_HOME=<hadoop-install-dir>

另外, 在Hive中創建表之前,您必須使用以下HDFS命令來創建/tmp/user/hive/warehousehive.metastore.warehouse.dir設置)并設置它們chmod g+w

  $ $HADOOP_HOME/bin/hadoop fs -mkdir       /tmp
  $ $HADOOP_HOME/bin/hadoop fs -mkdir       /user/hive/warehouse
  $ $HADOOP_HOME/bin/hadoop fs -chmod g+w   /tmp
  $ $HADOOP_HOME/bin/hadoop fs -chmod g+w   /user/hive/warehouse

您可能會發現它很有用,盡管沒有必要設置HIVE_HOME

 $ export HIVE_HOME=<hive-install-dir>

運行Hive CLI

要從shell中使用Hive 命令行界面(CLI),請執行以下操作

  $ $HIVE_HOME/bin/hive

運行HiveServer2和Beeline

從Hive 2.1開始,我們需要運行下面的schematool命令作為初始化步驟。例如,我們可以使用“derby”作為db類型。

 $ $HIVE_HOME/bin/schematool -dbType <db type> -initSchema

HiveServer2(在Hive 0.11中引入)有自己CLI的稱為Beeline 。由于HiveCLI缺乏HiveServer2的多用戶,安全性和其他功能,現在不推薦使用HiveCLI來支持Beeline。從shell運行HiveServer2和Beeline:

  $ $HIVE_HOME/bin/hiveserver2

  $ $HIVE_HOME/bin/beeline -u jdbc:hive2://$HS2_HOST:$HS2_PORT

Beeline從HiveServer2的JDBC URL啟動,這取決于HiveServer2啟動的地址和端口。默認情況下,它將是(localhost:10000),所以地址將看起來像jdbc:hive2://localhost:10000

或者為了測試目的在同一進程中啟動Beeline和HiveServer2,為HiveCLI提供類似的用戶體驗:

 $ $HIVE_HOME/bin/beeline -u jdbc:hive2://

運行HCatalog

要在Hive 0.11.0及更高版本的shell中運行HCatalog服務器,請執行以下操作:

$ $HIVE_HOME/hcatalog/sbin/hcat_server.sh

要在Hive發行版0.11.0和更高版本中使用HCatalog命令行界面(CLI):

  $ $HIVE_HOME/hcatalog/bin/hcat

有關更多信息,請參閱HCatalog手冊中的從Tarball 安裝 HCatalog HCatalog CLI

運行WebHCat(Templeton)

要從Hive發行版0.11.0和更高版本中的shell運行WebHCat服務器,請執行以下操作:

 $ $HIVE_HOME/hcatalog/sbin/webhcat_server.sh

有關更多信息,請參閱WebHCat手冊中的WebHCat 安裝

配置管理概述

  • Hive默認配置 <install-dir>/conf/hive-default.xml

  • Hive配置目錄的位置可以通過設置HIVE_CONF_DIR環境變量來更改。

  • 配置變量可以通過(重新)定義來改變 <install-dir>/conf/hive-site.xml

  • Log4j配置存儲在 <install-dir>/conf/hive-log4j.properties

  • Hive配置是Hadoop之上的重疊 - 它默認繼承Hadoop配置變量。

  • Hive配置可以通過以下操作來控制:

    • 編輯hive-site.xml并在其中定義任何需要的變量(包括Hadoop變量)
    • 使用set命令(請參閱下一節)
    • 使用以下語法調用Hive(不建議使用),Beeline或HiveServer2:
$ bin/hive --hiveconf x1=y1 --hiveconf x2=y2  //this sets the variables x1 and x2 to y1 and y2 respectively
$ bin/hiveserver2 --hiveconf x1=y1 --hiveconf x2=y2  //this sets server-side variables x1 and x2 to y1 and y2 respectively
$ bin/beeline --hiveconf x1=y1 --hiveconf x2=y2  //this sets client-side variables x1 and x2 to y1 and y2 respectively.
*   將`HIVE_OPTS`環境變量設置為“ `--hiveconf x1=y1 --hiveconf x2=y2`”,其與上述相同。

運行時配置

  • Hive查詢是使用map-reduce查詢執行的,因此查詢的行為可以通過Hadoop配置變量來控制。

  • HiveCLI(不建議使用)和Beeline命令'SET'可用于設置任何Hadoop(或Hive)配置變量。例如:

    beeline> SET mapred.job.tracker=myhost.mycompany.com:50030;
    beeline> SET -v;

后者顯示所有當前設置。沒有-v選項,只顯示與基礎Hadoop配置不同的變量。

Hive,Map-Reduce和Local-Mode

Hive編譯器為大多數查詢生成map-reduce作業。這些作業然后被提交給由變量指示的Map-Reduce集群:

  mapred.job.tracker

雖然這通常指向具有多個節點的map-reduce集群,但Hadoop也提供了一個選項,可在用戶的工作站上本地運行map-reduce作業。這對于在小數據集上運行查詢可能非常有用 - 在這種情況下,本地模式執行通常比將作業提交到大型集群要快得多。 相反,本地模式只能用一個reducer運行,并且可能會非常緩慢地處理較大的數據集。

從0.7版開始,Hive完全支持本地模式執行。要啟用此功能,用戶可以啟用以下選項:

  hive> SET mapreduce.framework.name=local;

另外,mapred.local.dir應該指向在本地機器上有效的路徑(例如/tmp/<username>/mapred/local)。(否則,用戶將得到分配本地磁盤空間的例外。)

從0.7版開始,Hive還支持一種模式,可以自動在本地模式下運行map-reduce作業。相關的選項有hive.exec.mode.local.autohive.exec.mode.local.auto.inputbytes.maxhive.exec.mode.local.auto.tasks.max

  hive> SET hive.exec.mode.local.auto=false;

請注意,此功能默認處于禁用狀態。如果啟用,Hive會分析查詢中每個map-reduce作業的大小,并且如果滿足以下閾值,則可以在本地運行它:

  • 作業的總輸入大小低于:(hive.exec.mode.local.auto.inputbytes.max默認為128MB)
  • map任務總數小于:(hive.exec.mode.local.auto.tasks.max默認為4)
  • 所需的reduce 任務總數為1或0。

因此,對于小數據集的查詢,或者對于多個map-reduce作業的查詢(其中后續作業的輸入顯著更小)(因為先前作業中的reduction/filtering),作業可以在本地運行。

請注意,Hadoop服務器節點的運行時環境和運行Hive客戶端的機器(由于不同的jvm版本或不同的軟件庫)可能存在差異。在本地模式下運行時,這可能會導致意外的行為/錯誤。還要注意,本地模式執行是在一個單獨的,子jvm(Hive客戶端)中完成的。如果用戶愿意,可以通過該選項來控制此子jvm的最大內存量hive.mapred.local.mem。默認情況下,它被設置為零,在這種情況下,Hive讓Hadoop確定子jvm的默認內存限制。

配置日志

Hive使用log4j進行日志記錄。默認情況下,日志不會通過CLI發送到控制臺。默認日志記錄級別WARN適用于0.13.0之前的Hive發行版。從Hive 0.13.0開始,默認日志記錄級別為INFO

日志存儲在以下目錄中:/tmp/<*user.name*>

  • /tmp/<*user.name*>/hive.log
    注意:在本地模式下,在Hive 0.13.0之前,日志文件名是“ .log”而不是“ hive.log”。該錯誤在0.13.0版本中得到修復(參見HIVE-5528HIVE-5676)。

要配置不同的日志位置,請 在$ HIVE_HOME / conf / hive-log4j.properties中進行 hive.log.dir設置。確保目錄的權限已設置為 chmod 1777 <dir>。

  • hive.log.dir=*<other_location>*

如果用戶希望,可以通過添加下面顯示的參數將日志發送到控制臺:

  • bin/hive --hiveconf hive.root.logger=INFO,console //for HiveCLI (deprecated)
  • bin/hiveserver2 --hiveconf hive.root.logger=INFO,console

或者,用戶通過使用以下命令來更改日志記錄級別:

  • bin/hive --hiveconf hive.root.logger=INFO,DRFA //for HiveCLI (deprecated)
  • bin/hiveserver2 --hiveconf hive.root.logger=INFO,DRFA

日志的另一種選擇是TimeBasedRollingPolicy(適用于Hive 1.1.0及更高版本,HIVE-9001),方法是提供DAILY選項,如下所示:

  • bin/hive --hiveconf hive.root.logger=INFO,DAILY //for HiveCLI (deprecated)
  • bin/hiveserver2 --hiveconf hive.root.logger=INFO,DAILY

請注意,hive.root.logger通過'set'命令進行設置不會更改日志記錄屬性,因為它們是在初始化時確定的。

Hive還將查詢日志存儲在每個Hive會話中/tmp/<user.name>/,但可以使用屬性在hive-site.xml配置 hive.querylog.location。從Hive 1.1.0開始,查詢的EXPLAIN EXTENDED輸出可以通過將 hive.log.explain.output 屬性設置為true 來記錄在INFO級別 。

Hadoop集群上,Hive執行期間的日志記錄由Hadoop配置控制。通常,Hadoop將為每個映射生成一個日志文件,并減少存儲在執行任務的群集機器上的任務。日志文件可通過點擊Hadoop JobTracker Web UI中的“任務詳細信息”頁面獲取。

在使用本地模式(使用mapreduce.framework.name=local)時,Hadoop / Hive執行日志將在客戶端計算機上生成。從版本0.6開始 - Hive使用hive-exec-log4j.propertieshive-log4j.properties僅在缺失時回退)來確定默認情況下這些日志的傳輸位置。默認配置文件為每個在本地模式下執行的查詢生成一個日志文件并將其存儲在下/tmp/<user.name>。提供單獨配置文件的目的是為了使管理員能夠根據需要集中執行日志捕獲(例如在NFS文件服務器上)。執行日志對調試運行時錯誤非常有用。

有關WebHCat錯誤和日志記錄的信息,請參閱WebHCat手冊中的錯誤代碼和響應以及日志文件

錯誤日志對調試問題非常有用。請將任何錯誤(其中有很多!)發送給他們hive-dev@hadoop.apache.org

從Hive 2.1.0開始( HIVE-13027),Hive默認使用Log4j2的異步記錄器。將hive.async.log.enabled設置為false將禁用異步日志記錄并回退到同步日志記錄。異步日志記錄可以顯著提高性能,因為日志記錄將在使用LMAX干擾程序隊列緩沖日志消息的單獨線程中處理。 有關優點和缺點,請參閱https://logging.apache.org/log4j/2.x/manual/async.html

HiveServer2日志

HiveServer2操作日志適用于從Hive 0.14開始的客戶端。請參閱HiveServer2日志記錄以進行配置

審計日志

對于每個Metastore API調用,都會從Hive Metastore服務器記錄審核日志。

審核日志記錄功能和一些相關功能參數。它記錄在log4j的INFO級別,因此您需要確保INFO級別的日志記錄已啟用(請參閱HIVE-3505 )。日志條目的名稱是“HiveMetaStore.audit”。

在Hive 0.7中為安全客戶端連接(HIVE-1948 )和Hive 0.10為非安全連接(HIVE-3277 ;也參見HIVE-2797 )添加了審計日志。

Perf Logger

為了通過PerfLogger獲得性能指標,您需要為PerfLogger類(HIVE-12675 )設置DEBUG級日志記錄。這可以通過在log4j屬性文件中設置以下內容來實現。

log4j.logger.org.apache.hadoop.hive.ql.log.PerfLogger=DEBUG

如果記錄器級別已通過hive.root.logger設置為根目錄下的DEBUG,則上述設置不需要。

DDL操作

Hive數據定義語言 中記錄了 Hive DDL操作。

創建Hive表

  hive> CREATE TABLE pokes (foo INT, bar STRING);

創建一個名為pokes的表,有兩列,第一個是整數,另一個是字符串。

  hive> CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);

創建一個名為invites的表,其中包含兩列和一個名為ds的分區列。分區列是虛擬列。它不是數據本身的一部分,而是從特定數據集加載到的分區派生而來。

默認情況下,表假定為文本輸入格式,分隔符假定為^ A(ctrl-a)。

瀏覽表格

  hive> SHOW TABLES;

列出了所有的表格。

 hive> SHOW TABLES '.*s';

列出以's'結尾的所有表格。模式匹配遵循Java正則表達式。查看文檔http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html的鏈接。

hive> DESCRIBE invites;

顯示列的列表。

更改和刪除表格

表名可以更改,列可以添加或替換

  hive> ALTER TABLE events RENAME TO 3koobecaf;
  hive> ALTER TABLE pokes ADD COLUMNS (new_col INT);
  hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment');
  hive> ALTER TABLE invites REPLACE COLUMNS (foo INT, bar STRING, baz INT COMMENT 'baz replaces new_col2');

請注意,REPLACE COLUMNS將替換所有現有的列,并僅更改表的schema,而不是數據。該表必須使用本地SerDe。REPLACE COLUMNS也可用于從表格模式中刪除列:

  hive> ALTER TABLE invites REPLACE COLUMNS (foo INT COMMENT 'only keep the first column');

Drop tables :

  hive> DROP TABLE pokes;

元數據存儲

元數據位于嵌入式Derby數據庫中,其磁盤存儲位置由Hive配置變量javax.jdo.option.ConnectionURL。默認情況下這個位置是./metastore_db(見conf/hive-default.xml)。

目前,在默認配置中,此元數據一次只能由一個用戶看到。

Metastore可以存儲在任何由JPOX支持的數據庫中。位置和RDBMS的類型可以通過兩個變量來控制javax.jdo.option.ConnectionURLjavax.jdo.option.ConnectionDriverName。有關支持的數據庫的更多詳細信息,請參閱JDO(或JPOX)文檔。數據庫模式在JDO元數據注釋文件package.jdo中定義src/contrib/hive/metastore/src/model

在將來,Metastore本身可以是一個獨立的服務器。

如果要將Metastore作為網絡服務器運行,以便可以從多個節點訪問它,請參閱Hive在服務器模式下使用Derby

DML操作

Hive數據操作語言中記錄了Hive DML操作。

將文件中的數據加載到Hive中:

hive> LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;

將包含由ctrl-a分隔的兩列的文件加載到pokes表中。'LOCAL'表示輸入文件在本地文件系統上。如果'LOCAL'被省略,那么它會在HDFS中查找該文件。

關鍵字'覆蓋'表示表中的現有數據被刪除。如果忽略'OVERWRITE'關鍵字,則將數據文件附加到現有數據集。

注意:

  • 加載命令不執行對模式的數據驗證。
  • 如果文件位于hdfs中,則將其移入Hive控制的文件系統名稱空間。
    Hive目錄的根目錄由選項指定hive.metastore.warehouse.dirhive-default.xml。我們建議用戶在嘗試通過Hive創建表之前創建該目錄。
  hive> LOAD DATA LOCAL INPATH './examples/files/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');
  hive> LOAD DATA LOCAL INPATH './examples/files/kv3.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-08');

上面的兩個LOAD語句將數據加載到表invites的兩個不同分區中。表必須創建為按鍵ds分區才能成功。

  hive> LOAD DATA INPATH '/user/myname/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');

上述命令會將數據從HDFS文件/目錄加載到表中。
請注意,從HDFS加載數據將導致移動文件/目錄。因此,該操作幾乎是即時的。

SQL操作

選擇中記錄了Hive查詢操作。

示例查詢

下面顯示了一些示例查詢。他們在build/dist/examples/queries目錄下。
更多可在Hive資源中找到ql/src/test/queries/positive

選擇和過濾器

  hive> SELECT a.foo FROM invites a WHERE a.ds='2008-08-15';

ds=2008-08-15invites表的所有分區行中選擇'foo'列。結果不存儲在任何地方,但顯示在控制臺上。

請注意,在隨后的所有示例中INSERT(可以插入Hive表,本地目錄或HDFS目錄)都是可以的。

  hive> INSERT OVERWRITE DIRECTORY '/tmp/hdfs_out' SELECT a.* FROM invites a WHERE a.ds='2008-08-15';

從表的分區ds=2008-08-15中選擇所有行invites到HDFS目錄中。結果數據在該目錄中的文件中(取決于映射器的數量)。
注:如果使用*選擇分區列。它們也可以在投影子句中指定。

分區表必須始終WHERE在語句的子句中選擇一個分區。

  hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/local_out' SELECT a.* FROM pokes a;

從pokes表中選擇所有行到本地目錄。

  hive> INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a;
  hive> INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a WHERE a.key < 100;
  hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/reg_3' SELECT a.* FROM events a;
  hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_4' select a.invites, a.pokes FROM profiles a;
  hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_5' SELECT COUNT(*) FROM invites a WHERE a.ds='2008-08-15';
  hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_5' SELECT a.foo, a.bar FROM invites a;
  hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/sum' SELECT SUM(a.pc) FROM pc1 a;

選擇一列的sum。avg, min, or max 也可以使用。請注意,對于不包含HIVE-287的Hive版本,您需要使用COUNT(1)代替COUNT(*)

Group By

  hive> FROM invites a INSERT OVERWRITE TABLE events SELECT a.bar, count(*) WHERE a.foo > 0 GROUP BY a.bar;
  hive> INSERT OVERWRITE TABLE events SELECT a.bar, count(*) FROM invites a WHERE a.foo > 0 GROUP BY a.bar;

請注意,對于不包含HIVE-287的Hive版本,您需要使用COUNT(1)代替COUNT(*)

join

  hive> FROM pokes t1 JOIN invites t2 ON (t1.bar = t2.bar) INSERT OVERWRITE TABLE events SELECT t1.bar, t1.foo, t2.foo;

Multitable insert

  FROM src
  INSERT OVERWRITE TABLE dest1 SELECT src.* WHERE src.key < 100
  INSERT OVERWRITE TABLE dest2 SELECT src.key, src.value WHERE src.key >= 100 and src.key < 200
  INSERT OVERWRITE TABLE dest3 PARTITION(ds='2008-04-08', hr='12') SELECT src.key WHERE src.key >= 200 and src.key < 300
  INSERT OVERWRITE LOCAL DIRECTORY '/tmp/dest4.out' SELECT src.value WHERE src.key >= 300;

STREAMING

  hive> FROM invites a INSERT OVERWRITE TABLE events SELECT TRANSFORM(a.foo, a.bar) AS (oof, rab) USING '/bin/cat' WHERE a.ds > '2008-08-09';

在映射階段通過腳本/bin/cat流式傳輸數據(如Hadoop流式傳輸)。
同樣,流式傳輸可以用在reduce方面(請參閱Hive教程以獲得示例)。

簡單的示例用例

MovieLens用戶評級

首先,用制表符分隔的文本文件格式創建一個表格:

CREATE TABLE u_data (
  userid INT,
  movieid INT,
  rating INT,
  unixtime STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;

然后,從下載數據文件MovieLens 100K的上GroupLens數據集頁(其中也有一個readme.txt文件,并解壓縮文件索引):

wget http://files.grouplens.org/datasets/movielens/ml-100k.zip

要么:

curl --remote-name http://files.grouplens.org/datasets/movielens/ml-100k.zip

注意:如果到GroupLens數據集的鏈接 不起作用,請報告HIVE-5341或發送郵件到user@hive.apache.org郵件列表

解壓縮數據文件:

unzip ml-100k.zip

并加載u.data到剛剛創建的表中:

LOAD DATA LOCAL INPATH '<path>/u.data'
OVERWRITE INTO TABLE u_data;

計算表u_data中的行數:

SELECT COUNT(*) FROM u_data;

請注意,對于不包含HIVE-287的舊版Hive ,您需要使用COUNT(1)來代替COUNT(*)。

現在我們可以在表格上進行一些復雜的數據分析u_data

創建weekday_mapper.py

import sys
import datetime

for line in sys.stdin:
  line = line.strip()
  userid, movieid, rating, unixtime = line.split('\t')
  weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday()
  print '\t'.join([userid, movieid, rating, str(weekday)])

使用映射器腳本:

CREATE TABLE u_data_new (
  userid INT,
  movieid INT,
  rating INT,
  weekday INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t';

add FILE weekday_mapper.py;

INSERT OVERWRITE TABLE u_data_new
SELECT
  TRANSFORM (userid, movieid, rating, unixtime)
  USING 'python weekday_mapper.py'
  AS (userid, movieid, rating, weekday)
FROM u_data;

SELECT weekday, COUNT(*)
FROM u_data_new
GROUP BY weekday;

請注意,如果你使用的蜂巢0.5.0或更早的版本,你需要使用COUNT(1)的地方COUNT(*)

Apache Weblog數據

Apache weblog的格式是可定制的,而大多數網站管理員使用默認格式。
對于默認的Apache Weblog,我們可以使用以下命令創建一個表。

有關RegexSerDe的更多信息,請參閱HIVE-662HIVE-1719


CREATE TABLE apachelog (
  host STRING,
  identity STRING,
  user STRING,
  time STRING,
  request STRING,
  status STRING,
  size STRING,
  referer STRING,
  agent STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
  "input.regex" = "([^]*) ([^]*) ([^]*) (-|\\[^\\]*\\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\".*\") ([^ \"]*|\".*\"))?"
)
STORED AS TEXTFILE;
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,182評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,489評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,290評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,776評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,510評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,866評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,860評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,036評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,585評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,331評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,536評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,058評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,754評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,154評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,469評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,273評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,505評論 2 379

推薦閱讀更多精彩內容