⑴ 大數據是什麼,是怎麼帶動經濟發展的
大數據的概念
概念:難以用常規的資料庫工具獲取、存儲、管理、分析的數據集合。
特徵:
1、數據量大:起始單位是PB級的。
1KB=1024B
1MB=1024KB
1GB=1024MB
1TB=1024GB
1PB=1024TB
1EB=1024PB
1ZB=1024EB
2、類型多:
結構化、板結構化、非結構化:網諾日誌、音頻、視頻、圖片、地理位置等信息混雜。
3、價值密度低:
獲取數據的價值就像是淘金一般。
4、速度快時效高:
數據呈指數倍增長,時效性要求高,比如搜索引擎要求幾分鍾前的新聞能夠被用戶查詢到,個性化推薦演算法盡可能的完成實時推薦。
5、永遠在線:
大數據時代的數據是永遠在線的,隨時應用計算,這也是區別於傳統的數據的最大特徵。
大數據從哪來
1、搜索引擎服務
網路數據量1000PB,每天響應138個國家數十億次請求,每日新增10TB
2、電子商務
3、社交網路
QQ:8.5億用戶,用4400台伺服器存儲用戶產生的信息,壓縮後的數據100PB,每天新增200~300TB
4、音視頻在線服務
5、個人數據業務
6、地理信息數據
7、傳統企業
8、公共機構
智慧城市:攝像頭拍攝的圖片,1080P高清網路攝像機一月產生1.8TB數據,大點的城市50萬個攝像頭,一個月3PB的數據量。
醫療、中國的氣象系統。
大數據的存儲與計算模式
存儲:
面臨的問題:數據量大、類型復雜(結構化、非結構化、半結構化)
關鍵技術:
1、分布式文件系統(高效元數據管理技術、系統彈性擴展技術、存儲層級內的優化、針對應用和負載的存儲優化技術、針對存儲器件的優化技術)
2、分布式資料庫
事務性資料庫技術:Nosql:(支持非關系資料庫、具有多個節點分割和復制數據的能力、用最終一致性機制解決並發讀操作與控制問題、充分利用分布式索引及內存提高性能)代表有:BigTable、HBase、MongoDB、Dynamo。
分析型的資料庫技術:Hive 、Impala
3、大數據索引和查詢技術
4、實時流式大數據存儲與處理技術
計算:
面臨的問題:數據結構特徵、並行計算(以分布式文件為基礎的Hadoop以分布式內存緩存為基礎的Spark)、數據獲取(批處理流處理)、數據處理類型(傳統查詢數據挖掘分析計算)、實時響應性能、迭代計算、數據關聯性(先map一下再rece一下)。
關鍵技術:
1、大數據查詢分析計算模式與技術:HBase、Hive、Cassandra、Impala
2、批處理計算:Hadoop MapRece、Spark
3、流式計算:Storm、Spark Steaming
4、圖計算:Giraph、GraphX
5、內存計算:Spark、Hana(SAP公司全內存式分布式資料庫系統)、Dremel
應用領域
1、智慧醫療(臨床數據、公共衛生數據、移動醫療健康數據)(共享疾病案例,基因分類參考)
2、智慧農業(主要指依據商業需求進行農產品生產,降低菜殘傷農概率)
3、金融行業:
精準的營銷:根據可與習慣進行推銷
風險管控:根據用戶的交易流水實施反欺詐
決策支持:抵押貸款這一塊,實施產業信貸的風險控制。
效率提升:加快內部數據處理。
產品設計:根據客戶的投資行為設計滿足客戶需求的金融產品。
4、零售行業(對零售商來說:精準營銷(降低營銷成本,擴大營銷額);對廠商:降低產品過剩)
5、電子商務行業
6、電子政務
希望對您有所幫助!~
⑵ 如何學習Spark大數據
大數據技術,只有相互分享才能彼此共同進步,為什麼我們的程序員經常活躍在各大博客和技術論壇?其主要原因是:程序員們並不拒絕分享,甚至是樂於去貢獻代碼。身為一個程序員,特別值得他們驕傲的事情就是自己寫的代碼被別人用到而帶來的成就感。
今天,為我們分享了當今火爆的大數據技術,講解了spark技術的核心,我們可以不從事數據分析行業,但國家的一些技術還是要了解的。
Spark核心概念Resilient Distributed Dataset (RDD)彈性分布數據集
RDD是Spark的基本抽象,是對分布式內存的抽象使用,實現了以操作本地集合的方式來操作分布式數據集的抽象實現。RDD是Spark特別核心的東西,它表示已被分區,不可變的並能夠被並行操作的數據集合,不同的數據集格式對應不同的RDD實現。RDD必須是可序列化的。RDD可以cache到內存中,每次對RDD數據集的操作之後的結果,都可以存放到內存中,下一個操作可以直接從內存中輸入,省去了MapRece大量的磁碟IO操作。這對於迭代運算比較常見的機器學習演算法, 互動式數據挖掘來說,效率提升比較大。
RDD的特點:
1、它是在集群節點上的不可變的、已分區的集合對象。
2、用並行轉換的方式來創建如(map, filter, join, etc)。
3、失敗自動重建。
4、可以控制存儲級別(內存、磁碟等)來進行重用。
5、必須是可序列化的。
5、是靜態類型的。
RDD的好處:
1、RDD只能從持久存儲或經過Transformations操作產生,相比於分布式共享內存(DSM)可以更高效實現容錯,對於丟失部分數據分區只需根據它的lineage就可重新計算出來,而不需要做特定的Checkpoint。
2、RDD的不變性,可以實現類Hadoop MapRece的推測式執行。
3、RDD的數據分區特性,可以用數據的本地性來提高性能,這與Hadoop MapRece是一樣的。
4、RDD都是可序列化的,在內存不足時可自動降級為磁碟存儲,把RDD存儲於磁碟上,這時性能會有大的下降但不會差於現在的MapRece。
RDD的存儲與分區
1、用戶可以選擇不同的存儲級別存儲RDD以便重用。
2、當前RDD默認是存儲於內存,但當內存不足時,RDD會spill到disk。
3、RDD在需要進行分區把數據分布於集群中時會根據每條記錄Key進行分區(如Hash 分區),以此保證兩個數據集在Join時能高效。
RDD的內部表示
在RDD的內部實現中每個RDD都可以使用5個方面的特性來表示:
1、分區列表(數據塊列表)
2、計算每個分片的函數(根據父RDD計算出此RDD)
3、對父RDD的依賴列表
4、對key-value RDD的Partitioner【可選】
5、每個數據分片的預定義地址列表(如HDFS上的數據塊的地址)【可選】
大數據是互聯網發展的方向,大數據人才是未來的高薪貴族。隨著大數據人才的供不應求,大數據人才的薪資待遇也在不斷提升。
⑶ 資料庫的表如果沒有主鍵查詢速度會慢嗎
我們搭建一個 MySQL 5.7 的環境,此處省略搭建步驟。
寫個簡單的腳本,製造一批帶主鍵和不帶主鍵的表:
可以看到執行時間變成了 0.67s。
整理
我們診斷的關鍵點如下:
1. 對於 information_schema 中的元數據表,執行計劃不能提供有效信息。
2. 通過查看 MySQL 改寫後的 SQL,我們猜測了優化器發生了誤判。
3. 我們增加了 hint,指導 MySQL 正確進行優化判斷。
但目前我們的實驗僅限於猜測,猜中了萬事大吉,猜不中就無法做出好的診斷。
⑷ java用sql語句動態的往表裡面添加欄位,之後怎麼能動態的讀寫新欄位的數據
用SQL語句添加表欄位:alter table 表名add 欄位名 欄位類型;
用select name from syscolumns where id=object_id(表名)查找出所有的表欄位。然後再使用SELECT 查找到的欄位 from 表名。
使用ResultSet動態讀取資料庫數據。ResultSet 是一個迭代模式的動態連接容器。迭代模式的容器遍歷方式:
while(rs.next()){
//循環內容
}
rs.next()返回值是一個布爾值,表示迭代容器中是否還有下一條數據,即在迭代過程中是否已經到結尾。直到迭代集合中再無數據rs.next()返回false;
⑸ sql可以實現迭代嗎
在 SQL Server Analysis Services 中,Microsoft 神經網路演算法組合輸入屬性的每個可能狀態和可預測屬性的每個可能狀態,並使用定型數據計算概率。之後,可以根據輸入屬性,將這些概率用於分類或回歸,並預測被預測屬性的結果。
⑹ 在VBA中如何將SQL得到的數據直接賦值到數組
EXCEL表的單元格區域是一個二維數組
dim arr
arr=Sheet3.Range("D7:D9")
'這時的arr得到的是二維數組
'你要轉換成1維數組,先聲明一個動態數組再重定義為1維數組
dim brr()
redim brr(1 to ubound(arr))
'再重新將二維轉一維
for i = 1 to ubound(arr)
brr(i)=arr(i,1)
next
'如果你是要間隔寫進去
for i = 1 to ubound(arr) step 2
brr(i)=arr(i,1)
next
⑺ 求大數據分析技術
目前,大數據領域每年都會涌現出大量新的技術,成為大數據獲取、存儲、處理分析或可視化的有效手段。大數據技術能夠將大規模數據中隱藏的信息和知識挖掘出來,為人類社會經濟活動提供依據,提高各個領域的運行效率,甚至整個社會經濟的集約化程度。
01 大數據生命周期
⑻ 大數據都是需要什麼技術的
大數據技術龐大復雜,基礎的技術包含數據的採集、數據預處理、分布式存儲、NoSQL資料庫、數據倉庫、機器學習、並行計算、可視化等范疇
查詢引擎:Phoenix、Shark、Pig、Hive等
流式計算:storm、Twitter Rainbird等
迭代計算:Apache Hama、Apache Giraph、HaLoop等
離線計算:Hadoop MapRece、Berkeley Spark等
鍵值存儲:LevelDB、RocksDB、HyperDex、Voldemort等
表格存儲:OceanBase、Amazon SimpleDB、Cassandra、HBase等
文件存儲:CouchDB、MongoDB、HDFS等
資源管理:Twitter Mesos、Hadoop Yarn
⑼ 大數據核心技術有哪些
大數據技術的體系龐大且復雜,基礎的技術包含數據的採集、數據預處理、分布式存儲、NoSQL資料庫、數據倉庫、機器學習、並行計算、可視化等各種技術范疇和不同的技術層面。首先給出一個通用化的大數據處理框架,主要分為下面幾個方面:數據採集與預處理、數據存儲、數據清洗、數據查詢分析和數據可視化。
一、數據採集與預處理
對於各種來源的數據,包括移動互聯網數據、社交網路的數據等,這些結構化和非結構化的海量數據是零散的,也就是所謂的數據孤島,此時的這些數據並沒有什麼意義,數據採集就是將這些數據寫入數據倉庫中,把零散的數據整合在一起,對這些數據綜合起來進行分析。數據採集包括文件日誌的採集、資料庫日誌的採集、關系型資料庫的接入和應用程序的接入等。在數據量比較小的時候,可以寫個定時的腳本將日誌寫入存儲系統,但隨著數據量的增長,這些方法無法提供數據安全保障,並且運維困難,需要更強壯的解決方案。
Flume NG作為實時日誌收集系統,支持在日誌系統中定製各類數據發送方,用於收集數據,同時,對數據進行簡單處理,並寫到各種數據接收方(比如文本,HDFS,Hbase等)。Flume NG採用的是三層架構:Agent層,Collector層和Store層,每一層均可水平拓展。其中Agent包含Source,Channel和 Sink,source用來消費(收集)數據源到channel組件中,channel作為中間臨時存儲,保存所有source的組件信息,sink從channel中讀取數據,讀取成功之後會刪除channel中的信息。
NDC,Netease Data Canal,直譯為網易數據運河系統,是網易針對結構化資料庫的數據實時遷移、同步和訂閱的平台化解決方案。它整合了網易過去在數據傳輸領域的各種工具和經驗,將單機資料庫、分布式資料庫、OLAP系統以及下游應用通過數據鏈路串在一起。除了保障高效的數據傳輸外,NDC的設計遵循了單元化和平台化的設計哲學。
Logstash是開源的伺服器端數據處理管道,能夠同時從多個來源採集數據、轉換數據,然後將數據發送到您最喜歡的 「存儲庫」 中。一般常用的存儲庫是Elasticsearch。Logstash 支持各種輸入選擇,可以在同一時間從眾多常用的數據來源捕捉事件,能夠以連續的流式傳輸方式,輕松地從您的日誌、指標、Web 應用、數據存儲以及各種 AWS 服務採集數據。
Sqoop,用來將關系型資料庫和Hadoop中的數據進行相互轉移的工具,可以將一個關系型資料庫(例如Mysql、Oracle)中的數據導入到Hadoop(例如HDFS、Hive、Hbase)中,也可以將Hadoop(例如HDFS、Hive、Hbase)中的數據導入到關系型資料庫(例如Mysql、Oracle)中。Sqoop 啟用了一個 MapRece 作業(極其容錯的分布式並行計算)來執行任務。Sqoop 的另一大優勢是其傳輸大量結構化或半結構化數據的過程是完全自動化的。
流式計算是行業研究的一個熱點,流式計算對多個高吞吐量的數據源進行實時的清洗、聚合和分析,可以對存在於社交網站、新聞等的數據信息流進行快速的處理並反饋,目前大數據流分析工具有很多,比如開源的strom,spark streaming等。
Strom集群結構是有一個主節點(nimbus)和多個工作節點(supervisor)組成的主從結構,主節點通過配置靜態指定或者在運行時動態選舉,nimbus與supervisor都是Storm提供的後台守護進程,之間的通信是結合Zookeeper的狀態變更通知和監控通知來處理。nimbus進程的主要職責是管理、協調和監控集群上運行的topology(包括topology的發布、任務指派、事件處理時重新指派任務等)。supervisor進程等待nimbus分配任務後生成並監控worker(jvm進程)執行任務。supervisor與worker運行在不同的jvm上,如果由supervisor啟動的某個worker因為錯誤異常退出(或被kill掉),supervisor會嘗試重新生成新的worker進程。
當使用上游模塊的數據進行計算、統計、分析時,就可以使用消息系統,尤其是分布式消息系統。Kafka使用Scala進行編寫,是一種分布式的、基於發布/訂閱的消息系統。Kafka的設計理念之一就是同時提供離線處理和實時處理,以及將數據實時備份到另一個數據中心,Kafka可以有許多的生產者和消費者分享多個主題,將消息以topic為單位進行歸納;Kafka發布消息的程序稱為procer,也叫生產者,預訂topics並消費消息的程序稱為consumer,也叫消費者;當Kafka以集群的方式運行時,可以由一個服務或者多個服務組成,每個服務叫做一個broker,運行過程中procer通過網路將消息發送到Kafka集群,集群向消費者提供消息。Kafka通過Zookeeper管理集群配置,選舉leader,以及在Consumer Group發生變化時進行rebalance。Procer使用push模式將消息發布到broker,Consumer使用pull模式從broker訂閱並消費消息。Kafka可以和Flume一起工作,如果需要將流式數據從Kafka轉移到hadoop,可以使用Flume代理agent,將Kafka當做一個來源source,這樣可以從Kafka讀取數據到Hadoop。
Zookeeper是一個分布式的,開放源碼的分布式應用程序協調服務,提供數據同步服務。它的作用主要有配置管理、名字服務、分布式鎖和集群管理。配置管理指的是在一個地方修改了配置,那麼對這個地方的配置感興趣的所有的都可以獲得變更,省去了手動拷貝配置的繁瑣,還很好的保證了數據的可靠和一致性,同時它可以通過名字來獲取資源或者服務的地址等信息,可以監控集群中機器的變化,實現了類似於心跳機制的功能。
二、數據存儲
Hadoop作為一個開源的框架,專為離線和大規模數據分析而設計,HDFS作為其核心的存儲引擎,已被廣泛用於數據存儲。
HBase,是一個分布式的、面向列的開源資料庫,可以認為是hdfs的封裝,本質是數據存儲、NoSQL資料庫。HBase是一種Key/Value系統,部署在hdfs上,克服了hdfs在隨機讀寫這個方面的缺點,與hadoop一樣,Hbase目標主要依靠橫向擴展,通過不斷增加廉價的商用伺服器,來增加計算和存儲能力。
Phoenix,相當於一個Java中間件,幫助開發工程師能夠像使用JDBC訪問關系型資料庫一樣訪問NoSQL資料庫HBase。
Yarn是一種Hadoop資源管理器,可為上層應用提供統一的資源管理和調度,它的引入為集群在利用率、資源統一管理和數據共享等方面帶來了巨大好處。Yarn由下面的幾大組件構成:一個全局的資源管理器ResourceManager、ResourceManager的每個節點代理NodeManager、表示每個應用的Application以及每一個ApplicationMaster擁有多個Container在NodeManager上運行。
Mesos是一款開源的集群管理軟體,支持Hadoop、ElasticSearch、Spark、Storm 和Kafka等應用架構。
Redis是一種速度非常快的非關系資料庫,可以存儲鍵與5種不同類型的值之間的映射,可以將存儲在內存的鍵值對數據持久化到硬碟中,使用復制特性來擴展性能,還可以使用客戶端分片來擴展寫性能。
Atlas是一個位於應用程序與MySQL之間的中間件。在後端DB看來,Atlas相當於連接它的客戶端,在前端應用看來,Atlas相當於一個DB。Atlas作為服務端與應用程序通訊,它實現了MySQL的客戶端和服務端協議,同時作為客戶端與MySQL通訊。它對應用程序屏蔽了DB的細節,同時為了降低MySQL負擔,它還維護了連接池。Atlas啟動後會創建多個線程,其中一個為主線程,其餘為工作線程。主線程負責監聽所有的客戶端連接請求,工作線程只監聽主線程的命令請求。
Ku是圍繞Hadoop生態圈建立的存儲引擎,Ku擁有和Hadoop生態圈共同的設計理念,它運行在普通的伺服器上、可分布式規模化部署、並且滿足工業界的高可用要求。其設計理念為fast analytics on fast data。作為一個開源的存儲引擎,可以同時提供低延遲的隨機讀寫和高效的數據分析能力。Ku不但提供了行級的插入、更新、刪除API,同時也提供了接近Parquet性能的批量掃描操作。使用同一份存儲,既可以進行隨機讀寫,也可以滿足數據分析的要求。Ku的應用場景很廣泛,比如可以進行實時的數據分析,用於數據可能會存在變化的時序數據應用等。
在數據存儲過程中,涉及到的數據表都是成千上百列,包含各種復雜的Query,推薦使用列式存儲方法,比如parquent,ORC等對數據進行壓縮。Parquet 可以支持靈活的壓縮選項,顯著減少磁碟上的存儲。
三、數據清洗
MapRece作為Hadoop的查詢引擎,用於大規模數據集的並行計算,」Map(映射)」和」Rece(歸約)」,是它的主要思想。它極大的方便了編程人員在不會分布式並行編程的情況下,將自己的程序運行在分布式系統中。
隨著業務數據量的增多,需要進行訓練和清洗的數據會變得越來越復雜,這個時候就需要任務調度系統,比如oozie或者azkaban,對關鍵任務進行調度和監控。
Oozie是用於Hadoop平台的一種工作流調度引擎,提供了RESTful API介面來接受用戶的提交請求(提交工作流作業),當提交了workflow後,由工作流引擎負責workflow的執行以及狀態的轉換。用戶在HDFS上部署好作業(MR作業),然後向Oozie提交Workflow,Oozie以非同步方式將作業(MR作業)提交給Hadoop。這也是為什麼當調用Oozie 的RESTful介面提交作業之後能立即返回一個JobId的原因,用戶程序不必等待作業執行完成(因為有些大作業可能會執行很久(幾個小時甚至幾天))。Oozie在後台以非同步方式,再將workflow對應的Action提交給hadoop執行。
Azkaban也是一種工作流的控制引擎,可以用來解決有多個hadoop或者spark等離線計算任務之間的依賴關系問題。azkaban主要是由三部分構成:Relational Database,Azkaban Web Server和Azkaban Executor Server。azkaban將大多數的狀態信息都保存在MySQL中,Azkaban Web Server提供了Web UI,是azkaban主要的管理者,包括project的管理、認證、調度以及對工作流執行過程中的監控等;Azkaban Executor Server用來調度工作流和任務,記錄工作流或者任務的日誌。
流計算任務的處理平台Sloth,是網易首個自研流計算平台,旨在解決公司內各產品日益增長的流計算需求。作為一個計算服務平台,其特點是易用、實時、可靠,為用戶節省技術方面(開發、運維)的投入,幫助用戶專注於解決產品本身的流計算需求。
四、數據查詢分析
Hive的核心工作就是把SQL語句翻譯成MR程序,可以將結構化的數據映射為一張資料庫表,並提供 HQL(Hive SQL)查詢功能。Hive本身不存儲和計算數據,它完全依賴於HDFS和MapRece。可以將Hive理解為一個客戶端工具,將SQL操作轉換為相應的MapRece jobs,然後在hadoop上面運行。Hive支持標準的SQL語法,免去了用戶編寫MapRece程序的過程,它的出現可以讓那些精通SQL技能、但是不熟悉MapRece 、編程能力較弱與不擅長Java語言的用戶能夠在HDFS大規模數據集上很方便地利用SQL 語言查詢、匯總、分析數據。
Hive是為大數據批量處理而生的,Hive的出現解決了傳統的關系型資料庫(MySql、Oracle)在大數據處理上的瓶頸 。Hive 將執行計劃分成map->shuffle->rece->map->shuffle->rece…的模型。如果一個Query會被編譯成多輪MapRece,則會有更多的寫中間結果。由於MapRece執行框架本身的特點,過多的中間過程會增加整個Query的執行時間。在Hive的運行過程中,用戶只需要創建表,導入數據,編寫SQL分析語句即可。剩下的過程由Hive框架自動的完成。
Impala是對Hive的一個補充,可以實現高效的SQL查詢。使用Impala來實現SQL on Hadoop,用來進行大數據實時查詢分析。通過熟悉的傳統關系型資料庫的SQL風格來操作大數據,同時數據也是可以存儲到HDFS和HBase中的。Impala沒有再使用緩慢的Hive+MapRece批處理,而是通過使用與商用並行關系資料庫中類似的分布式查詢引擎(由Query Planner、Query Coordinator和Query Exec Engine三部分組成),可以直接從HDFS或HBase中用SELECT、JOIN和統計函數查詢數據,從而大大降低了延遲。Impala將整個查詢分成一執行計劃樹,而不是一連串的MapRece任務,相比Hive沒了MapRece啟動時間。
Hive 適合於長時間的批處理查詢分析,而Impala適合於實時互動式SQL查詢,Impala給數據人員提供了快速實驗,驗證想法的大數據分析工具,可以先使用Hive進行數據轉換處理,之後使用Impala在Hive處理好後的數據集上進行快速的數據分析。總的來說:Impala把執行計劃表現為一棵完整的執行計劃樹,可以更自然地分發執行計劃到各個Impalad執行查詢,而不用像Hive那樣把它組合成管道型的map->rece模式,以此保證Impala有更好的並發性和避免不必要的中間sort與shuffle。但是Impala不支持UDF,能處理的問題有一定的限制。
Spark擁有Hadoop MapRece所具有的特點,它將Job中間輸出結果保存在內存中,從而不需要讀取HDFS。Spark 啟用了內存分布數據集,除了能夠提供互動式查詢外,它還可以優化迭代工作負載。Spark 是在 Scala 語言中實現的,它將 Scala 用作其應用程序框架。與 Hadoop 不同,Spark 和 Scala 能夠緊密集成,其中的 Scala 可以像操作本地集合對象一樣輕松地操作分布式數據集。
Nutch 是一個開源Java 實現的搜索引擎。它提供了我們運行自己的搜索引擎所需的全部工具,包括全文搜索和Web爬蟲。
Solr用Java編寫、運行在Servlet容器(如Apache Tomcat或Jetty)的一個獨立的企業級搜索應用的全文搜索伺服器。它對外提供類似於Web-service的API介面,用戶可以通過http請求,向搜索引擎伺服器提交一定格式的XML文件,生成索引;也可以通過Http Get操作提出查找請求,並得到XML格式的返回結果。
Elasticsearch是一個開源的全文搜索引擎,基於Lucene的搜索伺服器,可以快速的儲存、搜索和分析海量的數據。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。
還涉及到一些機器學習語言,比如,Mahout主要目標是創建一些可伸縮的機器學習演算法,供開發人員在Apache的許可下免費使用;深度學習框架Caffe以及使用數據流圖進行數值計算的開源軟體庫TensorFlow等,常用的機器學習演算法比如,貝葉斯、邏輯回歸、決策樹、神經網路、協同過濾等。
五、數據可視化
對接一些BI平台,將分析得到的數據進行可視化,用於指導決策服務。主流的BI平台比如,國外的敏捷BI Tableau、Qlikview、PowrerBI等,國內的SmallBI和新興的網易有數(可點擊這里免費試用)等。
在上面的每一個階段,保障數據的安全是不可忽視的問題。
基於網路身份認證的協議Kerberos,用來在非安全網路中,對個人通信以安全的手段進行身份認證,它允許某實體在非安全網路環境下通信,向另一個實體以一種安全的方式證明自己的身份。
控制許可權的ranger是一個Hadoop集群許可權框架,提供操作、監控、管理復雜的數據許可權,它提供一個集中的管理機制,管理基於yarn的Hadoop生態圈的所有數據許可權。可以對Hadoop生態的組件如Hive,Hbase進行細粒度的數據訪問控制。通過操作Ranger控制台,管理員可以輕松的通過配置策略來控制用戶訪問HDFS文件夾、HDFS文件、資料庫、表、欄位許可權。這些策略可以為不同的用戶和組來設置,同時許可權可與hadoop無縫對接。
⑽ SqlDataReader怎麼用來顯示數據!!--asp.net
Lesson 04: Reading Data with the SqlDataReader
使用SqlDataReader讀取數據
This lesson explains how to read data with a SqlDataReader object. Here are the objectives of this lesson:
本課解釋了如何使用SqlDataReader對象讀取數據。以下是本課的目標:
Learn what a SqlDataReader is used for.
Know how to read data using a SqlDataReader.
Understand the need to close a SqlDataReader.
學習SqlDataReader的用法
了解如何使用SqlDataReader讀取數據
了解如何關閉SqlDataReader的必要性
Introction
介紹
A SqlDataReader is a type that is good for reading data in the most efficient manner possible. You can *not* use it for writing data. SqlDataReaders are often described as fast-forward firehose-like streams of data.
SqlDataReader是對於大多數有效的情況下讀取數據的好的方式。你不能使用它來寫入數據。SqlDataReaders通常作為快速的只向前讀的數據流。
You can read from SqlDataReader objects in a forward-only sequential manner. Once you've read some data, you must save it because you will not be able to go back and read it again.
你能夠以只向前的順序方式從SqlDataReader對象中進行讀取。只要你已經讀取了某些數據,你必須保存它們,因為你將不能夠返回並再一次讀取它。
The forward only design of the SqlDataReader is what enables it to be fast. It doesn't have overhead associated with traversing the data or writing it back to the data source. Therefore, if your only requirement for a group of data is for reading one time and you want the fastest method possible, the SqlDataReader is the best choice. Also, if the amount of data you need to read is larger than what you would prefer to hold in memory beyond a single call, then the streaming behavior of the SqlDataReader would be a good choice.
SqlDataReader的只向前讀的設計使它很迅速。它並沒有遍歷數據或者將數據重新寫回給數據源的負擔。因此,如果你一次只需要讀一組數據,並且希望最快速的方法,SqlDataReader則是最好的選擇。同樣,如果一個單獨調用所需要讀取的數據量大於內存的存放能力,SqlDataReader的數據流形式應該是一個好的選擇。
Note: Observe that I used the term "one time" in the previous paragraph when discussing the reasons why you would use a SqlDataReader. As with anything, there are exceptions. In many cases, it is more efficient to use a cached DataSet. While caching is outside the scope of this tutorial, we will discuss using DataSet objects in the next lesson.
注意:當討論為什麼應該使用SalDataReader的時候,我在上一段中使用的術語「一次」。任何事情,都有異常發生。在一些情況下,更有效的是使用緩存DataSet。因為緩存超出了本指南的范疇,我們將在下一節課「使用DataSet對象」中討論它。
Creating a SqlDataReader Object
創建SqlDataReader對象
Getting an instance of a SqlDataReader is a little different than the way you instantiate other ADO.NET objects. You must call ExecuteReader on a command object, like this:
得到SqlDataReader對象於實例化其它ADO.NET對象稍微有些不同。你必須對一個command對象調用ExecuteReaer方法,比如這樣:
SqlDataReader rdr = cmd.ExecuteReader();
The ExecuteReader method of the SqlCommand object, cmd , returns a SqlDataReader instance. Creating a SqlDataReader with the new operator doesn't do anything for you. As you learned in previous lessons, the SqlCommand object references the connection and the SQL statement necessary for the SqlDataReader to obtain data.
SqlCommand對象cmd的ExecuteReader方法返回一個SqlDataReader實例。使用new關鍵字創建一個SqlDataReader並不做任何事情。前面的課程已經學到,SqlCommand對象引用connection和SQL語句對於SqlDataReader讀取數據是必需的。
Reading Data
讀取數據
Previous lessons contained code that used a SqlDataReader, but the discussion was delayed so we could focus on the specific subject of that particular lesson. This lesson builds from what you've seen and explains how to use the SqlDataReader.
前面的課程包含了使用SqlDataReader的代碼,但是關於前面課程中的細節的討論我們推遲了。這節課建立自你所見到的並解釋如何使用SqlDataReader。
As explained earlier, the SqlDataReader returns data via a sequential stream. To read this data, you must pull data from a table row-by-row. Once a row has been read, the previous row is no longer available. To read that row again, you would have to create a new instance of the SqlDataReader and read through the data stream again.
前面已經解釋了,SqlDataReader通過順序數據流返回數據。為了讀取這些數據,你必須從一個表中一行一行的取出數據。只要一行被讀取,之前的數據就不再有效。為了再次讀取那行,你應該創建一個新的SqlDataReader實例並且再次從數據流中讀取它。
The typical method of reading from the data stream returned by the SqlDataReader is to iterate through each row with a while loop. The following code shows how to accomplish this:
從SqlDataReader中讀取返回的數據流的典型方法是通過while循環迭代沒一行。下面的代碼顯示了如何完成:
while (rdr.Read())
{
// get the results of each column
string contact = (string)rdr["ContactName"];
string company = (string)rdr["CompanyName"];
string city = (string)rdr["City"];
// print out the results
Console.Write("{0,-25}", contact);
Console.Write("{0,-20}", city);
Console.Write("{0,-25}", company);
Console.WriteLine();
}
Notice the call to Read on the SqlDataReader, rdr, in the while loop condition in the code above. The return value of Read is type bool and returns true as long as there are more records to read. After the last record in the data stream has been read, Read returns false.
注意在上面代碼中的while循環對SqlDataReader對象rdr調用的Read方法。Read方法的返回值為bool,並且只要有記錄讀取就返回真。在數據流中所有的最後一條記錄被讀取了,Read方法就返回false。
In previous lessons, we extracted the first column from the row by using the SqlDataReader indexer, i.e. rdr[0]. You can extract each column of the row with a numeric indexer like this, but it isn't very readable. The example above uses a string indexer, where the string is the column name from the SQL query (the table column name if you used an asterisk, *. String indexers are much more readable, making the code easier to maintain.
在前面的課程中,我們使用SqlDataReader的索引器,比如rdr[0],提取行中的第一列。你能夠使用諸如這樣的數值索引器提取行中的列,但是它並不具有很好的可讀性。上面的例子使用了字元串索引器,這里的字元串是從SQL查詢語句中得到的列名(表的列名如果你使用一個星號,*.字元串下標具有更好的可讀性,使得代碼能夠更好的維護。
Regardless of the type of the indexer parameter, a SqlDataReader indexer will return type object. This is why the example above casts results to a string. Once the values are extracted, you can do whatever you want with them, such as printing them to output with Console type methods.
無論索引器參數是什麼類型,一個SqlDataReader索引器將返回object類型。這就是為什麼上面要將結果轉換為string的原因。只要值被提取,你能夠對它們為所欲為,比如使用Console類型的方法將它們列印到輸出。
Finishing Up
完結
Always remember to close your SqlDataReader, just like you need to close the SqlConnection. Wrap the data access code in a try block and put the close operation in the finally block, like this:
一定要記住關閉SqlDataReader,就像關閉SqlConnection一樣。將數據存取代碼用try語句塊包圍起來,並把關閉操作放到finally語句塊中,就像這樣:
try
{
// data access code
}
finally
{
// 3. close the reader
if (rdr != null)
{
rdr.Close();
}
// close the connection too
}
The code above checks the SqlDataReader to make sure it isn't null. After the code knows that a good instance of the SqlDataReader exists, it can close it. Listing 1 shows the code for the previous sections in its entirety.
上面的代碼檢測SqlDataReader,確保它不為空。在代碼知道SqlDataReader的一個完好的實例存在,它就能夠關閉它。Listing1完整的顯示了前面各節的代碼。
Listing 1: Using the SqlDataReader
using System;
using System.Data;
using System.Data.SqlClient;
namespace Lesson04
{
class ReaderDemo
{
static void Main()
{
ReaderDemo rd = new ReaderDemo();
rd.SimpleRead();
}
public void SimpleRead()
{
// declare the SqlDataReader, which is used in
// both the try block and the finally block
SqlDataReader rdr = null;
// create a connection object
SqlConnection conn = new SqlConnection(
"Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI");
// create a command object
SqlCommand cmd = new SqlCommand(
"select * from Customers", conn);
try
{
// open the connection
conn.Open();
// 1. get an instance of the SqlDataReader
rdr = cmd.ExecuteReader();
// print a set of column headers
Console.WriteLine(
"Contact Name City Company Name");
Console.WriteLine(
"------------ ------------ ------------");
// 2. print necessary columns of each record
while (rdr.Read())
{
// get the results of each column
string contact = (string)rdr["ContactName"];
string company = (string)rdr["CompanyName"];
string city = (string)rdr["City"];
// print out the results
Console.Write("{0,-25}", contact);
Console.Write("{0,-20}", city);
Console.Write("{0,-25}", company);
Console.WriteLine();
}
}
finally
{
// 3. close the reader
if (rdr != null)
{
rdr.Close();
}
// close the connection
if (conn != null)
{
conn.Close();
}
}
}
}
}
Summary
總結
SqlDataReader objects allow you to read data in a fast forward-only manner. You obtain data by reading each row from the data stream. Call the Close method of the SqlDataReader to ensure there are not any resource leaks.
SqlDataReader對象允許你以一種快速的只向前的方式讀取數據。你從數據流中讀取每一行來讀取數據。調用SqlDataReader的Close方法保證資源泄漏不會發生。
I hope you enjoyed this lesson. The next one in this series is Lesson 05: Working with Disconnected Data - The DataSet and SqlDataAdapter.
For further questions, you are welcome to participate in the C# Station Discussion Forums.
Your feedback is very important and I appreciate any constructive contributions you have. Please feel free to contact me for feedback or comments you may have about this lesson.