本文介紹如何在同一個雲帳號下實現Table Store和MaxCompute之間的無縫串連。
背景資訊
MaxCompute是一項MaxCompute,它能提供快速、完全託管的PB級資料倉儲解決方案,使您可以經濟並高效地分析處理海量資料。您只需通過一條簡單的DDL語句,即可在MaxCompute上建立一張外部表格,建立MaxCompute表與外部資料源的關聯,提供各種資料的接入和輸出能力。MaxCompute表是結構化的資料,而外部表格可以不限於結構化資料。
Table Store與MaxCompute都有其自身的類型系統,兩者之間的類型對應關係如下表所示。
|
Tablestore |
MaxCompute |
|
STRING |
STRING |
|
INTEGER |
BIGINT |
|
DOUBLE |
DOUBLE |
|
BOOLEAN |
BOOLEAN |
|
BINARY |
BINARY |
準備工作
使用MaxCompute訪問Table Store前,您需要完成以下準備工作:
-
開通MaxCompute服務。
-
建立AccessKey。
-
在RAM控制台授權MaxCompute訪問Table Store的許可權。具體請參見跨帳號授權。
-
在本樣本中,建立的Table Store執行個體和資料表資訊如下:
-
執行個體名稱:cap1
-
資料表名稱:vehicle_track
-
主鍵資訊:vid(integer),gt(integer)
-
訪問網域名稱:
https://cap1.cn-hangzhou.ots-internal.aliyuncs.com說明使用MaxCompute訪問Table Store時,建議使用Table Store的私網地址。
-
設定執行個體網路存取控制。Table Store預設支援通過任意網路訪問執行個體,保持預設配置即可。配置如下:
預設訪問類型為自訂,允許網路類型中VPC、經典網、公網均已勾選,允許來源類型中可信網關(控制台)已勾選,單擊設定即可儲存。
-
步驟一:安裝並配置用戶端
-
下載MaxCompute用戶端並解壓。
說明確保您的機器上已安裝JRE 1.7或以上版本。
-
編輯conf/odps_config.ini檔案,對用戶端進行配置,如下所示。
# access_id和access_key是使用者的雲帳號AccessKey資訊(包括AccessKey ID和AccessKey Secret),可登入阿里雲官網,進入管理主控台,移動滑鼠到右上方頭像後單擊AccessKey進行查看。 access_id=******************* access_key=********************* # 指定使用者想進入的專案空間。 project_name=my_project # MaxCompute服務的訪問連結。 end_point=https://service.odps.aliyun.com/api # MaxCompute Tunnel服務的訪問連結。 tunnel_endpoint=https://dt.odps.aliyun.com # 當使用者執行一個作業後,用戶端會返回該作業的LogView地址。開啟該地址將會看到作業執行的詳細資料。 log_view_host=http://logview.odps.aliyun.com # 決定是否開啟HTTPS訪問。 https_check=true說明odps_config.ini檔案中使用
#作為注釋,MaxCompute用戶端內使用--作為注釋。 -
運行bin/odpscmd.bat,輸入
show tables;。如果顯示當前MaxCompute專案中的表,則表示上述配置正確。
odps@ MCOTStest>show tables; ALIYUN$document@aliyun-test.com:bank_data ALIYUN$document@aliyun-test.com:result_table OK
步驟二:建立外部表格
建立一張MaxCompute的資料表(ots_vehicle_track)關聯到Tablestore的某一張表(vehicle_track)。
關聯的資料表資訊如下。
-
執行個體名稱:cap1
-
資料表名稱:vehicle_track
-
主鍵資訊:vid(int),gt(int)
-
訪問網域名稱:
https://cap1.cn-hangzhou.ots-internal.aliyuncs.com
CREATE EXTERNAL TABLE IF NOT EXISTS ots_vehicle_track
(
vid bigint,
gt bigint,
longitude double,
latitude double,
distance double ,
speed double,
oil_consumption double
)
STORED BY 'com.aliyun.odps.TableStoreStorageHandler' -- (1)
WITH SERDEPROPERTIES ( -- (2)
'tablestore.columns.mapping'=':vid, :gt, longitude, latitude, distance, speed, oil_consumption', -- (3)
'tablestore.table.name'='vehicle_track' -- (4)
)
LOCATION 'tablestore://cap1.cn-hangzhou.ots-internal.aliyuncs.com'; -- (5)
參數說明如下:
|
標號 |
參數 |
說明 |
|
(1) |
com.aliyun.odps.TableStoreStorageHandler |
MaxCompute內建的處理Tablestore資料的StorageHandler,定義了MaxCompute和Tablestore的互動,相關邏輯由MaxCompute實現。 |
|
(2) |
SERDEPROPERITES |
可以理解為提供參數選項的介面,在使用TableStoreStorageHandler時,有兩個必須指定的選項,分別是tablestore.columns.mapping和tablestore.table.name。 |
|
(3) |
tablestore.columns.mapping |
必填選項。MaxCompute將要訪問的Tablestore表的列,包括主鍵和屬性列。其中,帶 |
|
(4) |
tablestore.table.name |
需要訪問的Tablestore表名。 如果指定的Tablestore表名錯誤(不存在),則會報錯。MaxCompute不會主動建立Tablestore表。 |
|
(5) |
LOCATION |
指定訪問的Tablestore的執行個體資訊,包括執行個體名和endpoint等。 |
步驟三:通過外部表格訪問Tablestore資料
並發過高可能導致Table Store執行個體的水位上升,進而造成業務線上訪問延遲升高,甚至部分請求出錯。可通過設定set odps.sql.mapper.split.size=256調整並行度,調大該值可降低並發,調小則提升並發。更多資訊,請參見SQL調優。
建立外部表格後,Tablestore的資料便引入到了MaxCompute生態中,您可通過MaxCompute SQL命令來訪問Tablestore資料。
-- 統計編號4以下的車輛在時間戳記1469171387以前的平均速度和平均油耗。
select vid,count(*),avg(speed),avg(oil_consumption) from ots_vehicle_track where vid <4 and gt<1469171387 group by vid;
返回類似如下結果:
odps@ analysis_vehicle>select vid,count(*), avg(speed),avg(oil_consumption) from ots_vehicle_track where vid <4 and gt<1469171387 group by vid;
ID = 20170306160538185gsvlupk2
Log view:
http://logview.odps.aliyun.com/logview/?h=http://service.odps.aliyun.com/api&p=analysis_vehicle&i=20170306160538185gsvlupk2&token=ajhxdXZNWWVPcTNrWkFOS0xpSGtoM2tFWGEwPSxPRFBT
09CTzoxNjA0MzM3MzgzMTc0NjE5LDE0ODk0MjExMzgseyJTdGF0ZW1lbnQiOlt7IkFjdGlvbiI6WyJvZHBzOlJlYWQiXSwiRWZmZWN0IjoiQWxsb3ciLCJSZXNvdXJjZSI6WyJhY3M6b2RwczoqOnByb2plY3RzL2NJSZXNvdXJjZSI6WyJhY3M6b2RwczoqOnByb2plY3RzL2
aGljbGUvaW5zdGFuY2VzLzIwMTcwMzA2MTYwNTM4MTg1Z3N2bHVwazIiXX1dLCJWZXJzaW9uIjoiMSJ9
aGljbGUvaW5zdGFuY2VzLzIwMTcwMzA2MTYwNTM4MTg1Z3N2bHVwazIiXX1dLCJWZXJzaW9uIjoiMSJ9
Job Queueing.
STAGES STATUS TOTAL COMPLETED RUNNING PENDING BACKUP
M1_job_0 .............. TERMINATED 1 1 0 0 0
R2_1_job_0 ............. TERMINATED 1 1 0 0 0
STAGES: 02/02 [==========================>>] 100% ELAPSED TIME: 51.18 s
Summary:
+------------+------------+----------------------+----------------------+
| vid | _c1 | _c2 | _c3 |
+------------+------------+----------------------+----------------------+
| 0 | 47 | 0.11622589796672624 | 6.5155061805308145 |
| 1 | 47 | 0.11200649789552555 | 6.5673983001829885 |
| 2 | 47 | 0.098971763146085 | 6.738738527883797 |
| 3 | 47 | 0.11503916531605494 | 6.6038902692751895 |
+------------+------------+----------------------+----------------------+