CN112347097B - 支持多版本Hive表分区的数据加载、查询方法及电子装置 - Google Patents
支持多版本Hive表分区的数据加载、查询方法及电子装置 Download PDFInfo
- Publication number
- CN112347097B CN112347097B CN202011011197.0A CN202011011197A CN112347097B CN 112347097 B CN112347097 B CN 112347097B CN 202011011197 A CN202011011197 A CN 202011011197A CN 112347097 B CN112347097 B CN 112347097B
- Authority
- CN
- China
- Prior art keywords
- partition
- data
- version
- interval
- list
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供的支持多版本Hive表分区的数据加载、查询方法及电子装置,包括获取每条数据的分区字段;根据分区字段与各分区字段值列表的匹配关系,将每条数据写入相应的Hive表分区内;若存入哈希分区或自动间隔分区时,分区字段不能与现有的值列表匹配,创建新的哈希分区或自动间隔分区并生成新版本;若数据存入列表分区或区间分区时,列表分区规则或区间分区规则发生改动并生成相应新版本时,写入相应的列表分区或区间分区。本发明能够面对海量数据的存储和查询提供更加高效的复杂分区机制,在保持历史数据分区规则不变的同时,以多版本技术支持对增量数据分区规则在线调整,避免无意义扫描和计算,节省大量时间,极大提高系统的可维护性和查询效率。
Description
技术领域
本发明涉及数据管理和查询领域,尤其涉及一种支持多版本Hive表分区的数据加载、查询方法及电子装置。
背景技术
近年来互联网发展趋势是海量数据储存和处理能力高速增长。随着信息服务的日益深化,要求实现海量数据的长期和低成本储存,这也对运营商的数据储存管理能力提出了很高要求。在众多的开源数据存储平台中,Apache基金会的Hive引起了广泛关注。
Hive基于Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)与MapReduce计算引擎构建,作为一个数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce计算任务,实现了海量数据的加载转换、存储管理和查询功能。除了提供批量数据处理与分析外,Hive也被广泛的用作存储平台,与众多更高效的交互式查询引擎对接,例如Cloudrea公司开源的Impala、Facebook公司开源的Presto以及Apache Spark等查询引擎。很多商业公司都在构建基于Hive的海量数据管理系统来进行海量数据的存储和分析,通过业务数据分析结果指导商业运作。
面对海量的数据规模和快速的查询响应之间的矛盾,Hive利用分区机制在对数据的存放位置进行划分,将数据列的值作为目录分区来存放数据,查询时使用分区列进行条件过滤,只需根据列值直接扫描对应目录下的数据,不扫描其他不相关的分区,快速定位,提高查询效率。分动态和静态分区两种:分区技术可以均衡系统的整体I/O负载并改善查询性能。
然而,现有的Hive分区管理存在两个缺陷。首先是Hive仅支持简单的等值分区方法,无法处理哈希、区间等复杂数据划分的存储与查询场景,而这些复杂的分区规则在处理如时序数据、键值数据场景时非常必要。尽管可以在数据加载前对该数据做一些预处理,如增加一列哈希值作为分区列,但是需要用户显示指定哈希值作为查询条件,影响用户使用的透明性。其次,hive的分区规则无法进行动态调整,而实际的应用场景中,由于海量数据的分布规律是不断变化,同时业务分析需求也在不断变化,一成不变的分区规则在面对上述变化时,会产生数据偏斜与查询缓慢等问题,无法提供高效的数据存储与查询支持。
发明内容
为解决上述问题,本发明公开了一种支持多版本Hive表分区的数据加载、查询方法及电子装置,在现有Hive存储管理架构下,面对海量数据的存储和查询提供更加高效的复杂分区机制,从而避免了无关数据的无意义扫描和计算,可有效节省大量I/O时间。同时以多版本技术支持对增量数据的分区规则的在线调整,支持保留历史数据原有分区方式的同时,针对新到数据的变化在线调整分区方式,极大提高系统的可维护性和查询效率。
为达到上述目的,本发明的技术方案如下:
一种支持多版本Hive表分区的数据加载方法,其步骤包括:
1)获取每条数据的分区字段;
2)根据分区字段与当前版本各分区字段值列表的匹配关系,将每条数据写入相应的Hive表分区内;
其中,通过以下策略管理所述Hive表分区:
a)Hive表分区包括:一或多个哈希分区、一或多个列表分区、一或多个区间分区、一或多个自动间隔分区和一或多个将哈希分区、列表分区、区间分区、自动间隔分区中的多种相结合的综合分区;
b)若数据存入哈希分区或自动间隔分区时,分区字段不能与现有的值列表匹配,则创建一新的哈希分区或自动间隔分区,将数据写入新的哈希分区或自动间隔分区内,并生成新的哈希分区版本或自动间隔分区版本;
c)若数据存入列表分区或区间分区时,相应的列表分区规则与版本或区间分区规则与版本发生改动,则数据根据新的列表分区规则或区间分区规则,写入相应的列表分区或区间分区。
进一步地,列表分区规则的HIVE SQL规则包括:PARTITIONED BY LIST(分区字段)。
进一步地,哈希分区规则的HIVE SQL规则包括:PARTITIONED BY HASH(分区字段,哈希桶数),其中哈希桶数为自然数。
进一步地,区间分区规则的HIVE SQL规则包括:PARTITIONED BY INTERVAL(分区字段,单位标识,自增数量)。
进一步地,自动间隔分区规则的HIVE SQL规则包括:PARTITIONED BY RANGE(分区字段)。
进一步地,区间分区的分区名包括:区间起始时间精确到秒的时间戳数值。
进一步地,哈希分区版本、自动间隔分区版本、列表分区版本和区间分区版本的版本号与Hadoop分布式文件系统的文件夹目录一一对应。
一种支持多版本Hive表分区的数据查询方法,其步骤包括:
1)加载各版本的列表分区规则、哈希分区规则、区间分区规则和自动间隔分区规则;
2)根据查询的数据表字段获取相应版本的列表分区规则、哈希分区规则、区间分区规则和自动间隔分区规则;
3)将根据查询条件获取的待查询分区集合合并,并执行查询算子,获取通过上述方法写入相应的Hive表分区内的相应数据。
一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述所述的方法。
一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机以执行上述所述的方法。
现有技术相比,本发明的优点在于:
1.面对海量数据的存储和查询,本发明基于HIVE提供更加高效的复杂分区机制;
2.在保持历史数据分区规则不变的同时,支持对增量数据的分区规则调整;
3.避免了无关数据的无意义扫描和计算,有效节省大量I/O时间,相比于原HIVE表的分区方式,本发明提出的复杂分区方法在实际应用场景中查询效率显著提高。
4.支持数据的哈希、间隔、列表和区间四种方式的复杂分区以及上述分区方式的组合分区,同时以多版本的方式支持表分区规则的调整,保持历史数据存储的同时支持对增量数据的分区规则调整,更好的支持复杂多变的海量数据高效查询需求。
附图说明
图1多版本复杂分区方法示意图。
图2多版本分区查询流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对根据本发明支持多版本Hive表分区的数据加载、查询方法及电子装置进一步详细说明。
本发明的支持多版本Hive表分区的数据加载、查询方法,包括的技术点如下:
1.本方法支持通过Hive SQL中的数据定义语言(Data Definition Language,DDL)定义数据表的多维分区,支持包括哈希(HASH)、列表(LIST)、区间(RANGE)和自动间隔(INTERVAL)分区和以上方式结合的分区。用户可以基于具体的数据字段和数据分布设定和调整分区规则,保证数据查询时扫描尽可能少的分区数据。
具体分区定义规则为:
(1)列表分区规则
列表分区规则HIVE SQL规则为:
PARTITIONED BY LIST(分区字段)(
PARTITION分区名1VALUES IN(值列表1),
PARTITION分区名2VALUES IN(值列表2),
...)
该分区规则根据每条数据分区字段与值列表的匹配关系写入定义的分区目录内,具体HIVE SQL样例如下:
CREATE TABLE TEST(
SRC STRING,
DES STRING,
TIME DATE)
PARTITIONED BY LIST(SRC)(
PARTITION A VALUES IN(1,4,7),
PARTITION B VALUES IN(2,5,8),
PARTITION C VALUES IN(3,6,9)
);
其中SRC为分区字段,数据写入时会根据每条数据SRC字段与值列表的匹配关系写入/A,/B,/C三个分区目录中。
(2)哈希分区规则
哈希分区规则HIVE SQL规则为:
PARTITIONED BY HASH(分区字段,哈希桶数)
该分区规则根据每条数据分区字段与值列表的匹配关系写入定义的分区目录内,其中,哈希桶数为用户可定义的自然数,哈希函数为系统默认算法,在写入和读取计算时一致。
HIVE SQL样例为:
CREATE TABLE TEST(
SRC STRING,
DES STRING,
TIME DATE)
PARTITIONED BY HASH(SRC,5);
其中SRC为分区字段,数字5位分区的桶数,数据写入时会根据每条数据SRC字段哈希规则将数据写入/0,/1,/2,/3,/4五个分区目录中。
(3)自动间隔分区规则
间隔分区规则HIVE SQL规则为:
PARTITIONED BY INTERVAL(分区字段,单位标识,自增数量)
该分区规则主要用于自增固定间隔的场景,其中,单位为用户可定义的量纲,可由以下方式定义:
该分区规则根据每条数据分区字段与值列表的匹配关系写入自增的时间分区目录内,分区名为区间起始时间的精确到秒的时间戳数值。
HIVE SQL样例为:
CREATE TABLE TEST(
SRC STRING,
DES STRING,
TIME DATE)
PARTITIONED BY INTERVAL(TIME,’H’,8)
其中TIME为分区字段,每间隔8小时自动建立一个分区。
(4)区间分区规则
间隔分区规则HIVE SQL规则为:
PARTITIONED BY RANGE(分区字段)(
PARTITION分区名1VALUES IN(值列表1),
PARTITION分区名2VALUES IN(值列表2),
...)
HIVE SQL样例为:
CREATE TABLE TEST(
SRC STRING,
DES STRING,
TIME DATE)
PARTITIONED BY RANGE(DATE)(
PARTITION 2000VALUES LESS THAN(‘2000-01-01’),
PARTITION 2010VALUES LESS THAN(‘2010-01-01’),
PARTITION 2020VALUES LESS THAN(MAXVALUE))
(5)多维组合分区规则:
支持以上(1)-(4)分区的组合分区,样例如下。
CREATE TABLE TAB(
X INT,
SD STRING,
SRC STRING,
DES STRING,
TIME DATE,
CONTENT STRING)
PARTITIONED BY HASH(SRC,5)
SUBPARTITIONED BY RANGE(TIME)(
PARTITION 2000VALUES LESS THAN(‘2000-01-01’),
PARTITION 2010VALUES LESS THAN(‘2010-01-01’),
PARTITION 2020VALUES LESS THAN(MAXVALUE));
2.支持在线修改数据表的分区方式,即每一个数据表的生命周期内对应多个版本的分区规则,每一个分区规则授予一个唯一的版本号,版本号与HDFS的文件夹目录一一对应。修改数据表的分区规则时,历史数据不做修改,此前的历史数据对应旧版本的分区规则,增量数据对应新的分区规则,即,以多版本技术支持对增量数据的分区规则的在线调整,支持保留历史数据原有分区方式的同时,针对新到数据的变化在线调整分区方式,这样减少了修改分区规则的操作成本,极大提高系统的可维护性和查询效率。
分区的产生方式:对于自动管理的分区(哈希和间隔分区)数据接入时,如果分区不存在,则接入程序根据规则创建对应的分区;对于其他分区(列表和区间分区),由于是固定分区,新增分区由管理员修改规则新增分区(实际上修改了分区规则)
如图1所示,每一个版本分区规则在HDFS表目录下生成一个对应版本的目录如/v1,/v2,版本分区目录下再根据不同的分区规则生成对应的子目录。
3.查询数据表时,查询计划解析所有版本的分区规则,针对不同版本对应的分区数据采用不同的分区规则进行过滤,其流程如图2所示,执行查询时,首先加载数据表分区规则,根据查询的数据表字段过滤分区规则版本,对于每一个版本规则Ri根据查询条件过滤待查询分区集合Pi,合并所有待查询分区Pi,执行查询算子获取查询结果。
这样在兼容不同分区规则的同时,过滤不需要扫描的分区。
例如:
TEST表建表语句为:
CREATE TABLE TEST(
SRC STRING,
DES STRING,
TIME DATE)
PARTITIONED BY HASH(SRC,3);
某一天数据突然增加,需要调整数据的哈希桶数,提高查询效率,则修改分区规则:
ALTER TABLE TEST PARTITIONED BY HASH(SRC,10);
此时,TEST表有v1版本HASH(SRC,3)和V2版本HASH(SRC,10)两个分区规则,处理查询语句如:
SELECT*FROM TAB WHERE SRC=’13’
哈希规则为求余操作,这样查询计划需要查询v1版本下为HASH(’13’)%3=1的目录以及v2版本下为HASH(’13’)%10=3的目录。
特别的,对于有关联操作的数据表,可以用同样的哈希方法(包含相同的哈希数据来源属性、相同的哈希函数),使得类似连接这样的计算可以直接在对应的分区级别进行计算,提高计算效率。
为更好的对本发明进行说明,在下述的实验环境与设置下对本发明进行了验证:
5台华为TaiShan 2280 V2服务器,256GB内存,10*4TB SATA硬盘,CentOS7.4操作系统。
利用TPC-H基准测试程序,生成100GB测试数据。模拟真实查询使用场景,将本方法与Hive原生引擎进行对比。根据l_extendedprice字段值以分别以1000和10000为间隔,设置了11和104两个不同的分区数。
对于11个分区数量的查询语句:
select count(distinct(l_orderkey))from lineitem where lineitem.l_extendedprice>=30000and lineitem.l_extendedprice<40000;
对于104个分区的查询语句:
select count(distinct(l_orderkey))from lineitem where lineitem.l_extendedprice>=33000and lineitem.l_extendedprice<34000;
由于集群资源充足,仅统计查询时间不能体现本发明的查询提升效果,因此还需从查询资源效率(Cumulative CPU secs)维度进行对比,更能体现在多任务并发的场景下效率提升优势。查询实验结果如下:
以上所述实施例仅表达了本发明的实施方式,其描述较为具体,但并不能因此理解为对本发明专利范围的限制。应当指出,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应当以所附权利要求为准。
Claims (6)
1.一种支持多版本Hive表分区的数据加载方法,其步骤包括:
1)获取每条数据的分区字段;
2)根据分区字段与当前版本各分区字段值列表的匹配关系,将每条数据写入相应的Hive表分区内;
其中,通过以下策略管理所述Hive表分区:
a)Hive表分区包括:一或多个哈希分区、一或多个列表分区、一或多个区间分区、一或多个自动间隔分区和一或多个将哈希分区、列表分区、区间分区、自动间隔分区中的多种相结合的综合分区;
b)若数据存入哈希分区或自动间隔分区时,分区字段不能与现有的值列表匹配,则创建一新的哈希分区或自动间隔分区,将数据写入新的哈希分区或自动间隔分区内,并生成新的哈希分区版本或自动间隔分区版本;
c)若数据存入列表分区或区间分区时,相应的列表分区规则与版本或区间分区规则与版本发生改动,则数据根据新的列表分区规则或区间分区规则,写入相应的列表分区或区间分区。
2.如权利要求1所述的方法,其特征在于,区间分区的分区名包括:区间起始时间精确到秒的时间戳数值。
3.如权利要求1所述的方法,其特征在于,哈希分区版本、自动间隔分区版本、列表分区版本和区间分区版本的版本号与Hadoop分布式文件系统的文件夹目录一一对应。
4.一种支持多版本Hive表分区的数据查询方法,其步骤包括:
1)加载各版本的列表分区规则、哈希分区规则、区间分区规则和自动间隔分区规则;
2)根据查询的数据表字段获取相应版本的列表分区规则、哈希分区规则、区间分区规则和自动间隔分区规则;
3)将根据查询条件获取的待查询分区集合合并,并执行查询算子,获取通过权利要求1-3中任一方法写入相应的Hive表分区内的相应数据。
5.一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行权利要求1-3中任一所述方法。
6.一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行如权利要求1-3中任一所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011011197.0A CN112347097B (zh) | 2020-09-23 | 2020-09-23 | 支持多版本Hive表分区的数据加载、查询方法及电子装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011011197.0A CN112347097B (zh) | 2020-09-23 | 2020-09-23 | 支持多版本Hive表分区的数据加载、查询方法及电子装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112347097A CN112347097A (zh) | 2021-02-09 |
CN112347097B true CN112347097B (zh) | 2022-07-29 |
Family
ID=74358047
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011011197.0A Active CN112347097B (zh) | 2020-09-23 | 2020-09-23 | 支持多版本Hive表分区的数据加载、查询方法及电子装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112347097B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114489739B (zh) * | 2022-04-02 | 2022-08-12 | 统信软件技术有限公司 | 软件包更新方法、装置与计算设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105975617A (zh) * | 2016-05-20 | 2016-09-28 | 北京京东尚科信息技术有限公司 | 一种多分区表查询处理的方法和装置 |
CN109902126A (zh) * | 2019-02-18 | 2019-06-18 | 国家计算机网络与信息安全管理中心 | 支持hive自动分区的加载系统及其实现方法 |
CN110222123A (zh) * | 2019-04-24 | 2019-09-10 | 深圳点猫科技有限公司 | 用于教育平台的Hive动态分区加载的方法及电子设备 |
CN110781183A (zh) * | 2019-09-10 | 2020-02-11 | 中国平安财产保险股份有限公司 | Hive数据库中增量数据的处理方法、装置以及计算机设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20180085633A (ko) * | 2017-01-19 | 2018-07-27 | 한국전자통신연구원 | 질의 처리 장치 및 방법 |
-
2020
- 2020-09-23 CN CN202011011197.0A patent/CN112347097B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105975617A (zh) * | 2016-05-20 | 2016-09-28 | 北京京东尚科信息技术有限公司 | 一种多分区表查询处理的方法和装置 |
CN109902126A (zh) * | 2019-02-18 | 2019-06-18 | 国家计算机网络与信息安全管理中心 | 支持hive自动分区的加载系统及其实现方法 |
CN110222123A (zh) * | 2019-04-24 | 2019-09-10 | 深圳点猫科技有限公司 | 用于教育平台的Hive动态分区加载的方法及电子设备 |
CN110781183A (zh) * | 2019-09-10 | 2020-02-11 | 中国平安财产保险股份有限公司 | Hive数据库中增量数据的处理方法、装置以及计算机设备 |
Also Published As
Publication number | Publication date |
---|---|
CN112347097A (zh) | 2021-02-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110795455B (zh) | 依赖关系解析方法、电子装置、计算机设备及可读存储介质 | |
Li et al. | Distributed data management using MapReduce | |
US8060495B2 (en) | Query execution plan efficiency in a database management system | |
US20170083573A1 (en) | Multi-query optimization | |
US8949222B2 (en) | Changing the compression level of query plans | |
US8924373B2 (en) | Query plans with parameter markers in place of object identifiers | |
US9141666B2 (en) | Incremental maintenance of range-partitioned statistics for query optimization | |
Lith et al. | Investigating storage solutions for large data-A comparison of well performing and scalable data storage solutions for real time extraction and batch insertion of data | |
US9747349B2 (en) | System and method for distributing queries to a group of databases and expediting data access | |
US8868595B2 (en) | Enhanced control to users to populate a cache in a database system | |
CN105975617A (zh) | 一种多分区表查询处理的方法和装置 | |
US8626729B2 (en) | Database index monitoring system | |
US20140172905A1 (en) | Performing a function on rows of data determined from transitive relationships between columns | |
US9218394B2 (en) | Reading rows from memory prior to reading rows from secondary storage | |
KR20130049111A (ko) | 분산 처리를 이용한 포렌식 인덱스 방법 및 장치 | |
US8438153B2 (en) | Performing database joins | |
US10990573B2 (en) | Fast index creation system for cloud big data database | |
Weintraub et al. | Needle in a haystack queries in cloud data lakes. | |
CN112347097B (zh) | 支持多版本Hive表分区的数据加载、查询方法及电子装置 | |
JP2017537398A (ja) | 一組の構造化データタームからの非構造化検索クエリの生成 | |
Shen et al. | An efficient LSM-tree-based SQLite-like database engine for mobile devices | |
CN117421302A (zh) | 一种数据处理方法及相关设备 | |
Jiadi et al. | Research on Data Center Operation and Maintenance Management Based on Big Data | |
CN115757479A (zh) | 数据库的查询优化方法、机器可读存储介质与计算机设备 | |
Li et al. | Efficient time-interval data extraction in MVCC-based RDBMS |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |