在查询表时,SerDe将将一行数据从文件中的字节反序列化为Hive内部使用的对象,以对该行数据进行操作。当执行INSERT或CTAS时(参见“导入数据”在页面441),表的SerDe将将Hive的一行数据的内部表示序列化为写入输出文件的字节。
答案 0 :(得分:10)
答案
有关如何编写SerDe的更多信息,请阅读此post
答案 1 :(得分:6)
在这方面我们可以将Hive视为某种数据库引擎。此引擎正在处理从记录构建的表。
当我们让Hive(以及任何其他数据库)以自己的内部格式工作时 - 我们不在乎。
当我们希望Hive将我们自己的文件作为表(外部表)处理时,我们必须告诉他 - 如何将文件中的数据转换为记录。这正是SerDe的作用。您可以将其视为插件,使Hive能够读/写您的数据。
例如 - 您想使用CSV。以下是CSV_Serde的示例
https://github.com/ogrodnek/csv-serde/blob/master/src/main/java/com/bizo/hive/serde/csv/CSVSerde.java
方法序列化将读取数据,并将其切换为假定为CSV的字段
方法反序列化将记录并将其格式化为CSV。
答案 2 :(得分:1)
Hive可以使用分析半结构化和非结构化数据 (1)复杂数据类型(结构,数组,联合) (2)使用SerDe
SerDe接口允许我们指示配置文件应如何处理。 Serializer将获取hive一直在使用的java对象,并将其转换为hive可以存储的内容,Deserializer将记录的二进制表示转换为hive可以操作的java对象。
答案 3 :(得分:0)
我认为上面的概念是序列化和反序列化的。 Serialise在写入时完成,结构化数据被串行化为位/字节流以进行存储。在读取时,数据从位/字节存储格式反序列化为读取器所需的结构。例如,Hive需要看起来像行和列的结构,但是hdfs将数据存储在位/字节块中,因此在写入时串行化,在读取时反序列化。