IndexR试用与评测

合集下载

Excel技巧如何使用INDEX函数进行数据索引

Excel技巧如何使用INDEX函数进行数据索引

Excel技巧如何使用INDEX函数进行数据索引Excel技巧:如何使用INDEX函数进行数据索引Excel是一款功能强大的电子表格软件,在日常工作和数据处理中被广泛应用。

INDEX函数是Excel中非常实用的函数之一,它可以帮助我们在表格中进行数据索引,快速定位到特定的数值,提高数据处理的效率。

本文将介绍INDEX函数的基本语法和使用技巧,帮助读者更好地掌握Excel的数据索引功能。

一、INDEX函数的基本语法在使用INDEX函数之前,我们先了解一下它的基本语法。

INDEX 函数的语法如下:INDEX(数据数组, 行数, 列数, 区域数)其中,数据数组是指需要进行索引的数据区域;行数是指需要返回的数值所在的行数;列数是指需要返回的数值所在的列数;区域数用于指定返回结果的范围,通常为可选参数,如果不指定,则返回单个数值。

二、INDEX函数的使用技巧1. 返回单个数值INDEX函数最常见的用法是返回单个数值。

例如,我们有一个销售表格,包含产品名称、销售额和销售量等信息。

现在需要根据产品名称查找对应的销售额。

可以使用以下公式:=INDEX(销售额区域, MATCH(查找的产品名称, 产品名称区域, 0))其中,销售额区域是指销售额所在的数据区域;MATCH函数用于查找产品名称在产品名称区域中的位置。

通过这种方式,我们可以快速定位到对应产品的销售额。

2. 返回一列或一行数据除了返回单个数值,INDEX函数还可以返回一列或一行的数据。

例如,我们需要根据产品名称查找对应的销售金额和销售量。

可以使用以下公式:=INDEX(销售额区域&销售量区域, , MATCH(查找的产品名称, 产品名称区域, 0))通过在INDEX函数中使用逗号来指定行数为空,即可返回整列的数据。

通过这种方式,我们可以同时获取到销售金额和销售量的数据。

3. 返回多个数值有时候,我们需要返回多个数值。

例如,我们需要查找销售额大于某个特定数值的产品名称。

Indexer系统全面教程

Indexer系统全面教程

Indexer系统全面教程1.Indexer系统有什么用?做技能时,往往需要给单位绑定一些数据,比如做护盾类技能时需要绑定护盾能抵消的伤害值,做一些持续伤害的技能时需要给技能目标单位绑定伤害来源单位和每秒的伤害值.目前常用的方法有全局变量、缓存和哈希表三种。

全局变量有高效、方便使用的有点,只需要设置变量=xx即可;缺点则是无法支持多人。

市面上大多数支持多人的做法是采用全局变量数组,用玩家索引做数组索引。

在控制单英雄的地图中可以起到很好的效果,但是对于需要支持更多单位、或者每个玩家多个单位的时候,就显得不够用。

缓存和哈希表分别对应1.20版本和1.24版本的魔兽。

缓存需要使用return bug,需要使用jass或自定义代码来存储数据;哈希表提供了GetHandleId函数,但是在触发器中没有合适的接口,最后还是需要通过自定义代码或第三方we(比如ydwe)提供的功能来使用,比较复杂。

使用Indexer系统可以方便的记录很多数据,而且通过扩展,该系统可以支持位移系统等更多的功能。

2.Indexer系统的原理Indexer系统是基于全局变量数组的记录方式。

触发中有设置单位自定义值的功能,自定义值可以是任意整数,而且可以绑定单位而没有其他副作用。

Indexer系统通过一定的算法,使得每个单位都拥有不同的自定义值。

这样,类似于利用玩家索引制作支持多人的技能,可以将单位的自定义值作为数组索引来使得触发支持多人,可以支持任意玩家的任意多个单位(理论上只能支持8191个单位,但绝大多数地图上不会同时存在如此多的单位)。

Indexer系统在地图初始化时选取全地图的单位来设置不同的自定义值。

之后通过单位进入可用地图区域来获取系统中新增的单位。

由于单位进入可用地图区域事件有延时,所以需要新建的单位立刻进入系统时(比如弹幕、马甲持续攻击芙蓉面还),还需要一个新增单位的触发。

当单位死亡时,判断是否为英雄单位。

如果不是英雄,则可以移出Indexer系统。

C# 类中索引器的使用

C# 类中索引器的使用

C# 类中索引器的使用(2009-05-08 15:24:18)标签:it分类:.NETC# 类中索引器的使用索引器(Indexer)是C#引入的一个新型的类成员,它使得类中的对象可以像数组那样方便、直观的被引用(显然,这一功能在创建集合类的场合特别有用,而在其他某些情况下,比如处理大型文件或者抽象某些有限资源等,能让类具有类似数组的行为当然也是非常有用的。

)。

索引器非常类似于属性,但索引器可以有参数列表,且只能作用在实例对象上,而不能在类上直接作用。

定义了索引器的类可以让您像访问数组一样的使用 [ ] 运算符访问类的成员。

(当然高级的应用还有很多,比如说可以把数组通过索引器映射出去等等). 但是,首先让我们概述下属性这个概念以便了解些必要的背景知识。

C#中的属性类在设计时,其字段成员一般被声明为私有的,如果想读取或设置其值,需要提供这样的方法,而在C#中,使用属性更充分体现了对象的封装性,让用户不直接操作类的相关数据,而是通过其提供的访问器进行访问。

属性可以是类、结构和接口的成员。

其定义的形式为:访问修饰符数据类型标识符{访问器声明;}访问修饰符可以是new,static,virtual,absctract,override和public,protected,private,internal的合法组合。

访问器有get访问器和set访问器两种,其声明的格式如下:get { return 要访问的成员; }set { 要设置值的成员 = value; }在使用get访问器时要注意,其使用return要返回的值必须与属性声明的数据类型相同,或能够隐式地转换为属性声明的数据类型。

set访问器的值是通过隐含的参数value带进来的,其主据类型也必须与属性声明的数据类型相同或能够进行隐式转换。

在属性定义中,get访问器和set访问器的规则如下:(1)同时具有get访问器和set访问器的属性,其值是可以读取也可以进行修改的;(2)只有get访问器的属性是只读属性,即这样的属性值仅允许读取,而不能进行修改;(3)只有set访问器的属性为只写属性,即该属性的值仅能修改,而不能读取。

index函数的使用

index函数的使用

index函数的使用Python中的index函数是一种非常常用的函数,它可以用来查找某个元素在列表中的位置。

在本文中,我们将详细介绍index函数的使用方法和注意事项。

index函数的基本用法index函数的基本用法非常简单,只需要在列表后面加上".index(元素)"即可。

例如,我们有一个列表a=[1,2,3,4,5],我们想要查找元素3在列表中的位置,只需要输入a.index(3)即可。

运行结果为2,表示元素3在列表中的位置是第3个。

需要注意的是,如果要查找的元素不在列表中,会报错。

因此,在使用index函数时,最好先判断一下要查找的元素是否在列表中。

index函数的高级用法除了基本用法外,index函数还有一些高级用法,可以更加灵活地使用。

下面我们将介绍两种常见的高级用法。

1. 查找元素的起始位置有时候,我们需要查找某个元素在列表中的起始位置。

例如,我们有一个列表a=[1,2,3,4,5,3,4,5],我们想要查找元素3在列表中的起始位置,只需要输入a.index(3,0)即可。

其中,0表示从列表的第一个元素开始查找。

运行结果为2,表示元素3在列表中的起始位置是第3个。

2. 查找元素的结束位置有时候,我们需要查找某个元素在列表中的结束位置。

例如,我们有一个列表a=[1,2,3,4,5,3,4,5],我们想要查找元素3在列表中的结束位置,只需要输入a.index(3,3)即可。

其中,3表示从列表的第4个元素开始查找。

运行结果为5,表示元素3在列表中的结束位置是第6个。

需要注意的是,如果要查找的元素不在列表中,会报错。

因此,在使用高级用法时,最好先判断一下要查找的元素是否在列表中。

总结index函数是Python中非常常用的函数之一,它可以用来查找某个元素在列表中的位置。

在使用index函数时,需要注意要查找的元素是否在列表中,以及高级用法中的起始位置和结束位置的含义。

index方法

index方法

index方法index方法是一种技术,也被称为搜索索引技术,它可以帮助我们更快速、更有效率地搜索和找到所需信息。

它的基本原理是根据相关的关键字分析文档,从而将文档聚集到一起,以便让我们更容易找到相应的信息。

index方法有许多好处,首先,它可以帮助用户极大地提高访问速度和搜索效率。

因为它能够高效地将相关的文档聚集到一起,因此用户在搜索方面可以节省很多时间,而且搜索结果也更加准确可靠。

其次,index方法也可以更好地组织和归类文档,从而更有利于管理和更新文档。

此外,它还可以提供可靠有效的文档保存和检索,从而有效地防止文档的丢失。

index方法的实施需要一些具体的步骤。

首先,我们需要对每个文档进行分词处理,并为每一个词建立索引,以便在搜索时能够更快地找到相应的文档。

其次,我们需要编写一些特定的搜索规则,以便在用户输入关键字之后,能够根据这些规则进行有效搜索。

最后,需要按照用户的要求,提供相应的文档。

index方法一直受到众多企业的青睐,因为它的使用可以节省大量的人力和物力,而且对于企业的文档管理也有很大帮助。

同时,index方法也被广泛应用于搜索引擎、搜索目录等网络应用中,为用户提供更加便利的搜索服务。

随着科学技术的进步,index方法也在不断发展。

比如,基于机器学习技术的自动index技术可以有效地提高文档检索的准确性,而基于大数据技术的index技术则可以有效地支持大规模数据的检索和分析。

总的来说,index技术的不断发展将极大地改善文档检索的准确性和效率,给用户提供更加便捷的搜索服务。

index方法在众多领域有着重要的应用,它不仅能够帮助用户更快速、更有效率地搜索信息,而且也能够更好地组织和归类文档,提升文档的可靠性和安全性。

因此,index方法已经成为当今社会必不可少的一种技术。

python中index索引函数返回表或区域中的值或值的引用 -回复

python中index索引函数返回表或区域中的值或值的引用 -回复

python中index索引函数返回表或区域中的值或值的引用-回复什么是索引函数?索引函数是Python中一个重要的内置函数,用于在表或区域中查找特定值或值的引用。

在Python中,索引函数主要有两种形式——列表索引和字符串索引,分别用于处理列表和字符串类型的数据。

列表索引:列表索引是指通过指定索引位置获取列表中的某个元素。

在Python中,列表是一种有序、可变的数据类型,可以通过列表索引来获取列表中特定位置的值。

在列表中,索引位置是从0开始的,即第一个元素的索引为0,第二个元素的索引为1,依此类推。

例如,对于一个包含四个元素的列表['apple', 'banana', 'orange','grape'],我们可以使用索引函数来获取特定位置的元素。

比如,使用索引0可以获取到列表的第一个元素'apple',使用索引2可以获取到列表的第三个元素'orange'。

字符串索引:字符串索引是指通过指定索引位置获取字符串中的某个字符。

在Python 中,字符串是一种有序、不可变的数据类型,可以通过字符串索引来获取字符串中特定位置的字符。

与列表索引类似,字符串的索引位置同样是从0开始的。

例如,对于一个字符串'Hello, World!',我们可以使用索引函数来获取特定位置的字符。

比如,使用索引6可以获取到字符串中的第七个字符',',使用索引12可以获取到字符串中的第十三个字符'!'。

那么索引函数具体是如何使用的呢?以下是索引函数的使用方式以及相关示例:1. 列表索引:要获取列表中特定位置的元素,可以使用列表名后接索引值的方式,通过中括号内的索引位置来获取列表中的元素。

示例1:fruits = ['apple', 'banana', 'orange', 'grape']print(fruits[0]) # 输出结果为:'apple'print(fruits[2]) # 输出结果为:'orange'示例2:numbers = [1, 2, 3, 4, 5]print(numbers[3]) # 输出结果为:4print(numbers[1]) # 输出结果为:22. 字符串索引:要获取字符串中特定位置的字符,同样可以使用字符串名后接索引值的方式,通过中括号内的索引位置来获取字符串中的字符。

单索引的建立和使用方法

单索引的建立和使用方法

单索引的建立和使用方法宝子,今天咱来唠唠单索引的那些事儿。

啥是单索引呢?简单来说,就像是给数据建了个小目录。

比如说你有一堆书,单索引就像是给某一类书单独做个小标签,方便你快速找到它。

建立单索引呢,不同的数据库或者软件可能有点小差别。

在很多数据库里呀,你得先确定你要给哪个字段建索引。

就好比你想给那些讲爱情故事的书做个索引,那这个“爱情故事”这个分类就是那个字段。

一般会有专门的语句或者操作界面来做这个事儿。

比如说在SQL里,你可能会用类似“CREATE INDEX index_name ON table_name (column_name);”这样的语句。

这里的“index_name”就是你给这个索引取的小名字,“table_name”是你的数据表名,“column_name”就是你要建索引的那个字段啦。

这就像是给你的那堆爱情故事书贴上“爱情故事索引”的小标签,并且告诉系统这个标签放在哪儿。

那这个单索引咋用呢?当你要查找数据的时候,它就发挥大作用啦。

就像你想找一本特别感人的爱情故事书,要是没有索引,你可能得在一堆书里慢慢翻。

但是有了这个索引,就像有个小向导一样,能快速把你带到那堆爱情故事书面前。

在数据库里也是,如果你要查询某个特定字段的数据,有了索引,查询速度那叫一个快。

比如说你要找所有年龄是25岁的人的信息,要是这个“年龄”字段有索引,数据库就不用把整个数据表都翻个遍,直接根据索引就能定位到相关的数据啦。

不过呢,宝子,建索引也不是越多越好哦。

就像你不能给每一本书都单独做个超级复杂的索引,那样可能会让整个系统变得很臃肿。

太多的索引可能会占用更多的空间,而且在数据更新的时候,索引也得跟着更新,会让更新操作变慢呢。

总之呢,单索引是个很有用的小工具,只要用得好,就能让我们在数据的海洋里更轻松地找到我们想要的东西啦。

Excel中的INDEX函数的妙用技巧

Excel中的INDEX函数的妙用技巧

Excel中的INDEX函数的妙用技巧在日常工作中,Excel是我们经常使用的办公软件之一。

其中的函数功能更是提高了我们的工作效率。

而INDEX函数作为Excel中的常用函数之一,可以帮助我们在处理数据时更灵活、高效地进行操作。

本文将介绍一些INDEX函数的妙用技巧,帮助读者更好地掌握和应用该函数。

1. 概述INDEX函数是Excel中的一种查找函数,其主要功能是通过指定的行列索引,返回单元格区域中相应位置的数值。

它的基本语法如下:=INDEX(返回区域,行索引,列索引)2. 根据条件查找数据INDEX函数可以根据指定条件查找数据,一般配合MATCH函数一起使用。

MATCH函数用于返回某个值在数据范围中的位置,而INDEX函数则根据这个位置返回相应的数值。

以下是一个例子:假设我们有一个销售数据表格,包含产品名称、销售额和销售数量。

我们可以使用INDEX函数和MATCH函数结合,根据产品名称查找对应的销售额。

具体的公式如下:=INDEX(销售额区域,MATCH(指定产品名称,产品名称列表,0))3. 在多个工作表中进行数据查找有时候我们的数据可能分布在多个工作表中,如果需要根据某些条件在多个工作表中查找数据,INDEX函数也可以轻松实现。

以下是一个实例:假设我们有三个工作表A、B、C,分别存储着不同地区的销售数据。

我们要根据销售额进行排名,并将排名结果放在新的工作表中。

具体的公式如下:=INDEX(销售额区域,MATCH(当前销售额,销售额列表,0))4. 动态寻找最大值和最小值INDEX函数还可以帮助我们寻找数据中的最大值和最小值,结合MATCH函数和MAX函数或MIN函数使用。

以下是一个例子:假设我们有一个学生成绩表格,包含学生姓名和成绩。

我们可以使用INDEX函数、MATCH函数和MAX函数来寻找最高分的学生姓名。

具体的公式如下:=INDEX(姓名区域,MATCH(MAX(成绩列表),成绩列表,0))5. 数据透视表中应用INDEX函数在数据透视表中也有着广泛的应用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

IndexR试用与评测IndexR试用o建表o导入数据o查询o删除表IndexR评测o测试目的o测试版本o集群配置o测试素材o测试方法o测试用例o测试结果o测试结论IndexR试用建表创建json在/home/hadoop/app/indexr-tool/example目录创建一个文件叫test_schema2.json,内容如下:{"schema":{"columns":[{"name": "date", "dataType": "bigint"},{"name": "d1", "dataType": "string"},{"name": "m1", "dataType": "int"},{"name": "m2", "dataType": "bigint"},{"name": "m3", "dataType": "float"},{"name": "m4", "dataType": "double"}]}}创建表cd /home/hadoop/app/indexr-tool/exampletools.sh -cmd settb -t test2 -c test_schema2.json检验是否成功sqlline -u jdbc:drill:schema=indexr;zk=petabase-12,petabase-31,petabase-32:2181 0:jdbc:drill:schema=indexr> select * from indexr.test2 limit 10;导入数据Hive中创建外部表,外部表与drill中的test2共享同一个路径,且表结构和存储格式完全一致,如下:CREATE EXTERNAL TABLE IF NOT EXISTS test2 ( `date` int, `d1` string, `m1` int, `m2` bigint, `m3` float, `m4` double)ROW FORMAT SERDE 'io.indexr.hive.IndexRSerde'STORED AS INPUTFORMAT 'io.indexr.hive.IndexRInputFormat' OUTPUTFORMAT'io.indexr.hive.IndexROutputFormat'LOCATION 'hdfs://petabase-11:9000/indexr/segment/test2'; hive中插入或导入数据hive > insert into table test2 values(20160701,'mac',100,192444,1.55,-331.43555);hive和drill同步test2数据cd .../indexr-toolbin/tools.sh -cmd notifysu -t test2查询drill中检索数据sqlline -u jdbc:drill:schema=indexr;zk=petabase-12,petabase-31,petabase-32:2181 0:jdbc:drill:schema=indexr> select * from indexr.test2 limit 10;删除表移除目标表上所有的采集节点bin/tools.sh -cmd rttnode -t test2tools.sh -cmd rmrtt -t test2 -host hostA,hostB删除hdfs上对应的目录与文件hdfs dfs -rm -r ${indexr.fs.data.root}/segment/test2删除indexR表tools.sh -cmd rmtb -t test2hive中同步删除该表hive > drop table test2;IndexR评测测试目的indexR格式与parquet格式在典型的BI应用场景下的性能对比测试版本indexR 0.3集群配置cpu:Intel(R) Core(TM) i7-4820K CPU @ 3.70GHz (1U 4Core)mem: 64G节点个数:5测试素材使用某项目中的主要事实表作为测试用表,表结构的建表语句如下:create table isdzd_b0_2y_r(userid_ string, btype_ string, shtag_ string, shtag2_ string, option_ string, f2 double, f3 double, f4 double, f5 double, f6 double, f7 double, f8 double, f9 double, f10 double, f11 double, f12 double, f13 double, f14 double, f15 double, f16 double, f17 double, f18 double, f19 double, f20 double, f21 double, f22 double, f23 double, f24 double, f25 double, f26 double, f27 double, f28 double, f29 double, f30 double, f31 double, f32 double, f33 double, f34 double, f35 double, f36 double, f37 double, f38 double, f39 double, f40 double, f41 double, f42 double, f43 double, f44 double, f45 double, f46 double, f47 double, f48 double, f49 double, f50 double, f51 double, f52 double,f53 double, f54 double, f55 double, f56 double, f57 double, f58 double, f59 double, f60 double, f61 double, f62 double, f63 double, f64 double, f65 double, f66 double, f67 double, f68 double, f69 double, f70 double, f71 double, f72 double, f73 double, f74 double, f75 double, f76 double, f77 double, f78 double, f79 double, f80 double, f81 double, f82 double, f83 double, f84 double, f85 double, f86 double, f87 double, f88 double, f89 double, f90 double, f91 double, f92 double, f93 double, f94 double, f95 double, f96 double, f97 double, f98 double, f99 double, f100 double, f101 double, f102 double, f103 double, f104 double, f105 double, f106 double, f107 double, f108 double, f109 double, f110 double, f111 double, f112 double, f113 double, f114 double, nsrsbh string, nsrmc string, hydm string, djzclx string, xzqh string, zzsjnfs string, zzsyhzc string, upid_ string,bbq_ string )ROW FORMAT SERDE'io.indexr.hive.IndexRSerde'STORED AS INPUTFORMAT 'io.indexr.hive.IndexRInputFormat' OUTPUTFORMAT 'io.indexr.hive.IndexROutputFormat';测试方法分别测试在2亿和10亿的数据量下,indexR与parquet在ad-hoc场景下的性能差异,使用apache drill 1.10作为上层计算引擎测试用例场景用例sql用例即席分析_1个维、1个指标select sum(a.F7) as F70, SUBSTR(a.XZQH, 1, 2) as XZQH0 from indexr.`isdzd_b0_10y_r` awhere (a.HYDM IS NOT NULL)group by SUBSTR(a.XZQH, 1, 2) order by true limit 600;即席分析_ 2个维、5个指标select sum(a.F7) as F70,sum(a.F8) as F80,sum(a.F9) asF90,sum(a.F12) as F120,sum(a.F13) as F130, SUBSTR(a.XZQH,1,2) as XZQH0, SUBSTR(a.DJZCLX,1,1) as DJZCLX0from indexr.`isdzd_b0_10y_r` awhere (a.HYDM IS NOT NULL)group by SUBSTR(a.XZQH,1,2), SUBSTR(a.DJZCLX,1,1) order by true limit 600;一般报表_1个维,5select count(a.NSRSBH) as C2,sum(a.F15) as D2,sum(a.F25) as E2,sum(a.F30) as F2,sum(a.F33) as G2,sum(a.F10) as H2, SUBSTR(a.XZQH, 1, 2) as B2from indexr.`isdzd_b0_10y_r` a个指标where ((a.HYDM IS NOT NULL) AND (a.BBQ_ like '2014%') AND (2>1)) group by SUBSTR(a.XZQH, 1, 2)order by sum(a.F10) desc nulls last limit 1000;一般报表_1个维,20个指标select C2 as C2,D2 as D2,E2 as E2,F2 as F2,G2 as G2,H2 as H2,I2 as I2,J2 as J2,K2 as K2,L2 as L2,M2 as M2,N2 as N2,O2 as O2,P2 asP2,Q2 as Q2,R2 as R2,S2 as S2,T2 as T2,U2 as U2,V2 as V2,B2 asB2,B2_sortn as B2_sortnfrom (select a.* from (select sum(a.F15) as C2,sum(a.F25) as D2,sum(a.F30) asE2,sum(a.F33) as F2,sum(a.F10) as G2,sum(a.F37) as H2,sum(a.F42) as I2,sum(a.F48) as J2,sum(a.F49) as K2,sum(a.F50) as L2,sum(a.F52) as M2,sum(a.F53) as N2,sum(a.F54) as O2,sum(a.F55) asP2,sum(a.F56) as Q2,sum(a.F57) as R2,sum(a.F59) as S2,sum(a.F60) as T2,sum(a.F60) as U2,sum(a.F58) as V2, SUBSTR(a.XZQH, 1, 2) as B2,sum(a.F10) as B2_sortnfrom indexr.`isdzd_b0_10y_r` awhere ((a.HYDM IS NOT NULL) AND (a.BBQ_ like '2014%') AND (2>1)) group by SUBSTR(a.XZQH, 1, 2) order by sum(a.F10)) a) b limit 40;多级浮动_ 2个维,5个指标select C3 as C3,D3 as D3,E3 as E3,F3 as F3,G3 as G3,C2 as C2,D2 as D2,E2 as E2,F2 as F2,G2 as G2,B3 as B3,B2 as B2,B2_sortn asB2_sortnfrom (select a.C3 as C3,a.D3 as D3,a.E3 as E3,a.F3 as F3,a.G3 as G3,b.C2 as C2,b.D2 as D2,b.E2 as E2,b.F2 as F2,b.G2 as G2,a.B3 as B3,a.B2 as B2,row_number() over (partition by a.B3 order by b.G2 desc nulls last) as B2_sortnfrom (select sum(a.F15) as C3,sum(a.F25) as D3,sum(a.F30) asE3,sum(a.F33) as F3,sum(a.F10) as G3, SUBSTR(a.DJZCLX, 1, 1) as B3, SUBSTR(a.XZQH, 1, 2) as B2from indexr.`isdzd_b0_10y_r` awhere ((a.HYDM IS NOT NULL) AND (a.BBQ_ like '2014%') AND (2>1)) group by SUBSTR(a.XZQH, 1, 2), SUBSTR(a.DJZCLX, 1, 1)) aleft join (select sum(a.F15) as C2,sum(a.F25) as D2,sum(a.F30) asE2,sum(a.F33) as F2,sum(a.F10) as G2, SUBSTR(a.XZQH, 1, 2) as B2 from indexr.`isdzd_b0_10y_r` awhere ((a.HYDM IS NOT NULL) AND (a.BBQ_ like '2014%') AND (2>1)) group by SUBSTR(a.XZQH, 1, 2)) bon (a.B2=b.B2)) awhere (B2_sortn<=40)order by B3 nulls first,B2_sortn nulls first limit 1000;多级浮动_ 2个维,20个指标select C3 as C3,D3 as D3,E3 as E3,F3 as F3,G3 as G3,H3 as H3,I3 as I3,J3 as J3,K3 as K3,L3 as L3,M3 as M3,N3 as N3,O3 as O3,P3 asP3,Q3 as Q3,R3 as R3,S3 as S3,T3 as T3,U3 as U3,V3 as V3,C2 asC2,D2 as D2,E2 as E2,F2 as F2,G2 as G2,H2 as H2,I2 as I2,J2 asJ2,K2 as K2,L2 as L2,M2 as M2,N2 as N2,O2 as O2,P2 as P2,Q2 asQ2,R2 as R2,S2 as S2,T2 as T2,U2 as U2,V2 as V2,B3 as B3,B2 asB2,B2_sortn as B2_sortnfrom (select a.C3 as C3,a.D3 as D3,a.E3 as E3,a.F3 as F3,a.G3 as G3,a.H3 as H3,a.I3 as I3,a.J3 as J3,a.K3 as K3,a.L3 as L3,a.M3 as M3,a.N3 as N3,a.O3 as O3,a.P3 as P3,a.Q3 as Q3,a.R3 as R3,a.S3 as S3,a.T3 as T3,a.U3 as U3,a.V3 as V3,b.C2 as C2,b.D2 as D2,b.E2 as E2,b.F2 as F2,b.G2 as G2,b.H2 as H2,b.I2 as I2,b.J2 as J2,b.K2 as K2,b.L2 asL2,b.M2 as M2,b.N2 as N2,b.O2 as O2,b.P2 as P2,b.Q2 as Q2,b.R2 as R2,b.S2 as S2,b.T2 as T2,b.U2 as U2,b.V2 as V2,a.B3 as B3,a.B2 asB2,row_number() over (partition by a.B3 order by b.G2 desc nulls last) as B2_sortnfrom (select sum(a.F15) as C3,sum(a.F25) as D3,sum(a.F30) asE3,sum(a.F33) as F3,sum(a.F10) as G3,sum(a.F37) as H3,sum(a.F42) as I3,sum(a.F48) as J3,sum(a.F49) as K3,sum(a.F50) as L3,sum(a.F52) as M3,sum(a.F53) as N3,sum(a.F54) as O3,sum(a.F55) asP3,sum(a.F56) as Q3,sum(a.F57) as R3,sum(a.F59) as S3,sum(a.F60) as T3,sum(a.F60) as U3,sum(a.F58) as V3, SUBSTR(a.DJZCLX, 1, 1) as B3, SUBSTR(a.XZQH, 1, 2) as B2from indexr.`isdzd_b0_10y_r` awhere ((a.HYDM IS NOT NULL) AND (a.BBQ_ like '2014%') AND (2>1)) group by SUBSTR(a.XZQH, 1, 2), SUBSTR(a.DJZCLX, 1, 1)) aleft join (select sum(a.F15) as C2,sum(a.F25) as D2,sum(a.F30) asE2,sum(a.F33) as F2,sum(a.F10) as G2,sum(a.F37) as H2,sum(a.F42) as I2,sum(a.F48) as J2,sum(a.F49) as K2,sum(a.F50) as L2,sum(a.F52) as M2,sum(a.F53) as N2,sum(a.F54) as O2,sum(a.F55) asP2,sum(a.F56) as Q2,sum(a.F57) as R2,sum(a.F59) as S2,sum(a.F60) as T2,sum(a.F60) as U2,sum(a.F58) as V2, SUBSTR(a.XZQH, 1, 2) as B2from indexr.`isdzd_b0_10y_r` awhere ((a.HYDM IS NOT NULL) AND (a.BBQ_ like '2014%') AND (2>1)) group by SUBSTR(a.XZQH, 1, 2)) bon (a.B2=b.B2)) awhere (B2_sortn<=40)order by B3 nulls first,B2_sortn nulls first limit 1000;图表展现_单图单表select C2 as C2,D2 as D2,B2 as B2,B2_sortn as B2_sortnfrom (select sum(a.F15) as C2,sum(a.F33) as D2, SUBSTR(a.XZQH, 1, 2) as B2,sum(a.F33) as B2_sortnfrom indexr.`isdzd_b0_10y_r` awhere ((a.HYDM IS NOT NULL) AND (a.BBQ_ like '2014%') AND (2>1)) group by SUBSTR(a.XZQH, 1, 2) order by sum(a.f33) desc nulls last) a order by B2_sortn nulls first limit 1000;图表展现_双图双表select * from (select C2 as C2,D2 as D2,B2 as B2,B2_sortn as B2_sortnfrom (select * from (select sum(a.F15) as C2,sum(a.F33) as D2, SUBSTR(a.HYDM, 1, 1) as B2,sum(a.F33) as B2_sortnfrom indexr.`isdzd_b0_10y_r` awhere ((a.HYDM IS NOT NULL) AND (a.BBQ_ like '2014%') AND (2>1))group by SUBSTR(a.HYDM, 1, 1) order by sum(a.F33) desc nulls last) a limit 40) border by B2_sortn nulls first limit 1000 ) aunion allselect * from (select C2 as C2,D2 as D2,B2 as B2,B2_sortn as B2_sortnfrom (select * from (select sum(a.F15) as C2,sum(a.F33) as D2, SUBSTR(a.XZQH, 1, 2) as B2,sum(a.F33) as B2_sortnfrom indexr.`isdzd_b0_10y_r` awhere ((a.HYDM IS NOT NULL) AND (a.BBQ_ like '2014%') AND (2>1)) group by SUBSTR(a.XZQH, 1, 2) order by sum(a.F33)) a limit 40) b order by B2_sortn nulls first limit 1000) b;统计报表下钻_折叠展开select * from (select sum(a.F15) as B2,sum(a.F25) as C2,sum(a.F30) asD2,sum(a.F33) as E2,sum(a.F10) as F2,sum(a.F37) as G2,sum(a.F42) as H2,sum(a.F48) as I2,sum(a.F49) as J2,sum(a.F50) asK2,sum(a.F52) as L2,sum(a.F53) as M2,sum(a.F54) as N2,sum(a.F55) as O2,sum(a.F56) as P2,sum(a.F57) as Q2,sum(a.F59) asR2,sum(a.F60) as S2,sum(a.F60) as T2,sum(a.F58) as U2,'000000' as A2from indexr.`isdzd_b0_10y_r` awhere ((a.HYDM IS NOT NULL) AND (a.BBQ_ like '2014%') AND (2>1)) order by true limit 1000) aunion allselect * from (select sum(a.F15) as B2,sum(a.F25) as C2,sum(a.F30) asD2,sum(a.F33) as E2,sum(a.F10) as F2,sum(a.F37) as G2,sum(a.F42) as H2,sum(a.F48) as I2,sum(a.F49) as J2,sum(a.F50) asK2,sum(a.F52) as L2,sum(a.F53) as M2,sum(a.F54) as N2,sum(a.F55) as O2,sum(a.F56) as P2,sum(a.F57) as Q2,sum(a.F59) asR2,sum(a.F60) as S2,sum(a.F60) as T2,sum(a.F58) as U2,SUBSTR(a.XZQH, 1, 2) as A2from indexr.`isdzd_b0_10y_r` awhere ((a.HYDM IS NOT NULL) AND (a.BBQ_ like '2014%') AND (2>1) AND (2>1))group by SUBSTR(a.XZQH, 1, 2) order by true limit 1000 ) b;统计报表下钻_跳转select sum(a.F15) as C2,sum(a.F25) as D2,sum(a.F30) asE2,sum(a.F33) as F2,sum(a.F10) as G2,sum(a.F37) as H2,sum(a.F42) as I2,a.DJZCLX as B2,max(b.caption_) as mc_B20from indexr.`isdzd_b0_10y_r` aleft join indexr.`dim_2014nsszld_nsrdjzclx` bon (a.DJZCLX=b.id_)where ((a.HYDM IS NOT NULL) AND (a.BBQ_ like '2014%') AND (2>1)) group by a.DJZCLXorder by sum(a.F33) desc nulls last limit 1000;图表联动select sum(a.F30) as B3,sum(a.F80) as C3,sum(a.F102) as D3, SUBSTR(a.XZQH, 1, 2) as A3from indexr.`isdzd_b0_10y_r` awhere ((a.HYDM IS NOT NULL) AND (a.BBQ_ like '2014%') AND (2>1))group by SUBSTR(a.XZQH, 1, 2) order by true limit 1000; 测试结果场景用例 / drill 计算框架2亿10亿indexR Parquet indexR Parquet即席分析_1个维、1个指标7.5s 9.1s 36.2s 43.1s即席分析_ 2个维、5个指标38.4s 21.1s 98.8s 89.4s一般报表_1个维,5个指标10.2s 16.9s 42.9s 97.5s一般报表_1个维,20个指标 4.9s 26.6s 21.3s 140.8s多级浮动_ 2个维,5个指标 4.0s 17.0s 15.5s 74.2s多级浮动_ 2个维,20个指标 13.9s 36.1s 35.3s 172.6s图表展现_单图单表 2.1s 5.9s 9.8s 20.2s图表展现_双图双表 2.3s 6.3s 10.2s 27.5s统计报表下钻 _折叠展开8.3s 32.7s 27.7s 159.2s统计报表下钻 _跳转 2.3s 7.9s 12.3s 41.8s图表联动 2.1s 7.9s 8.0s 34.8s测试结论1.全表扫描方式下,indexR格式与Parquet格式基本相当,个别场景略慢于Parquet,这个结果和carbondata vs parquet的测试结果相似,carbondata格式的全扫描也是略慢于parquet,推测是因为这种带索引的列存储格式比parquet格式拥有更多的元信息,增加了路由的时间。

相关文档
最新文档