发明内容
为了克服上述现有技术中的不足,本发明提供一种基于Hive支持多字符作为分隔符的方法,方法包括:
创建用户自定义分隔符模块,基于用户自定义分隔符模块创建用户自定义分隔符;
获取用户自定义的分隔符;
根据用户自定义的分隔符对数据进行分割,并将具有用户自定义分隔符的数据进行存储。
优选地,步骤创建用户自定义分隔符模块还包括:
基于继承抽象模块的扩展,创建Hive中的MultiCharDelimitedSerde类,使得用户在创建用户自定义分隔符模块时,设置为MultiCharDelimitedSerde类,支持多字符作为分隔符。
优选地,步骤用户在创建用户自定义分隔符模块时,设置为MultiCharDelimitedSerde类还包括:
将用户创建的用户自定义分隔符模块设置为序列化和反序列化。
优选地,步骤根据用户自定义的分隔符对数据进行分割还包括:
获取待分隔的数据信息,按照第一预设数据划分格式对待分隔的数据信息进行分割,分割成若干个第一分割数据部,在第一分割数据部与第一分割数据部之间设置用户自定义分隔符模块创建的第一自定义分隔符;
按照第二预设数据划分格式对第一分割数据部进行分割,分割成若干个第二分割数据部,在第二分割数据部与第二分割数据部之间设置用户自定义分隔符模块创建的第二自定义分隔符;
按照第三预设数据划分格式对第二分割数据部进行分割,分割成若干个第三分割数据部,在第三分割数据部与第三分割数据部之间设置用户自定义分隔符模块创建的第三自定义分隔符。
优选地,第一预设数据划分格式的分隔区间大于第二预设数据划分格式,第二预设数据划分格式分隔区间大于第三预设数据划分格式;
分隔区间采用位为单位区间,或字节为单位区间,或KB为单位区间,或B为单位区间,或为MB为单位区间。
优选地,步骤用户自定义分隔符模块创建用户自定义分隔符还包括:
设置用户自定义分隔符的序列化及反序列化规则;
基于序列化及反序列化规则对用户自定义分隔符进行序列化及反序列化处理;
创建用户自定义分隔符的序列化及反序列化对应表;
将设置的用户自定义分隔符序列化及反序列化规则,用户自定义分隔符的序列化及反序列化对应表存储到对象列表中,供数据处理使用。
优选地,将按照第一分割数据部,第二分割数据部,第三分割数据部分割后的数据信息,根据序列化及反序列化规则,进行序列化形成序列化数据;
将序列化数据储存至数据库。
从以上技术方案可以看出,本发明具有以下优点:
基于Hive支持多字符作为分隔符的方法中,创建用户自定义分隔符模块,基于用户自定义分隔符模块创建用户自定义分隔符;获取用户自定义的分隔符;根据用户自定义的分隔符对数据进行分割,并将具有用户自定义分隔符的数据进行存储。使得数据仓库支持多字符作为分隔符,对Hive进行改进,支持多字符作为分隔符。
具体实施方式
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将运用具体的实施例及附图,对本发明保护的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本专利中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本专利保护的范围。
本实施例提供一种基于Hive支持多字符作为分隔符的方法,如图1所示,方法包括:
S1,创建用户自定义分隔符模块,基于用户自定义分隔符模块创建用户自定义分隔符;
S2,获取用户自定义的分隔符;
S3,根据用户自定义的分隔符对数据进行分割,并将具有用户自定义分隔符的数据进行存储。
Hive中没有定义专门的数据格式,数据格式可以由用户指定。用户定义数据格式需要指定三个属性:分隔符、行分隔符以及读取文件数据的方法。基于Hive支持多字符作为分隔符的方法扩展了Hive中的分隔符。
具体的,步骤创建用户自定义分隔符模块还包括:基于继承抽象模块的扩展,创建Hive中的MultiCharDelimitedSerde类,使得用户在创建用户自定义分隔符模块时,设置为MultiCharDelimitedSerde类,支持多字符作为分隔符。
步骤用户在创建用户自定义分隔符模块时,设置为MultiCharDelimitedSerde类还包括:将用户创建的用户自定义分隔符模块设置为序列化和反序列化。
本实施例中,如图2所示,步骤根据用户自定义的分隔符对数据进行分割还包括:
S11,获取待分隔的数据信息,按照第一预设数据划分格式对待分隔的数据信息进行分割,分割成若干个第一分割数据部,在第一分割数据部与第一分割数据部之间设置用户自定义分隔符模块创建的第一自定义分隔符;
S12,按照第二预设数据划分格式对第一分割数据部进行分割,分割成若干个第二分割数据部,在第二分割数据部与第二分割数据部之间设置用户自定义分隔符模块创建的第二自定义分隔符;
S13,按照第三预设数据划分格式对第二分割数据部进行分割,分割成若干个第三分割数据部,在第三分割数据部与第三分割数据部之间设置用户自定义分隔符模块创建的第三自定义分隔符。
第一预设数据划分格式的分隔区间大于第二预设数据划分格式,第二预设数据划分格式分隔区间大于第三预设数据划分格式;
分隔区间采用位为单位区间,或字节为单位区间,或KB为单位区间,或B为单位区间,或为MB为单位区间。
可以理解的是,将待分隔的数据信息向根据第一预设数据划分格式进行划分,在按照第二预设数据划分格式对第一分割数据部进行分割,之后再按照第三预设数据划分格式对第二分割数据部进行分割,以此类推,逐步递减。
本实施例中,基于继承抽象模块的扩展为扩展AbstractSerde类,创建MultiCharDelimitedSerde类,用户在创建表时指定MultiCharDelimitedSerde为要用的序列化反序列化方法。
定义分割行数据时所用分隔符参数“delimited”,定义对象列表“row”,用于存储每行中的各数据。
实现方法getDelimited,用来获取创建表时输入的参数“field_delimited”,如果获取不到则抛出异常并退出。由于“field_delimited”参数是用户在创建表时自己定义值,所以可支持用户定义的多个字符作为分隔符。
实现序列化及反序列化方法对传进的数据进行反序列化,根据分隔符参数,对行数据进行分割,获得各数据。将各数据转换对应的类型数据,并存储到储存对象列表里,以供使用。
这样使得Hive支持多字符多为分隔符,为实际应用提供了很大的方便,一方面不必先将数据转换为单字符分隔的数据,另一方面通过自定义稍复杂的分隔符,也降低了数据值中包含分隔符的几率,提高了分割的准确率。
本实施例中,如图3所示,步骤用户自定义分隔符模块创建用户自定义分隔符还包括:
S21,设置用户自定义分隔符的序列化及反序列化规则;
S22,基于序列化及反序列化规则对用户自定义分隔符进行序列化及反序列化处理;
S23,创建用户自定义分隔符的序列化及反序列化对应表;
S24,将设置的用户自定义分隔符序列化及反序列化规则,用户自定义分隔符的序列化及反序列化对应表存储到对象列表中,供数据处理使用。
将按照第一分割数据部,第二分割数据部,第三分割数据部分割后的数据信息,根据序列化及反序列化规则,进行序列化形成序列化数据;将序列化数据储存至数据库。
本实施例中,如图4所示,进一步的实施例为,
S31,创建用户自定义分隔符模块,基于用户自定义分隔符模块创建用户自定义分隔符;
S32,获取用户自定义的分隔符;
S33,获取待分隔的数据信息,按照第一预设数据划分格式对待分隔的数据信息进行分割,分割成若干个第一分割数据部,在第一分割数据部与第一分割数据部之间设置用户自定义分隔符模块创建的第一自定义分隔符;
S34,按照第二预设数据划分格式对第一分割数据部进行分割,分割成若干个第二分割数据部,在第二分割数据部与第二分割数据部之间设置用户自定义分隔符模块创建的第二自定义分隔符;
S35,按照第三预设数据划分格式对第二分割数据部进行分割,分割成若干个第三分割数据部,在第三分割数据部与第三分割数据部之间设置用户自定义分隔符模块创建的第三自定义分隔符,以此类推。
S36,将按照第一分割数据部,第二分割数据部,第三分割数据部分割后的数据信息,根据序列化及反序列化规则,进行序列化形成序列化数据;
S37,将序列化数据储存至数据库。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。