1. 程式人生 > >OSS重磅推出OSS Select——使用SQL選取文件的內容【免費公測中】

OSS重磅推出OSS Select——使用SQL選取文件的內容【免費公測中】

數據庫 OSS

摘要: OSS重磅推出OSS Select功能,可以直接使用簡單的SQL語句,從OSS的文件中選取所需要的內容

對象存儲OSS(Object Storage Service)具有海量、可靠、安全、高性能、低成本的特點。OSS提供標準、低頻、歸檔類型,覆蓋多種數據從熱到冷的存儲需求,單個文件的大小從1字節到48.8TB,可以存儲的文件個數無限制。OSS已成為互聯網、企業級數據應用的基礎設施。
通常,獲取對象存儲數據的通方式為:獲取整個對象,或按指定的字節範圍來獲取數據。今天,我們重磅推出OSS Select,直接使用簡單的SQL語句,從OSS的文件中選取所需要的內容

OSS Select介紹

使用SQL選取OSS文件中的內容

OSS Select(公測中)讓開發者可以直接使用SQL語句,從OSS文件中選取需要的內容。
技術分享圖片
使用OSS Select,只獲取應用程序所需的查詢結果,並支持並發地分片查詢,會大幅提升程序的性能,通常情況下能有400%的提升。
技術分享圖片

公測說明:

  • 文件格式:公測期間支持未加密的CSV格式或者有分隔符的UTF8文本文件,參考RFC4180,

  • 公測期間支持標準、低頻類型的Object

  • 支持RangeQuery(公測期間,RangeQuery模式下不支持Use Header Name)

  • OSS Select公測期間免費

  • 後續阿裏雲EMR、DataLakeAnalytics、MaxCompute、HybridDB等都會陸續支持OSS Select

使用示例(python)

# -*- coding: utf-8 -*-import osimport oss2def select_call_back(consumed_bytes, total_bytes = None):
    print('Consumed Bytes:' + str(consumed_bytes) + '\n')# 首先初始化AccessKeyId、AccessKeySecret、Endpoint等信息。# 通過環境變量獲取,或者把諸如“<你的AccessKeyId>”替換成真實的AccessKeyId等。## 以杭州區域為例,Endpoint可以是:#   http://oss-cn-hangzhou.aliyuncs.com#   https://oss-cn-hangzhou.aliyuncs.com# 分別以HTTP、HTTPS協議訪問。access_key_id = os.getenv('OSS_TEST_ACCESS_KEY_ID', '<你的AccessKeyId>')
access_key_secret = os.getenv('OSS_TEST_ACCESS_KEY_SECRET', '<你的AccessKeySecret>')
bucket_name = os.getenv('OSS_TEST_BUCKET', '<你的Bucket>')
endpoint = os.getenv('OSS_TEST_ENDPOINT', '<你的訪問域名>')# 確認上面的參數都填寫正確了for param in (access_key_id, access_key_secret, bucket_name, endpoint):    assert '<' not in param, '請設置參數:' + param# 創建Bucket對象,所有Object相關的接口都可以通過Bucket對象來進行bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)# csvfile = 'sample.csv'resultfilename = 'python_select.csv'csv_meta_params = {'FileHeaderInfo': 'None',                'RecordDelimiter': '\r\n'}# LineRange(可選參數):表示指定查詢行的範圍select_csv_params = {'FileHeaderInfo': 'None',                 'LineRange':(100,1000)} 

csv_header = bucket.get_csv_object_meta(key, csv_meta_params)# 將查詢結果輸出到文件result = bucket.select_csv_object_to_file(csvfile, resultfile, 
         "select _1, _3, _4 from ossobject where _4 > 40 and  _1 like '%Tom%' ", 
        select_call_back, input_format)

以上是一個簡單的python示例,使用SQL查詢OSS的對象,並將結果輸出到文件匯總。

除了將查詢結果輸出到文件,還可以將查詢結果直接返回

result = bucket.select_csv_object(csvfile,  "select * from ossobject where _4 > 40 and  _1 like '%Tom%' ", select_call_back, select_csv_params)


content_got = b''
for chunk in result:
    content_got += chunk
print(content_got)

查詢結果:
技術分享圖片

測試示例

您可以使用OSS Select來加速您的各類應用。OSS Select團隊,創建了一個Spark的示例,基於OSS Select,實現 Spark Data Source API。假設,您需要從大量的人員名單中,查詢符合條件的人員信息。比如查詢50歲以上,姓名中包含Tom的目標人員。

使用OSS Select提升應用程序性能

  • 啟用OSS Select,Spark借助OSS Select僅獲取文件中所需要的數據;而禁用OSS Select,Spark獲取整個文件
    技術分享圖片

  • 不使用OSS Select,查詢需要78秒(1.3分鐘)。而使用OSS Select,只需要11秒,程序性能提升6倍
    技術分享圖片

測試配置說明:

Spark測試集群配置:

數量配置
master14core 8GB
workers24core 8GB

Spark配置:

export SPARK_MASTER_IP=masterexport SPARK_WORKER_MEMORY=6gexport SPARK_WORKER_CORES=3export SPARK_WORKER_INSTANCES=1export SPARK_EXECUTOR_CORES=1export SPARK_EXECUTOR_MEMORY=2g

數據量:

CSV數據量為7GB。

原文鏈接


OSS重磅推出OSS Select——使用SQL選取文件的內容【免費公測中】