ETL工程师要学什么?
技术方面:需要学习使用数据源、目标端工具的基本使用(如 oracle MySQL hive等);需要学习etl工具的安装配置常用错误解决(如 kettle DataStage infa sqoop datax等)
在独山子等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站制作、做网站 网站设计制作定制网站开发,公司网站建设,企业网站建设,成都品牌网站建设,全网营销推广,外贸网站建设,独山子网站建设费用合理。
理论方面:懂得数仓分层架构,维度建模等。
从ETL的字面来看,它主要包含三大阶段,分别是数据抽取、数据转换、数据加载。
1.数据抽取
这个阶段的主要目标是汇总多种数据源,为下一步的转换做准备。
2.数据转换
这个阶段是ETL的核心环节,也是最复杂的环节。它的主要目标是将抽取到的各种数据,进行数据的清洗、格式的转换、缺失值填补、剔除重复等操作,最终得到一份格式统一、高度结构化、数据质量高、兼容性好的数据,为后续的分析决策提供可靠的数据支持。
3.数据加载
这个阶段的主要目标是把数据加载至目的地,比如数据仓库中。通常的做法是,将处理好的数据写成特定格式(如parquet、csv等)的文件,然后再把文件挂载到指定的表分区上。也有些表的数据量很小,不会采用分区表,而是直接生成最终的数据表。
了解了ETL这部分的工作主要做什么,接下来再来说作为ETL工程师需要具备哪些技能,这些也就是需要学习的重点——
1、精通SQL语言,具备存储过程开发能力,能熟练进行SQL查询优化;
2、熟悉Hive数据仓库设计,了解数据仓库模型及思想、维度建模思想,了解数据仓库;
3、熟悉Hadoop、Spark、Flink、Kafka等相关技术;
4、熟练Python、Java中至少一种语言;
5、熟悉Mysql、Nosql等常见数据库。
如何面试 PHP 工程师
问一些日常的正常的PHP问题,主要是考察应聘者的认知:
一个包含中英文的字符串如何获得它的自然长度(看看ta是否有encoding的知识和意识)
问一问什么是ORM,有时候会问这个词的英文全称是什么,问问ta对于ORM有什么个人的看法?(看看ta学习细不细,有没有技术判断,PHP开发人员应该知道什么时候使用ORM)
问一问假如ta要自己去实现一个framework,ta会怎么设计。(看看ta对代码架构的理解,对MVC的理解)
问一问framework设计里的url dispatcher他会怎么考虑。(HTTP知识)
问一问ta对框架本身的看法
了解一下ta对Design Pattern的认知,比如Singleton,Observer,Factory等常用的设计模式,问一问ta对设计模式本身的看法。
问两三个数据库设计的问题
问几个前端的问题,哪怕ta的职位是PHP开发人员,好的PHP人员不可能不了解前端,而且很可能很了解前端
问一问ta对noSQL的了解情况(对与noSQL的认识是和传统Relational DB的认知是分不开的)
问一问ta碰到问题时候会如何去寻找答案
问一问ta习惯使用哪一个搜索引擎(如果是就有加分)
问一问ta最近看的书
问一问ta的职业规划,喜欢做什么,对工作环境有什么要求
别出生僻的题,别为难人家,更不要变相的侮辱人家,正常交流为主,你要的是一个正常的人,优秀不优秀就看你的眼光和运气了。
很多公司的技术人员招聘会刻意追求刺激的问题,比如很著名的微软的“下水道的盖子为什么是圆的”,不是说这些考察毫无道理,但更多的是一种“marketing”的手段。
nosql数据库有哪些
Membase
Membase 是 NoSQL 家族的一个新的重量级的成员。Membase是开源项目,源代码采用了Apache2.0的使用许可。该项目托管在GitHub.Source tarballs上,可以下载beta版本的Linux二进制包。该产品主要是由North Scale的memcached核心团队成员开发完成,其中还包括Zynga和NHN这两个主要贡献者的工程师,这两个组织都是很大的在线游戏和社区网络空间的供应商。
Membase容易安装、操作,可以从单节点方便的扩展到集群,而且为memcached(有线协议的兼容性)实现了即插即用功能,在应用方面为开发者和经营者提供了一个比较低的门槛。做为缓存解决方案,Memcached已经在不同类型的领域(特别是大容量的Web应用)有了广泛的使用,其中 Memcached的部分基础代码被直接应用到了Membase服务器的前端。
通过兼容多种编程语言和框架,Membase具备了很好的复用性。在安装和配置方面,Membase提供了有效的图形化界面和编程接口,包括可配置 的告警信息。
Membase的目标是提供对外的线性扩展能力,包括为了增加集群容量,可以针对统一的节点进行复制。 另外,对存储的数据进行再分配仍然是必要的。
这方面的一个有趣的特性是NoSQL解决方案所承诺的可预测的性能,类准确性的延迟和吞吐量。通过如下方式可以获得上面提到的特性:
◆ 自动将在线数据迁移到低延迟的存储介质的技术(内存,固态硬盘,磁盘)
◆ 可选的写操作一一异步,同步(基于复制,持久化)
◆ 反向通道再平衡[未来考虑支持]
◆ 多线程低锁争用
◆ 尽可能使用异步处理
◆ 自动实现重复数据删除
◆ 动态再平衡现有集群
◆ 通过把数据复制到多个集群单元和支持快速失败转移来提供系统的高可用性。
MongoDB
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它的特点是高性能、易部署、易使用,存储数据非常方便。
主要功能特性:
◆ 面向集合存储,易存储对象类型的数据
“面向集合”(Collenction-Oriented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个 集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定 义任何模式(schema)。
◆ 模式自由
模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。
◆支持动态查询
◆支持完全索引,包含内部对象
◆支持查询
◆支持复制和故障恢复
◆使用高效的二进制数据存储,包括大型对象(如视频等)
◆自动处理碎片,以支持云计算层次的扩展性
◆支持RUBY,PYTHON,JAVA,C++,PHP等多种语言
◆文件存储格式为BSON(一种JSON的扩展)
BSON(Binary Serialized document Format)存储形式是指:存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各种复杂的文件类型。
◆可通过网络访问
MongoDB服务端可运行在Linux、Windows或OS X平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB在32位模式运行时支持的最大文件尺寸为2GB。
MongoDB把数据存储在文件中(默认路径为:/data/db),为提高效率使用内存映射文件进行管理。
Hypertable
Hypertable是一个开源、高性能、可伸缩的数据库,它采用与Google的Bigtable相似的模型。在过去数年中,Google为在PC集群 上运行的可伸缩计算基础设施设计建造了三个关键部分。第一个关键的基础设施是Google File System(GFS),这是一个高可用的文件系统,提供了一个全局的命名空间。它通过跨机器(和跨机架)的文件数据复制来达到高可用性,并因此免受传统 文件存储系统无法避免的许多失败的影响,比如电源、内存和网络端口等失败。第二个基础设施是名为Map-Reduce的计算框架,它与GFS紧密协作,帮 助处理收集到的海量数据。第三个基础设施是Bigtable,它是传统数据库的替代。Bigtable让你可以通过一些主键来组织海量数据,并实现高效的 查询。Hypertable是Bigtable的一个开源实现,并且根据我们的想法进行了一些改进。
Apache Cassandra
Apache Cassandra是一套开源分布式Key-Value存储系统。它最初由Facebook开发,用于储存特别大的数据。Facebook在使用此系统。
主要特性:
◆ 分布式
◆ 基于column的结构化
◆ 高伸展性
Cassandra的主要特点就是它不是一个数据库,而是由一堆数据库节点共同构成的一个分布式网络服务,对Cassandra 的一个写操作,会被复制到其他节点上去,对Cassandra的读操作,也会被路由到某个节点上面去读取。对于一个Cassandra群集来说,扩展性能 是比较简单的事情,只管在群集里面添加节点就可以了。
Cassandra是一个混合型的非关系的数据库,类似于Google的BigTable。其主要功能比 Dynomite(分布式的Key-Value存 储系统)更丰富,但支持度却不如文档存储MongoDB(介于关系数据库和非关系数据库之间的开源产品,是非关系数据库当中功能最丰富,最像关系数据库 的。Cassandra最初由Facebook开发,后转变成了开源项目。它是一个网络社交云计算方面理想的数据库。以Amazon专有的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型。P2P去中心化的存储。很多方面都可以称之为Dynamo 2.0。
CouchDB
所用语言: Erlang
特点:DB一致性,易于使用
使用许可: Apache
协议: HTTP/REST
双向数据复制,持续进行或临时处理,处理时带冲突检查,因此,采用的是master-master复制
MVCC – 写操作不阻塞读操作
可保存文件之前的版本
Crash-only(可靠的)设计
需要不时地进行数据压缩
视图:嵌入式 映射/减少
格式化视图:列表显示
支持进行服务器端文档验证
支持认证
根据变化实时更新
支持附件处理
因此, CouchApps(独立的 js应用程序)
需要 jQuery程序库
最佳应用场景:适用于数据变化较少,执行预定义查询,进行数据统计的应用程序。适用于需要提供数据版本支持的应用程序。
例如:CRM、CMS系统。 master-master复制对于多站点部署是非常有用的。
和其他数据库比较,其突出特点是:
◆ 模式灵活 :使用Cassandra,像文档存储,你不必提前解决记录中的字段。你可以在系统运行时随意的添加或移除字段。这是一个惊人的效率提升,特别是在大型部 署上。
◆ 真正的可扩展性 :Cassandra是纯粹意义上的水平扩展。为给集群添加更多容量,可以指向另一台电脑。你不必重启任何进程,改变应用查询,或手动迁移任何数据。
◆ 多数据中心识别 :你可以调整你的节点布局来避免某一个数据中心起火,一个备用的数据中心将至少有每条记录的完全复制。
◆ 范围查询 :如果你不喜欢全部的键值查询,则可以设置键的范围来查询。
◆ 列表数据结构 :在混合模式可以将超级列添加到5维。对于每个用户的索引,这是非常方便的。
◆ 分布式写操作 :有可以在任何地方任何时间集中读或写任何数据。并且不会有任何单点失败。
问度娘,啥都有。
软件工程师需要学什么
软件工程师需要学什么
软件工程师(Software Engineer)可以说是从事软件职业的人员的一种职业能力的认证,通过它说明具备了工程师的资格。下面是我整理的关于软件工程师需要学的内容,希望可以帮助大家!
软件工程师就是从事软件开发相关工作的人员的统称,它是一个广义的概念,包括软件设计人员、软件架构人员、软件工程管理人员、程序员等一系列岗位,工作内容都与软件开发生产相关。
软件工程师的技术要求是比较全面的,除了最基础的编程语言(C语言/C++/JAVA等)、数据库技术(SQL/ORACLE/DB2等)等,还有诸多如JAVASCRIPT、AJAX、HIBERNATE、SPRING等前沿技术。
1、Javascript
第一名的是Javascript,有42.4%的职缺中都要求必须会这项技能,那么Javascript为什么这么厉害呢?
最主要在于网络软件开发的盛行,Javascript是很多现有的开发框架的基础除了用在前端的开发(Angular、Ember、Backbone等),也用在后端的架构像是Node.js以及资料库数据的读取如MongoDB。
Javascript所建立起来的生态系非常的庞大也造就了大多数的工作都需要这项技能,Javascript本身学起来并不会太困难,如果想要懂一些基本的应用那可以参考这里(这里也推荐大家可以看下马海祥博客的《老程序员给初学者的一些建议和忠告》相关介绍)。
2、Java
榜上的第二名是Java ,占了34.2%,关于Java有些人认为它一个比较过时的语言也认为它即将被淘汰。
但是根据TIOBE Index上的排行(根据程式语言的普及与受欢迎程度),Java还是名列第二的,Java不仅没有被淘汰,它还过得很好仍然是很多大企业爱好的后端语言。
Java之所已受到企业的重视,一个很大的原因不止是因为他本身好用,而是因为学好Java让你学其他程式语言相对容易,因为Java是种面向对象语言而且不需要处理指标(Pointer),加上他有很好的开发环境(IDE)让初学者使用起来相对的简单,可以说是身为一个软件工程师绝对要懂得基础。
以马海祥的经验而言,Java学起来比Javascript稍微难一些网络上关于这方面的资源也不缺乏,像是MIT就有提供他的课程教材免费让大家学习。
3、HTML
在榜上第三名是HTML,马海祥觉得HTML严格说起来并不是一种程式语言它是一种标记语言(Markup Language),简单来说就是利用标记可以达到与单纯的文字不同的效果。
例如一段文字在前后加上标记就可以加上超连结,HTML是网路开发中基础中的基础,尤其在前端的开发上了解HTML每一个标记的功能是必要的。
但是马海祥还是要强调他本身并不是一种程式语言,如果只会HTML对找工作是没有任何帮助的,他只是基本中的基本,在这里也推荐大家可以花一点时间看下马海祥博客的《12种最常用的网页编程语言简介》相关介绍。
4、SQL and NoSQL
除此之外,榜上有名的.是SQL在31.2%的职缺上这项技能都是必须的。
根据Asurvey的调查有79%的受访者仍然是使用关系资料库也就是为什么SQL受到欢迎的原因,但这并不代表NoSQL就不重要虽然MongoDB在榜上只有4.3%,但是它主要被用在需要快速存取资料的产品上,像是Craigslist还有Expedia。
NoSQL与SQL究竟孰好孰坏,在资料库的社群上一直是一个广受争论的议题,绝大多数的任认为NoSQL是未来的趋势,但是以目前而言,SQL仍然是占了上风。
5、Javascript Frameworks
建立在Javascript上的开发框架总共有三个Angular.js、Ember.js以及Backbone.js,这类的框架可以让你很简便而且快速的处理前端的开发,然而这三种开发框架由于性质相近,因此也有很多的谁才是最好的争论。
目前是由Google所开发的Angular.js站在榜上第一,当然这三种开发框架都有自己的好处,像是Angular.js比较适合大型的开发,Backbone.js比较简单易学,Backbone.js让合作开发更简单。
6、Node.js
这里马海祥也特别提下Node.js,其原因是在于逐渐增加的使用者,以及大型公司像是Linkedin以及Wal-mart的使用。
Node.js是一个基于Chrome JavaScript运行时建立的一个平台,用来方便地搭建快速的易于扩展的网络应用Node.js借助事件驱动,非阻塞I/O模型变得轻量和高效,非常适合运行在分布式设备的数据密集型的实时应用。
Node.js可以在不新增额外线程的情况下,依然可以对任务进行并行处理——Node.js是单线程的,它通过事件轮询(event loop)来实现并行操作,对此,我们应该要充分利用这一点,尽可能的避免阻塞操作,取而代之,多使用非阻塞操作。
;
分享文章:nosql认证工程师,nosql数据库技术
新闻来源:http://lswzjz.com/article/dscgods.html