阿里OSS Select

killernova發表於2018-07-28

最近阿里的select object在公測,但是暫時只有Java和Python的sdk,所以擼了一個go的sdk,有需要的可以看看。

github: https://github.com/killernova/goossselect

關於 Select Object

物件儲存(Object Storage Service,簡稱OSS) 是基於阿里雲飛天分散式系統的海量、安全和高可靠的雲端儲存服務,是一種面向網際網路的大規模、低成本、通用儲存,提供RESTful API,具備容量和處理的彈性擴充套件能力。OSS不僅非常適合儲存海量的媒體檔案,也適合作為資料倉儲儲存海量的資料檔案。目前Hadoop 3.0已經支援OSS,在EMR上執行Spark/Hive/Presto等服務以及阿里自研的MaxCompute、HybridDB以及新上線的Data Lake Analytics都支援從OSS直接處理資料。 然而,目前OSS提供的GetObject介面決定了大資料平臺只能把OSS資料全部下載到本地然後進行分析過濾,在很多查詢場景下浪費了大量頻寬和客戶端資源。 SelectObject介面是對上述問題的解決方案。其核心思想是大資料平臺將條件、Projection下推到OSS層,讓OSS做基本的過濾,從而只返回有用的資料。客戶端一方面可以減少網路頻寬,另一方面也減少了資料的處理量,從而節省了CPU和記憶體用來做其他更多的事情。這使得基於OSS的資料倉儲、資料分析成為一種更有吸引力的選擇。 SelectObject現在處於公測階段,提供了Java、Python 的SDK。目前支援RFC 4180標準的CSV(包括TSV等類CSV檔案,檔案的行列分隔符以及Quote字元都可自定義),且檔案編碼為UTF-8。支援標準儲存型別和低頻訪問儲存型別的檔案。支援加密檔案(OSS完全託管、KMS加密-預設KMS主金鑰)。 支援的SQL語法如下: SQL 語句: Select From Where 資料型別:String, Int(64bit), float(64bit), Timestamp, Boolean 操作: 邏輯條件(AND,OR,NOT), 算術表示式(+-*/%), 比較操作(>,=, <, >=, <=, !=),String 操作 (LIKE, || ) 和GetObject提供了基於Byte的分片下載類似,SelectObject也提供了分片查詢的機制,包括兩種分片方式:按行分片和按Split分片。按行分片是常用的分片方式,然而對於稀疏資料來說,按行分片可能會導致分片時負載不均衡。Split是OSS用於分片的一個概念,一個Split包含多行資料,每個Split的資料大小大致相等,相對按行來,按Spit是更加高效的分片方式。尤其是對於CSV資料來說,基於Byte的分片可能會將資料破壞,因此按Spit分片更加合適。

具體可以參考阿里的官方文件: https://help.aliyun.com/document_detail/74054.html?spm=a2c4g.11174283.6.939.CITRtK

相關文章