Mryqu's Notes


  • 首页

  • 搜索
close

[OpenUI5] jQuery.sap.declare源码分析

时间: 2015-08-23   |   分类: FrontEnd     |   阅读: 323 字 ~2分钟
jQuery.sap.declare用于宣称一个模块已存在。 在OpenUI5开发指南–精粹–优化应用–模块化和依赖管理中对declare介绍是: Modules can declare themselves by calling the static jQuery.sap.declare functionwith their name. This helpsSAPUI5tocheck at runtime whether a loaded module contains the expectedcontent by comparing the required name against the declared name.As a side effect,jQuery.sap.declare ensures that the parent namespace of the module name exists in the currentglobal namespace (window).Formore information, see jQuery.sap.declare. For modules without declaration, the framework assumes that themodule has the expected content and declares it with the name thatwas used for loading.
阅读全文 »

[OpenUI5] jQuery.sap.require源码分析

时间: 2015-08-22   |   分类: FrontEnd     |   阅读: 982 字 ~5分钟
jQuery.sap.require用于解析一个或多个模块依赖。 jQuery.sap.require函数源码在jquery.sap.global.js,执行时可在sap-ui-core.js中找到。 通过下面的源代码可知,jQuery.sap.require首先通过ui5ToRJS将javascript类名转换为js文件名,例如sap.m.Dialog转换为sap/m/Dialog.js,然后执行requireModule函数。 requireModule函数查找该模块在sap.ui.core.Core对象的mModules中是否存在,不存在则添加并设为INITIAL状态,判断模块是否已经被加载、执行过,如果没有则设为LOADING状态并通过ajax以同步方式加载代码(如果当前是debug模式则选择-dbg版本的js文件URL),加载失败设为FAILED状态,加载成功则设为LOADED状态并执行代码,执行失败设为FAILED状态,执行成功设为READY状态。 jQuery.sap.require = function(vModuleName, fnCallback) { if ( arguments.length > 1 ) { // legacy mode with multiple arguments, each representing a dependency for (var i = 0; i < arguments.length; i++) { jQuery.sap.require(arguments[i]); } return this; } // check for an object as parameter for sModuleName // in case of this the object contains the module name and the type // which could be {modName: "sap.ui.core.Dev", type: "view"} if (typeof (vModuleName) === "object") { jQuery.
阅读全文 »

[Hive] Hive 表UDTF和汇聚UDAF学习

时间: 2015-08-20   |   分类: BigData     |   阅读: 403 字 ~2分钟
在之前的博文[Hive] Hive Macro和UDF实践中,我对Hive的宏和普通UDF进行学习并实践,这里将针对Hive表UDF(UDTF)和汇聚UDF(UDAF)进行学习。 普通UDF可以对一行表数据进行处理输出一个单元格数据;UDTF可以对一行表数据进行处理输出多列甚至多行数据;UDAF可以对整表数据进行处理输出某种汇聚结果。 UDTF Hive支持的内建UDTF有explode()、json_tuple()和inline()等函数。 查看UDTF介绍 选个好理解的explode函数吧。 hive> describe function explode; OK explode(a) - separates the elements of array a into multiple rows, or the elements of a map into multiple rows and columns Time taken: 0.009 seconds, Fetched: 1 row(s) 测试内建UDTF 像inline函数需要根元素为ARRAY,第二层元素为STRUCT,搭建环境有点麻烦。所以还是接着擼explode函数吧。 上述命令将三行的列a中数组元素拆成7行字符串。那执行"select explode(a), b fromcomplex_datatypes_example;“会返回什么呢?结果是7行还是3行? 谜底就是错误提示"Only a single exp.ression in the SELECT clause issupported with UDTF’s."! UDTF实现 一个定制UDTF要继承GenericUDTF抽象类并实现initialize、process及close方法。Hive调用initialize方法以将参数类型通知给UDTF。UDTF必须返回UDTF之后产生的行对象相应的对象观察器。一旦initialize()被调用后,Hive将使用process()方法将行传递给UDTF。在process()方法中,UDTF生成行并调用forward()方法将行转给其他运算符。当所有的行都传递给UDTF后,Hive将最终调用close()方法。 通过FunctionRegistry类可知explode函数的实现类为GenericUDTFExplode。下面通过GenericUDTFExplode对照参考四Hive Developer Guide - UDTF学习一下UDTF实现。 GenericUDTFExplode继承了抽象父类GenericUDTF 在initialize方法中,GenericUDTFExplode检查输入列是否为ARRAY或MAP类型,不是的话抛出异常。如果输入列为ARRAY类型,则输出列名为col,类型为输入列数组中元素类型;如果输入列为MAP类型,则输出列名为key和value,类型分别为输入列MAP的键与值相应的类型; 在process方法中,针对输入列ARRAY或MAP的每一个元素调用forward()方法将所生成的行转给其他运算符; 在close()方法中,实现为空。 UDAF Hive支持的内建UDAF有sum()、count()、min()和histogram_numeric()等函数。
阅读全文 »

安装Gerrit的commit-msg钩子

时间: 2015-08-19   |   分类: Tool   Git     |   阅读: 18 字 ~1分钟
对Gerrit进行首次提交前需要安装commit-msg钩子,每次总忘,每次都总是搜邮件,还是记博客里方便些。 gitdir=$(git rev-parse --git-dir); scp -p -P 29418 [your username]@[your Gerrit review server]:hooks/commit-msg {gitdir}/hooks/ 参考 Gerrit:commit-msg Hook Gerrit工作流

[Hive] Hive Macro和UDF实践

时间: 2015-08-18   |   分类: BigData     |   阅读: 608 字 ~3分钟
测试数据库 hive> describe empinfo; OK firstname string lastname string id int age int city string state string Time taken: 0.047 seconds, Fetched: 6 row(s) hive> select * from empinfo; OK John Jones 99980 45 Payson Arizona Mary Jones 99982 25 Payson Arizona Eric Edwards 88232 32 San Diego California Mary Ann Edwards 88233 32 Phoenix Arizona Ginger Howell 98002 42 Cottonwood Arizona Sebastian Smith 92001 23 Gila Bend Arizona Gus Gray 22322 35 Bagdad Arizona Mary Ann May 32326 52 Tucson Arizona Erica Williams 32327 60 Show Low Arizona Leroy Brown 32380 22 Pinetop Arizona Elroy Cleaver 32382 22 Globe Arizona Time taken: 0.
阅读全文 »

[OpenUI5] 加载时替换JavaScript源文件

时间: 2015-08-16   |   分类: FrontEnd     |   阅读: 101 字 ~1分钟
我有一些自己定制的OpenUI5控件,有时会修改某个方法内的逻辑,这个好处理,在ChromedevTool直接修改加载后JS代码并保存就可以直接调试。如果修改了property、aggregation或者init方法内的逻辑的话,由于错过了初始化就不灵了,而重新加载的话又丢失了自己新加的调试代码。 我的解决方法如下: 清除Chrome缓存 在sap-ui-core-dbg.js里requireModule方法内设置断点,设置断点条件为response.indexOf(“Dialog.extend("mryqu.test.control.KexiaoDialog”)>0这样当OpenUI5加载KexiaoDialog.js文件时就会触发断点。 重新加载我的OpenUI5项目:http://www.mryqu.com/test123/?sap-ui-debug=true&sap-ui-preload=false 当断点被触发时,在Console执行: response='(function ()\n\ {\n\ "use strict";\n\ \n\ jQuery.sap.require("sap.m.Button");\n\ jQuery.sap.require("sap.m.Dialog");\n\ jQuery.sap.require("sap.m.HBox");\n\ jQuery.sap.require("sap.m.Input");\n\ jQuery.sap.require("sap.m.RadioButton");\n\ jQuery.sap.require("sap.m.VBox");\n\ jQuery.sap.require("sap.m.Text");\n\ \n\ var Button = sap.m.Button;\n\ var Dialog = sap.m.Dialog;\n\ var HBox = sap.m.HBox;\n\ var Icon = sap.ui.core.Icon;\n\ var Input = sap.m.Input;\n\ var RadioButton = sap.m.RadioButton;\n\ var Text = sap.m.Text;\n\ var VBox = sap.m.VBox;\n\ \n\ Dialog.extend("mryqu.test.control.KexiaoDialog", {\n\ metadata: {\n\ properties: {\n\ "tableName" : {type : "string", defaultValue : ""},\n\ },\n\ associations: {\n\ invoker: {type: "sap.
阅读全文 »

[Hive] Hive表文件存储格式

时间: 2015-08-14   |   分类: BigData     |   阅读: 208 字 ~1分钟
Hive支持的内建表文件存储格式如下: |存储格式|介绍 |—– |TEXTFILE|按照纯文本文件格式存储。如果配置hive.default.fileformat没有设置的话,TEXTFILE是默认文件格式。 此存储格式下,数据不做压缩的话,磁盘开销大,数据解析开销大。使用Gzip、Bzip2、Snappy等进行压缩使用(系统自动检查,执行查询时自动解压)的话,Hive不能对数据进行切分,从而无法对数据进行并行操作。 |SEQUENCEFILE|按照压缩的Sequence File格式存储。 SequenceFile一般是在HDFS FileSystem中生成,供map调用的原始文件。Hive中的SequenceFile继承自Hadoop API 的SequenceFile,不过它的key为空,使用value存放实际的值,这样是为了避免MR在运行map阶段的排序过程。 |RCFILE|按照RCFile (Record Columnar File)格式存储。 在Hive0.6.0引入。RCFile是在计算机集群中判断如何存储关系型表的数据存放结构,是Facebook、俄亥俄州立大学、中科院计算所联合研究成果。FCFile结构是由数据存储格式、数据压缩方式、数据读取优化技术等多种模块的系统组合,可以实现数据存放的四个要求:(1)快速加载,(2) 快速处理查询,(3) 高效利用存储空间 (4) 非常适用于动态数据访问模式。 它遵循“先按行划分,再垂直划分”的设计理念。当查询过程中,针对它并不关心的列时,它会在IO上跳过这些列。需要说明的是,RCFile在map阶段从远端拷贝仍然是拷贝整个数据块,并且拷贝到本地目录后RCFile并不是真正直接跳过不需要的列,并跳到需要读取的列,而是通过扫描每一个row group的头部定义来实现的,但是在整个HDFS Block 级别的头部并没有定义每个列从哪个rowgroup起始到哪个row group结束。所以在读取所有列的情况下,RCFile的性能反而没有SequenceFile高。 |ORC|在Hive 0.11.0引入。ORC(Optimized RowColumnar)存储源自于RCFile。FCFile把每列都当作二进制blob处理,而ORC存储列元数据,针对列类型使用特定的读写器。ORC支持ACID、内建索引和复杂类型。官网上介绍“其性能显著快于RCFile或Parquet”。Facebook和Yahoo等大公司都在使用。 |PARQUET|在Hive 0.13.0引入。Parquet源自于google Dremel系统。Parquet最初的设计动机是存储嵌套式数据,将这类数据存储成列式格式,以方便对其高效压缩和编码,且使用更少的IO操作取出需要的数据,这也是Parquet相比于ORC的优势,它能够透明地将Protobuf和thrift类型的数据进行列式存储,在Protobuf和thrift被广泛使用的今天,与parquet进行集成,是一件非容易和自然的事情。除了上述优势外,相比于ORC,Parquet没有太多其他可圈可点的地方,比如它不支持update操作(数据写成后不可修改),不支持ACID等。 |AVRO|在Hive 0.13.0引入。Avro是数据序列化系统,由Hadoop项目开发的。 测试 $ echo -e '1\x01foo' > tabft.txt $ echo -e '2\x01bar' >> tabft.txt $ hive hive> create table tabft (id int, name string); hive> quit; $ hadoop fs -put tabft.txt /user/hive/warehouse/tabft $ hive hive> create table tabft_txt (id int, name string) STORED AS TEXTFILE; hive> insert into table tabft_txt select * from tabft; hive> create table tabft_seq (id int, name string) STORED AS SEQUENCEFILE; hive> insert into table tabft_seq select * from tabft; hive> create table tabft_rc (id int, name string) STORED AS RCFILE; hive> insert into table tabft_rc select * from tabft; hive> create table tabft_orc (id int, name string) STORED AS ORC; hive> insert into table tabft_orc select * from tabft; hive> create table tabft_parq (id int, name string) STORED AS PARQUET; hive> insert into table tabft_parq select * from tabft; hive> create table tabft_avro (id int, name string) STORED AS AVRO; hive> insert into table tabft_avro select * from tabft; 获取Sequence文件信息 在我的环境下,按照压缩的Sequence File格式存储后的文件是非压缩的。 获取ORC文件信息 参考 Hive 语言手册 - DDL
阅读全文 »

[Hive] Hive数据类型

时间: 2015-08-13   |   分类: BigData     |   阅读: 252 字 ~2分钟
Hive支持的数据类型 原始数据类型 TINYINT SMALLINT INT BIGINT BOOLEAN FLOAT DOUBLE STRING BINARY TIMESTAMP DECIMAL DECIMAL(precision, scale) DATE VARCHAR CHAR 复杂数据类型 array_type map_type struct_type union_type 原始数据类型 在理解原始数据类型时,耗时最多的是TIMESTAMP和BINARY,下文会着重介绍我对这两种类型的理解。 首先创建表primitive_dataytpes_example,字段之间的分隔符没有采用默认的ctrlA,而是使用逗号分隔: create table primitive_dataytpes_example ( a TINYINT, b SMALLINT, c INT, d BIGINT, e BOOLEAN, f FLOAT, g DOUBLE, h STRING, i BINARY, j TIMESTAMP, k DECIMAL, l DECIMAL (10,2), m DATE, n VARCHAR(20), o CHAR(20) ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'; 接下来插入一条记录(dummy表的使用见参考三):
阅读全文 »

了解Objenesis

时间: 2015-08-12   |   分类: Java     |   阅读: 12 字 ~1分钟
Objenesis是一个很小的Java库,作用是绕过构造器创建一个实例。Java已经支持通过Class.newInstance()动态实例化Java类,但是这需要Java类有个适当的构造器。很多时候一个Java类无法通过这种途径创建,例如: 构造器需要参数 构造器有副作用 构造器会抛出异常 Objenesis可以绕过上述限制。它一般用于: 序列化、远程处理和持久化:无需调用代码即可将Java类实例化并存储特定状态。 代理、AOP库和Mock对象:可以创建特定Java类的子类而无需考虑super()构造器。 容器框架:可以用非标准方式动态实例化Java类。例如Spring引入Objenesis后,Bean不再必须提供无参构造器了。 Objenesis内部提供了多个不同JVM上的解决方案: 参考 Objenesis项目官网 GitHub:Objenesis

[Hive] Hive UDF not supported in insert/values command

时间: 2015-08-10   |   分类: BigData     |   阅读: 127 字 ~1分钟
创建一个带有timestamp字段的表,想要在insert/values语句中使用UDF,结果报错。 hive> create table t2 (id int, time timestamp); OK Time taken: 0.045 seconds hive> insert into t2 values(1,current_timestamp()); FAILED: SemanticException [Error 10293]: Unable to create temp file for insert values Expr*ession of type TOK_FUNCTION not supported in insert/values 参考一中提到:”Hive does not support literals for complex types (array,map, struct, union), so it is not possible to use them in INSERTINTO…VALUES clauses. This means that the user cannot insert datainto a complex datatype column using the INSERT INTO…VALUESclause.
阅读全文 »
20 21 22 23 24 25 26 27 28

Programmer & Architect

662 日志
27 分类
1472 标签
RSS 订阅
GitHub Twitter FB Page
© 2009 - 2023 Mryqu's Notes
Powered by - Hugo v0.120.4
Theme by - NexT
0%