`

用正则表达式匹配w3c日志,导入hive

    博客分类:
  • hive
阅读更多

用正则表达式匹配w3c日志,导入hive

w3c格式建表语句:

 

CREATE EXTERNAL TABLE w3c(
  host STRING,
  ident STRING,
  username STRING,
  log_date STRING,
  method STRING,
  uri STRING,
  version STRING,
  status STRING,
  flux STRING,
  referer STRING,
  user_agent STRING
  )
PARTITIONED BY(dt STRING, userid STRING, channelid STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
  "input.regex" = "([\\d|.]+)\\s+([^ ]+)\\s+([^ ]+)\\s+\\[(.+)\\]\\s+\"([^ ]+)\\s(.+)\\s([^ ]+)\"\\s+([^ ]+)\\s+([^ ]+)\\s+\"(.+)\"\\s+\"(.+)\"?",
  "output.format.string" = "%1$s %2$s %3$s %4$s %5$s %5$s %6$s %7$s %8$s %9$s" );
 

 

导入数据方式有两种:

1、将指定路径下的文件导入,但是不移动文件

 

alter table w3c add partition (dt='1', userid='1',channelid='1') location 'path';
 

 

2、导入指定文件,并将文件移动到/user/hive/warehouse下

 

load data inpath 'path' overwrite into table w3c partition (dt='1',userid='1',channelid='1');
 

 

删除表的语句

 

drop table tablename;
 

 

显示表内的partition

 

show partitions tablename;

 

显示建表信息

 

describe tablename;显示表内字段及其类型
describe extended tablename;建表的其他配置方面的信息,partition, table type 等等
 

 

将表查询出来导入文件

 

insert overwrite directory 'path' select a.* from w3c a where a.dt='1' and a.userid='1' and channelid='1';
 

 

另外有几点要注意的:

1、导入日志支持.gz等格式
2、在查询表之前要先执行
     hive> add jar /usr/lib/hive/lib/hive-contrib-0.7.1-cdh3u4.jar;
     或者设置hive/conf/hive-default.conf  添加
     <property>
          <name>hive.aux.jars.path</name>
          <value>file:///usr/local/hadoop/hive/lib/hive-contrib-0.7.0-cdh3u0.jar</value>
     </property>
     保存配置

————————————————————————————————————————————————————

下面是学习hive是从https://cwiki.apache.org 摘抄下来的东西:

 

DDL Operations

create

	hive> CREATE TABLE pokes (foo INT, bar STRING);
	hive> CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);
		The partition column is a virtual column. It is not part of the data itself but is derived from the partition that a particular dataset is loaded into.

show tables

 

	hive> SHOW TABLES;
	hive> SHOW TABLES '.*s';
		可以匹配正则表达式
 

shows the list of columns

 

	hive> DESCRIBE invites;
 

ALTER TABLE

 

	hive> ALTER TABLE pokes ADD COLUMNS (new_col INT);
  	hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment');
  	hive> ALTER TABLE events RENAME TO 3koobecaf;
 

 

Dropping tables

 

	hive> DROP TABLE pokes;
 

 

 

 

DML Operations

Loading data from flat files into Hive:

 

	hive> LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;
		If 'local' is omitted then it looks for the file in HDFS.s
		The keyword 'overwrite' signifies that existing data in the table is deleted.If the 'overwrite' keyword is omitted, data files are appended to existing data sets.
	hive> LOAD DATA INPATH '/user/myname/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');
 

 

 

SQL Operations

SELECTS and FILTERS

 

	hive> SELECT a.foo FROM invites a WHERE a.ds='2008-08-15';
		displayed on the console.
	hive> INSERT OVERWRITE DIRECTORY '/tmp/hdfs_out' SELECT a.* FROM invites a WHERE a.ds='2008-08-15';
		into an HDFS directory. 
	hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/local_out' SELECT a.* FROM pokes a;
		into a local directory

	hive> INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a;
  	hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/reg_3' SELECT a.* FROM events a;
  	hive> INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a WHERE a.key < 100;
 	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;
 

 

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;
		Note that for versions of Hive which don't include HIVE-287 , you'll need to use COUNT(1) in place of COUNT(*).

	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

 

	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';
 

 

 

Joins

 

	INSERT OVERWRITE TABLE pv_users
    SELECT pv.*, u.gender, u.age
    FROM user u JOIN page_view pv ON (pv.userid = u.id)
    WHERE pv.date = '2008-03-03';

    LEFT OUTER, RIGHT OUTER or FULL OUTER
    Note that Hive only supports equi-joins.
 

 

 

Aggregations

 

	Multiple aggregations can be done at the same time, however, no two aggregations can have different DISTINCT columns .e.g while the following is possible
	    INSERT OVERWRITE TABLE pv_gender_agg
	    SELECT pv_users.gender, count(DISTINCT pv_users.userid), count(*), sum(DISTINCT pv_users.userid)
	    FROM pv_users
	    GROUP BY pv_users.gender;
    however, the following query is not allowed
	    INSERT OVERWRITE TABLE pv_gender_agg
	    SELECT pv_users.gender, count(DISTINCT pv_users.userid), count(DISTINCT pv_users.ip)
	    FROM pv_users
	    GROUP BY pv_users.gender;
 

——————————————————————————————————————————————————————

下面是从其他网站看的,觉得有用就记录下来

 

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
  [(col_name data_type [COMMENT col_comment], ...)]
  [COMMENT table_comment]
  [PARTITIONED BY (col_name data_type
    [COMMENT col_comment], ...)]
  [CLUSTERED BY (col_name, col_name, ...)
  [SORTED BY (col_name [ASC|DESC], ...)]
  INTO num_buckets BUCKETS]
  [ROW FORMAT row_format]
  [STORED AS file_format]
  [LOCATION hdfs_path]
 

 

   [ROW FORMAT DELIMITED]关键字,是用来设置创建的表在加载数据的时候,支持的列分隔符;

[STORED AS file_format]关键字是用来设置加载数据的数据类型。Hive本身支持的文件格式只有:Text File,Sequence File。如果文件数据是纯文本,可以使用 [STORED AS TEXTFILE]。如果数据需要压缩,使用 [STORED AS SEQUENCE] 。通常情况,只要不需要保存序列化的对象,我们默认采用[STORED AS TEXTFILE]。

 

hive支持的字段类型,并不多,可以简单的理解为数字类型和字符串类型,详细列表如下:

TINYINT

SMALLINT

INT

BIGINT

BOOLEAN

FLOAT

DOUBLE

STRING


 外部表


    EXTERNAL 关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。具体sql如下:

    CREATE EXTERNAL TABLE test_1(id INT, name STRING, city STRING) SORTED BY TEXTFILE ROW FORMAT DELIMITED‘\t’ LOCATION ‘hdfs://../../..’



桶的概念,主要是为性能考虑,可以理解为对分区内列,进行再次划分,提高性能。在底层,一个桶其实是一个文件。如果桶划分过多,会导致文件数量暴增,一旦达到系统文件数量的上限,就杯具了。

 

分享到:
评论

相关推荐

    电话号码及日期时间提取(正则表达式 C)

    在本项目中,“电话号码及日期时间提取(正则表达式 C)”是一个使用C语言编写的程序,它能够从文本中有效地识别和提取中国大陆的手机号码和固定电话号码,以及简体中文网页中的日期和时间信息。 首先,我们要理解...

    正则表达式实现匹配连续数字的方法

    我这两天刚刚学正则表达式。我觉的正则对连续的字符匹配很简单,但是对连续的一段数字匹配就不是很好。正好最近有朋友问了匹配连续数字的正则,就帮忙写...下面这篇文章就主要介绍了正则表达式实现匹配连续数字的方法。

    hivezzy:添加partition支持正则表达式

    然而,原生的Hive仅支持对Partition进行精确匹配,不支持正则表达式查询。`hivezzy`项目似乎旨在扩展Hive的功能,添加了对Partition使用正则表达式的支持。 正则表达式在数据处理中非常强大,它允许我们使用模式...

    正则表达式大全

    正则表达式是一种强有力的工具,用于处理文本中的模式匹配与替换任务。它能够帮助开发者在文本数据中执行搜索、替换以及提取等操作。尽管初学时可能会觉得有些复杂,但一旦掌握了其规则,就能大大提高开发效率。 ##...

    过滤特殊字符及表情符

    - **正则表达式**:使用正则表达式可以高效地匹配并移除或替换特殊字符和表情符号。例如,`[^\w\s]` 可以匹配非字母数字和空格的字符。 - **字符串函数**:Java中的`String.replaceAll()`方法,可以结合正则表达式...

    各种情况手机号清洗udf函数(hive impala)

    我们将涵盖正则表达式在手机号码清洗中的应用,以及如何编写和使用Java UDF在Hive和Impala中实现这个过程。 1. **手机号码格式问题**:手机号码可能因历史记录、输入错误或不同的国家/地区标准而呈现多种格式。例如...

    csv 文件 导入hive

    数据文件

    hive2.0+开启审计日志.pdf

    然而,在Hive 3.0+版本中,由于采用了Log4j2作为默认的日志框架,开启审计日志的过程与Hive 1.0中使用Log4j有所不同。 在Hive 3.0+中,我们需要编辑`hive-log4j2.properties`配置文件来实现审计日志功能。以下是一...

    Atlas2.2.0编译、安装及使用(集成ElasticSearch,导入Hive数据).doc

    Atlas2.2.0 编译、安装及使用(集成 ElasticSearch,导入 Hive 数据) Atlas2.2.0 是一个强大的元数据管理工具,它提供了多种数据源的集成和管理功能。在本文中,我们将详细介绍如何编译、安装和使用 Atlas2.2.0,...

    Flume采集Nginx日志到Hive.rar

    Flume采集Nginx日志到Hive的事务表时需要导入到Flume下的Jar文件,具体使用方式可参见博文:https://blog.csdn.net/l1028386804/article/details/97975539

    hive常用运算和函数1

    9. **JAVA 的 LIKE 操作: RLIKE**: 使用 `RLIKE` 运算符进行Java风格的正则表达式匹配。例如:`hive&gt; select 1 from dual where 'footbar' rlike '^f.*r$';` 10. **REGEXP 操作**: 使用 `REGEXP` 运算符也进行正则...

    Hive内置函数速查表.pdf

    字符串相关的函数如LIKE、RLIKE、REGEXP等可用于对字符串进行模式匹配,其中LIKE允许使用通配符%和_,而RLIKE和REGEXP则支持正则表达式。 数学运算符在Hive中是基本的数据处理功能,包括加法、减法、乘法、除法、...

    基于Hive的搜狗日志分析

    在这个阶段,我们需要使用Hive来分析搜狗日志中的关键词,以了解搜狗日志的关键词分布和趋势。 3.3 UID分析 UID分析是数据分析的第三步。在这个阶段,我们需要使用Hive来分析搜狗日志中的UID,以了解搜狗日志的...

    sqoop从mysql中导入数据到parquet格式的hive中

    sqoop导入数据到hive

    idea 集成使用 hive 需要导入的jar包.rar

    在IntelliJ IDEA中集成Apache Hive进行大数据处理是开发过程中的常见需求。Hive是一个基于Hadoop的数据仓库工具,能够将结构化的数据文件映射为一张数据库表,并提供SQL(HQL,Hive Query Language)查询功能,方便...

    hive函数大全.doc

    RLIKE 操作符用于检查一个字符串是否匹配一个 Java 正则表达式。如果字符串匹配正则表达式,返回 TRUE,否则返回 FALSE。 示例:`SELECT * FROM table_name WHERE column_name RLIKE 'pattern';` 11. REGEXP 操作...

    HIVE函数详解大全

    10. JAVA 的 LIKE 操作:`RLIKE` - 类似于LIKE,但使用正则表达式进行匹配。 11. REGEXP 操作:`REGEXP` - 使用正则表达式进行精确匹配。 二、数学运算 数学运算符用于对数值进行基本的算术操作: 1. 加法操作:`...

    将csv文件放到hive对应的服务器上

    将“數倉數據提供與報表流程開發\码表导入\TY”中csv内容导入hive的码表当中。 目标csv:sfc_b_phase.csv 2、将csv文件放到hive对应的服务器上 hadoop服务器:10.176.153.32 1、将sfc_b_phase.csv放在32的root目录下...

    C# 去掉特定字符(使用ASC码)

    如果你需要处理包含Unicode字符的字符串,可能需要使用其他方法,例如使用正则表达式或者`string.Replace()`函数。 总结来说,C#中通过ASCII码去除特定字符的方法是一种直观且实用的技巧,尤其适用于处理仅包含...

    kettle 从oracle数据库导数据到hive 表

    这是因为 Hive 中建议统一使用 string 类型,以减少数据类型的不匹配问题。 - **字段匹配**:确保 Oracle 表与 Hive 表之间的字段一一对应,字段数量也需相同。这是为了避免数据迁移过程中因字段数量或类型不匹配而...

Global site tag (gtag.js) - Google Analytics