目录
在Hadoop 0.23上在0.13之前编译Hive(Ant)
安装和配置
您可以通过下载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上使用它需要稍微不同的步骤。
从一个稳定的发行版安装Hive
首先从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添加到您的路径:
$ export PATH=$HIVE_HOME/bin:$PATH
编译Hive源码
最新Hive代码的Hive GIT存储库位于这里:GIT克隆https://git-wip-us.apache.org/repos/asf/hive.git(主分支)。
所有发布版本都在名为“branch-0”的分支中。#”或“为1。#“或即将到来的”分支-2。,除了在“branch-0.8-r2”中发布的0.8.1版本。任何具有其他名称的分支都是正在进行的工作的特性分支。有关详细信息,请参见理解Hive分支。
从0.13开始,Hive使用Apache Maven构建。
编译主干的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/(所有shell脚本)
lib/(需要的jar文件)
conf /(配置文件)
examples/(示例输入和查询文件)
hcatalog / (hcatalog安装)
scripts/ (hive-metastore的升级脚本)
这里,{version}引用当前Hive版本。
如果使用Maven (mvn)构建Hive源代码,对于页面的其余部分,我们将把目录“/packaging/target/apache-hive-{version}- snapshot -bin/apache-hive-{version}- snapshot -bin”作为<install-dir>。
编译分支branch-1
在branch-1中,Hive同时支持Hadoop 1.x 和2.x。您需要通过Maven配置文件指定针对哪个版本的Hadoop构建。针对Hadoop 1.x 构建。x使用profile hadoop-1;Hadoop 2.x hadoop-2使用。例如,针对Hadoop 1构建。,上述mvn命令变为:
$ mvn clean package -Phadoop-1,dist
在Hadoop 0.20上在0.13之前编译Hive
在Hive 0.13之前,Hive是使用Apache Ant构建的。要在Hadoop 0.20上构建一个较老版本的Hive:
$ svn co http://svn.apache.org/repos/asf/hive/branches/branch-{version} hive
$ cd hive
$ ant clean package
$ cd build/dist
# ls
LICENSE
NOTICE
README.txt
RELEASE_NOTES.txt
bin/(所有shell脚本)
lib/(需要的jar文件)
conf /(配置文件)
examples/(示例输入和查询文件)
hcatalog / (hcatalog安装)
scripts/ (hive-metastore的升级脚本)
如果使用Ant,我们将把目录“build/dist”称为<install-dir>。
在Hadoop 0.23上在0.13之前编译Hive(Ant)
要在Ant中针对Hadoop 0.23、2.0.0或其他版本构建Hive,请使用适当的标志进行构建;一些例子如下:
$ ant clean package -Dhadoop.version=0.23.3 -Dhadoop-0.23.version=0.23.3 -Dhadoop.mr.rev=23
$ ant clean package -Dhadoop.version=2.0.0-alpha -Dhadoop-0.23.version=2.0.0-alpha -Dhadoop.mr.rev=23
运行Hive
Hive使用Hadoop,所以:
- 您的路径中必须有Hadoop或
- export HADOOP_HOME = < hadoop-install-dir >
此外,您必须使用下面的HDFS命令来创建/tmp和/user/hive/warehouse(也就是hive.metastore.warehouse.dir),并将它们设置为chmod g+w,然后才能在hive中创建表。
$ $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。由于缺少HiveServer2的多用户、安全性和其他功能,HiveCLI现在不支持使用Beeline 。在命令行运行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 CLI中的HCatalog安装。
运行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_CONF_DIR环境变量来更改Hive配置目录的位置。
- 配置变量可以在<install-dir>/conf/hive-site.xml中重新定义
- Log4j配置存储在<install-dir>/conf/ hivelog4j .properties中
- Hive配置是Hadoop之上的一个覆盖——默认情况下它继承Hadoop配置变量。
- Hive配置可以通过:
- 编辑hive-site.xml并在其中定义任何所需的变量(包括Hadoop变量)
- 使用set命令(参见下一节)
- 调用Hive(已废弃),Beeline 或HiveServer2使用语法:
- $ bin/hive——hiveconf x1=y1——hiveconf x2=y2 //这将变量x1和x2分别设置为y1和y2
- $ bin/hiveserver2——hiveconf x1=y1——hiveconf x2=y2 //这将服务器端变量x1和x2分别设置为y1和y2
- $ bin/beeline ——hiveconf x1=y1——hiveconf x2=y2 //这将客户端变量x1和x2分别设置为y1和y2。
- 将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作业。这对于在小型数据集上运行查询非常有用——在这种情况下,本地模式执行通常比向大型集群提交作业快得多。从HDFS透明地访问数据。相反,本地模式只运行一个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.auto、 hive.exec.mode.local.auto.inputbytes.max、 hive.exec.mode.local.auto.tasks.max:
hive> SET hive.exec.mode.local.auto=false;
注意,此功能在默认情况下是禁用的。如果启用,Hive将分析查询中每个map-reduce作业的大小,如果满足以下阈值,则可以在本地运行它:
- 作业的总输入大小小于:hive.execl .mode.local.auto.inputbytes。最大(默认为128MB)
- map-tasks的总数小于:hive.execd .mode.local.auto.tasks。max(默认为4)
- 所需的reduce任务总数为1或0。
因此,对于小数据集上的查询,或者对于具有多个map-reduce作业的查询,其中后续作业的输入要小得多(由于前一个作业中的reduce /过滤),作业可以在本地运行。
注意,Hadoop服务器节点和运行Hive客户机的机器的运行时环境可能有所不同(因为不同的jvm版本或不同的软件库)。在本地模式下运行时,这可能会导致意外的行为/错误。还要注意,本地模式执行是在单独的子jvm (Hive客户机的子jvm)中完成的。如果用户愿意,可以通过选项hive.map .local.mem控制子jvm的最大内存。默认情况下,它被设置为零,在这种情况下,Hive允许Hadoop确定子jvm的默认内存限制。
Hive日志
Hive使用log4j进行日志记录。默认情况下,CLI不会将日志发送到控制台。默认的日志记录级别在0.13.0之前是警告。从Hive 0.13.0开始,默认日志级别是INFO。
日志存储在/tmp/<user.name>目录中:
- /tmp/<user.name>/hive.log
注意:在本地模式下,Hive 0.13.0之前的日志文件名是“”。log而不是hive.log。这个bug在0.13.0版本中得到了修复(参见HIVE-5528和HIVE-5676)。
若要配置不同的日志位置,请设置hive.log。在HIVE_HOME美元/ conf / hive-log4j.properties dir。确保目录权限设置(chmod 1777 <dir>)。
hive.log.dir=<other_location>
如果用户愿意,可以通过添加如下参数将日志发送到控制台:
bin/hive --hiveconf hive.root.logger=INFO,console //用于HiveCLI (已废弃)
bin/hiveserver2 --hiveconf hive.root.logger=INFO,console
注意,设置通过'set'命令设置 hive.root.logger
的日志记录器不会更改日志属性,因为它们是在初始化时确定的。
Hive还在/tmp/<user.name>/中存储每个Hive会话上的查询日志,但是可以在Hive -site.xml中通过 hive.querylog.location
配置。从Hive 1.1.0开始,可以通过设置 hive.log.explain.output
在INFO级别记录查询的EXPLAIN EXTENDED 输出。输出属性为true。
Hadoop集群上Hive执行期间的日志记录由Hadoop配置控制。通常Hadoop会为每个map生成一个日志文件,并减少存储在执行任务的集群机器上的任务。可以通过单击Hadoop JobTracker Web UI中的Task Details页面来获得日志文件。
当使用本地模式(使用mapreduce.framework.name=local)时,Hadoop/Hive执行日志在客户机上生成。从release 0.6开始——Hive使用Hive - execl -log4j。属性(回到hive-log4j。属性(仅当它丢失时)来确定默认情况下这些日志被交付到何处。默认配置文件为在本地模式下执行的每个查询生成一个日志文件,并将其存储在/tmp/<user.name>下。提供单独配置文件的目的是,如果需要,管理员可以集中执行日志捕获(例如,在NFS文件服务器上)。执行日志对于调试运行时错误非常有用。
有关WebHCat错误和日志记录的信息,请参阅WebHCat手册中的错误代码、响应和日志文件。
错误日志对于调试问题非常有用。请将它们与任何bug(其中有许多bug !)一起发送到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服务器上记录下审计日志。
审计日志具有该函数,一些相关的函数参数记录在metastore 日志文件中。它记录在log4j的INFO级别,因此您需要确保启用了INFO级别的日志记录(参见HIVE-3505)。日志条目的名称是“HiveMetaStore.audit”。
Hive 0.7中添加了安全客户机连接的审计日志(Hive -1948), Hive 0.10中添加了非安全连接的审计日志(Hive -3277);也看到Hive - 2797)。
性能日志记录器
为了通过PerfLogger获得性能指标,您需要为PerfLogger类(HIVE-12675)设置调试级别日志记录。这可以通过在log4j属性文件中设置以下内容来实现。
log4j.logger.org.apache.hadoop.hive.ql.log.PerfLogger=DEBUG
如果日志程序级别已经通过root. root设置为DEBUG。日志程序,要查看性能日志,不需要上述设置。
DDL 操作
Hive DDL操作是用Hive数据定义语言记录的。
创建Hive表
hive> CREATE TABLE pokes (foo INT, bar STRING);
创建一个名为pokes的表,该表有两列,第一列是整数,另一列是字符串。
hive> CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);
创建一个名为invite的表,其中包含两列和一个名为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列替换所有现有列,只更改表的模式,而不更改数据。表必须使用本机SerDe。REPLACE列也可以用于从表的模式中删除列:
hive> ALTER TABLE invites REPLACE COLUMNS (foo INT COMMENT 'only keep the first column');
删除表
hive> DROP TABLE pokes;
Metadata Store
Metadata是一个嵌入式Derby数据库,其磁盘存储位置由Hive配置变量 javax.jdo.option.ConnectionURL 决定。默认情况下,这个位置是./metastore_db
(see conf/hive-default.xml
).
现在,在默认配置中,这个元数据一次只能被一个用户看到。
Metastore 可以存储在JPOX支持的任何数据库中。RDBMS的位置和类型可以由两个变量javax.jdo.option.ConnectionURL
, javax.jdo.option.ConnectionDriverName
. 控制。有关受支持数据库的更多细节,请参考JDO(或JPOX)文档。数据库模式在JDO元数据注释文件包中定义。在 package.jdo
at src/contrib/hive/metastore/src/model
.
将来,metastore本身可以成为一个独立的服务器。
如果希望将metastore作为网络服务器运行,以便可以从多个节点访问它,请参阅在服务器模式下使用Derby的Hive。
数据操纵
Hive DML操作被记录在Hive数据操作语言中。
从平面文件加载数据到Hive中
hive> LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;
将包含按ctrl-a分隔的两列的文件加载到pokes表中。'LOCAL'表示输入文件位于本地文件系统上。如果“LOCAL”被省略,那么它将在HDFS中查找文件。
注:
- load命令不执行针对模式的数据验证。
- 如果文件位于hdfs中,则将其移动到Hive控制的文件系统名称空间中。
Hive目录的根目录由hive-default.xml 配置文件中的 hive.metastore.warehouse.dir 指定。我们建议用户在尝试通过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查询操作记录在Select中。
实例查询
下面显示了一些示例查询。它们可以在build/dist/examples/queries中找到。
更多信息可以在ql/src/test/queries/positive的Hive源代码中找到。
SELECTS and FILTERS
hive> SELECT a.foo FROM invites a WHERE a.ds='2008-08-15';
从invite表中分区ds=2008-08-15的所有行中选择列'foo'。结果不存储在任何地方,而是显示在控制台上。
注意,在接下来的所有示例中,INSERT(插入到Hive表、本地目录或HDFS目录)是可选的。
hive> INSERT OVERWRITE DIRECTORY '/tmp/hdfs_out' SELECT a.* FROM invites a WHERE a.ds='2008-08-15';
从invite表的分区ds=2008-08-15中选择所有行到HDFS目录中。结果数据在该目录中的文件中(取决于映射器的数量)。
注意:分区列(如果有的话)是使用*选择的。它们也可以在投影子句中指定。
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;
查询列的和。也可以使用avg、min或max。注意,对于不包含Hive -287的Hive版本,您需要使用COUNT(1)来代替COUNT(*)。
GROUP BY
hive> SELECT a.foo FROM invites a WHERE a.ds='2008-08-15';
注意,对于不包含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流)在map阶段中传输数据。
类似地,流媒体也可以在reduce端使用(有关示例,请参阅Hive教程)。
简单的用例
MovieLens User Ratings
首先,创建一个以tab分隔的文本文件格式的表:
CREATE TABLE u_data (
userid INT,
movieid INT,
rating INT,
unixtime STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;
然后,在GroupLens数据集页面(其中还有README.txt文件和未压缩文件索引)上从MovieLens 100k下载数据文件:
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
接着将下载的数据放入刚刚创建的表中:
LOAD DATA LOCAL INPATH '<path>/u.data'
OVERWRITE INTO TABLE u_data;
Count the number of rows in 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)])
使用mapper脚本:
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;
注意,如果您正在使用Hive 0.5.0或更早版本,则需要使用COUNT(1)来代替COUNT(*)。
Apache Weblog Data
Apache weblog的格式是可定制的,而大多数web管理员使用默认格式。
对于默认的Apache weblog,我们可以使用以下命令创建一个表。
有关RegexSerDe的更多信息可以在HIVE-662和HIVE-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;
参考地址: