在Hive中定义表格记录格式
Hive用于处理记录并将其映射到Hive表中的列数据类型的Java技术称为Serde,这对于SerializerDeserializer非常短。
该图说明了Serdes如何利用,它将有助于我们了解如何将文件格式与记录格式分开。
所以要注意的第一件事是InputFormat对象。
InputFormat允许我们指定我们自己的Java类,我们是否需要从不同的文件格式读取。
存储为textfile比写入infutformat org.apache.hadoop.mapred.textInputFormat - 默认文本文件输入格式对象的整个Java包树和类名,换句话说。
OutputFormat对象也是如此。
而不是写出整个Java包树和类名,存储为textfile语句,为我们提供所有这些。
Hive允许我们将记录格式与文件格式分开,因此我们如何完成此操作?
简单,我们或者将存储为textfile替换为stexfile,它们可以使用rcfile存储,或者我们可以创建自己的java类,并使用infumformat packageTpath.classname和OutputFormat PackpanTPath.className指定输入和输出类。
最后注意,当蜂巢正在读取来自HDFS(或者本地文件系统)的数据时,Java Deserializer将数据格式化为映射到表列数据类型的记录。
这将表征HiveQL SELECT语句的数据流。
当Hive是编写数据时,Java Serializer接受记录Hive使用并转换它,使其可以将其写入HDFS(或者本地文件系统)。
这将表征HiveQL Create-Table-Select语句的数据流。
因此,InputFormat,OutporFormat和Serde对象允许Hive将表记录格式与表文件格式分开。
Hive捆绑了许多Serdes供我们选择,如果我们在线搜索,我们将找到从第三方提供的更大数字。
如果我们有一个要使用Hive表管理的数据类型,我们也可以开发自己的Serdes。
(这里可能的例子是视频数据和电子邮件数据。
)
在下列列表中,将描述具有Hive的一些Serdes以及我们可能会发现有用的第三方选项。
- LazySimpleserde:与TextFile格式一起使用的默认Serde;它将与以下列表中的_first_table一起使用。
(A) $$HIVE_HOME/bin hive --service cli (B) hive> set hive.cli.print.current.db=true; (C) hive (default)> CREATE DATABASE ourfirstdatabase; OK Time taken: 3.756 seconds (D) hive (default)> USE ourfirstdatabase; OK Time taken: 0.039 seconds (E) hive (ourfirstdatabase)> CREATE TABLE our_first_table ( > FirstName STRING, > LastName STRING, > EmployeeId INT); OK Time taken: 0.043 seconds hive (ourfirstdatabase)> quit; (F) $ls /home/biadmin/Hive/warehouse/ourfirstdatabase.db our_first_table
它也将与下列列表中的data_types_table一起使用。
$./hive --service cli hive> CREATE DATABASE data_types_db; OK Time taken: 0.119 seconds hive> USE data_types_db; OK Time taken: 0.018 seconds (1)Hive> CREATE TABLE data_types_table ( (2) > our_tinyint TINYINT COMMENT '1 byte signed integer', (3) > our_smallint SMALLINT COMMENT '2 byte signed integer', (4) > our_int INT COMMENT '4 byte signed integer', (5) > our_bigint BIGINT COMMENT '8 byte signed integer', (6) > our_float FLOAT COMMENT 'Single precision floating point', (7) > our_double DOUBLE COMMENT 'Double precision floating point', (8) > our_decimal DECIMAL COMMENT 'Precise decimal type based (9) > on Java BigDecimal Object', (10) > our_timestamp TIMESTAMP COMMENT 'YYYY-MM-DD HH:MM:SS.fffffffff" (11) > (9 decimal place precision)', (12) > our_boolean BOOLEAN COMMENT 'TRUE or FALSE boolean data type', (13) > our_string STRING COMMENT 'Character String data type', (14) > our_binary BINARY COMMENT 'Data Type for Storing arbitrary (15) > number of bytes', (16) > our_array ARRAY<TINYINT> COMMENT 'A collection of fields all of (17) > the same data type indexed BY (18) > an integer', (19) > our_map MAP<STRING,INT> COMMENT 'A Collection of Key,Value Pairs (20) > where the Key is a Primitive (21) > Type and the Value can be (22) > anything. The chosen data (23) > types for the keys and values (24) > must remain the same per map', (25) > our_struct STRUCT<first : SMALLINT, second : FLOAT, third : STRING> (26) > COMMENT 'A nested complex data (27) > structure', (28) > our_union UNIONTYPE<INT,FLOAT,STRING> (29) > COMMENT 'A Complex Data Type that can (30) > hold One of its Possible Data (31) > Types at Once') (32) > COMMENT 'Table illustrating all Apache Hive data types' (33) > ROW FORMAT DELIMITED (34) > FIELDS TERMINATED BY ',' (35) > COLLECTION ITEMS TERMINATED BY '|' (36) > MAP KEYS TERMINATED BY '^' (37) > LINES TERMINATED BY 'n' (38) > STORED AS TEXTFILE (39) > TBLPROPERTIES ('creator'='Bruce Brown', 'created_at'='Sat Sep 21 20:46:32 EDT 2013'); OK Time taken: 0.886 seconds
ColumNArserde:与RCFile格式一起使用。
regexserde:正则表达式SERDE,它用Hive船舶启用文本文件的解析,RegexSerde可以形成强大的方法,可以从非结构化博客,半结构化日志文件,电子邮件,推文等中构建蜂巢表中的结构化数据的强大方法来自社交媒体的数据。正则表达式允许我们使用与传统SQL和RDBMSS不兼容的非结构化或者半结构化文本文档,使用HiveQL提取有意义的信息(例如,电子邮件地址)。
HBaseERDE:包含在内的Hive,使其能够与HBase集成。我们可以通过利用此SERDE来存储HBase中的Hive表。
JSonserde:用于阅读和编写JSON数据记录的第三方SERDE。我们可以通过在线搜索json serde for hive来快速查找(通过谷歌和github)两个json serdes。
Avroserde:包含在Hive中,以便我们可以在Hive表中读取和编写Avro数据。
在开始创建表之前,查看语言手册DDL可以非常有用。