在学习Hive的过程中我经常遇到的问题是没有合适的数据文件,比如在读《Programming Hive》这本书的时候就因为Employees这张表没有提供示例数据而倍感挫折。因为Hive默认用'\001'(Ctrl+A)作为字段(Fields)分隔符,'\002'(Ctrl+B)作为集合元素(Collections Items)分隔符,'\003'作为Map类型Key/Values分隔符。在编辑器中插入这几个控制字符(Control Character)需要特殊的处理,而且每个编辑器都不同。下面我要介绍两种办法来生成Hive可以使用的数据文件,其中一种办法就是直接在Vi中插入控制字符,另外一种是在创建Hive Table的时候选择可以直接编辑的分隔符。
方法一:利用编辑器直接插入控制字符,以Vi为例。
$vi supply-20110101.txt
- 在Vi命令模式下,键入:set list,设置控制字符可见,成功后Vi会立即显示一个行结束标志$。填入Hive表中需要的每列数据,比如我这里需要创建一个分区表:
hive (ch09)> create table supply (id int, part string, quantity int) partitioned by (day int);
hive (ch09)> alter table supply add partition (day=20110101);
hive (ch09)> alter table supply add partition (day=20110102);
hive (ch09)> alter table supply add partition (day=20110103);
可以看到一共需要三列数据,分别是id, part, quantity。
10part10100$
我在这里是想输入10作为ID, part10作为part, 100作为quantity,最后的$是行结束标志。
- 然后移动光标到需要插入分隔符的地方,首先键入Ctrl+V,再键入字段分隔符Ctrl+A:
10^Apart10100$
10^Apart10^A100$
11^Apart11^A90$
12^Apart12^A110$
13^Apart13^A80$
hive (ch09)> load data local inpath '${env:HOME}/data/supply-20110103.txt' overwrite into table supply
> partition (day='20110103');
Copying data from file:/root/data/supply-20110103.txt
Copying file: file:/root/data/supply-20110103.txt
Loading data to table ch09.supply partition (day=20110103)
rmr: DEPRECATED: Please use 'rm -r' instead.
Moved: 'hdfs://n8.example.com:8020/user/hive/warehouse/ch09.db/supply/day=20110103' to trash at: hdfs://n8.example.com:8020/user/root/.Trash/Current
Partition ch09.supply{day=20110103} stats: [num_files: 1, num_rows: 0, total_size: 54, raw_data_size: 0]
Table ch09.supply stats: [num_partitions: 3, num_files: 3, num_rows: 0, total_size: 147, raw_data_size: 0]
OK
Time taken: 0.522 seconds
hive (ch09)> select * from supply where day='20110103';
OK
id part quantity day
10 part10 100 20110103
11 part11 90 20110103
12 part12 110 20110103
13 part13 80 20110103
Time taken: 0.229 seconds
可以看到数据完全正确,这里还可以看到,Hive自动把select * 这样的操作转换成文件系统操作,没有生成任何MapReduce Job。
方法二:自定义Hive Table的分隔符。
CREATE TABLE supply (id INT, part STRING, quantity INT) PARTITIONED BY (day INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '.'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY '='
STORED AS SEQUENCEFILE;
这样就可以避开控制字符。
分享到:
相关推荐
本资料包包含了两个关键文件:2013_12.csv 和 Hive指令样例.txt,分别用于理解Hive中的数据文件格式和基本操作命令。 2013_12.csv 文件是一个CSV(Comma Separated Values)文件,这是一种常见的数据交换格式,以...
Hive作为一个基于Hadoop的数据仓库工具,它的主要功能是将结构化的数据文件映射为数据库表,并提供SQL-like查询功能,方便用户对大规模数据进行批处理分析。 课程内容分为十一个章节,涵盖了从基础理论到实际操作的...
4. **遍历数据块**:Hive文件由多个数据块组成,每个数据块可能包含键、子键或值。通过解析文件头获取的数据指针,我们可以逐个访问这些块。 5. **解析键和值**:在数据块中,根据已知的Hive文件格式,解析键和值的...
### ES-HIVE数据互通知识点详解 #### 环境配置 在进行Elasticsearch与Hive的数据互通之前,首先需要确保环境配置正确无误。本文档提到的环境为实验性的单节点集群,具体配置如下: - **操作系统**:Vagrant + ...
DataX 在读取 Hive 中的数据时,实际上是按照 HDFS 文件中的行进行读取的。默认情况下,DataX 处理的文件块大小上限为 256M。如果文件块大小超过这一限制,可能会导致部分数据无法正确读取,从而引发数据缺失问题。 ...
Hive是Apache Hadoop生态系统中的一个数据仓库工具,它允许用户使用SQL(称为HQL,Hive查询语言)对大规模存储在Hadoop分布式文件系统(HDFS)中的结构化数据进行查询和分析。Hive提供了数据整理、离线查询以及用户...
5. **更新Hive元数据**:一旦文件合并完成,你需要更新Hive的元数据,将原来的分区路径替换为新的大文件路径。这可以通过Hive的metastore API或者HQL语句实现。 6. **清理旧文件**:最后,可以删除原始的小文件,但...
3. 加载数据:使用LOAD DATA命令将数据文件加载到HDFS上的指定目录,然后将其与Hive表关联。例如: ```sql LOAD DATA LOCAL INPATH '/path/to/local/file' INTO TABLE my_table PARTITION (date='2022-01-01'); `...
### Hive数据存储模式详解 #### 一、Hive的数据存储 Hive作为一款基于Hadoop的数据仓库工具,其核心功能之一就是提供了一种高效的管理大数据的方式。Hive的数据分为两大类:**表数据**和**元数据**。 - **表数据*...
这种方式涉及到将本地文件系统中的数据导入到 Hive 表中。需要注意的是,在 Hadoop 平台上迁移数据到 Hive 目录时,默认分隔符为逗号(`,`),为了避免数据解析错误,建议在创建表时指定自定义的分隔符,例如 Tab 键...
数据来源于聊天业务系统中导出的 2021 年 11 月 01 日当天 24 小时的用户聊天数据,共 14 万条数据,以 TSV 文本形式存储在文件中,分隔符为制表符 \t。数据获取链接为 ...
### Hive 数据加载与导出详解 #### 创建 Hive 表 在使用 Hive 进行数据分析之前,首先需要创建一张表来存储数据。以下是一段创建分区表的 SQL 语句示例: ```sql CREATE TABLE db_0309.emp ( empno INT, ename ...
在Hive的运行中,配置文件起着至关重要的作用,它们定义了Hive的行为、连接到的数据存储以及性能相关的参数。本篇文章将详细介绍Hive的两个核心配置文件:`hive-site.xml`和`hive-env.sh`。 **1. `hive-site.xml`...
1. **数据加载**:首先,我们需要将“uaction.dat”文件上传到HDFS(Hadoop Distributed File System),这是Hive的数据存储层。然后,使用`CREATE TABLE`语句定义Hive表结构,指定字段名、字段类型以及分隔符。 2....
在大数据处理领域,Hive是一个基于Hadoop的数据仓库工具,它允许用户使用SQL(HQL,Hive Query Language)查询和管理存储在Hadoop文件系统(HDFS)中的大规模数据集。Hive元数据是Hive操作的核心部分,它包含了...
1.将Mysql中的数据迁移到Hdfs文件系统中,然后通过Hive加载HDFS文件系统中的数据值 2.将Hive中的数据迁移到指定Mysql数据库中 注意点: 1.数据迁移的过程中,由于hive的Null值存储为"\N",Mysql存储为NULL值,二者...
你需要以管理员身份登录达梦数据库,然后执行创建表空间的SQL语句,例如创建名为`hive_meta`的表空间,并指定数据文件的位置和大小。接着,创建一个名为`hive`的用户,设定其默认表空间为`hive_meta`,并赋予适当的...
1. **Hive数据源**: Hive是一个基于Hadoop的数据仓库工具,它允许用户使用SQL语法进行数据查询和分析。在本项目中,我们首先需要从Hive表中提取数据。Hive提供了丰富的接口供外部应用访问,包括Hive JDBC和Hive ...
例如,你可以修改`metastore.uris`来设置Hive元数据存储的位置,`hive.exec.local.scratchdir`定义本地临时文件目录,`hive.exec.mode.local.auto`控制是否自动切换到本地模式等。修改这些配置可以影响Hive的性能和...