PrestoDB是基于MPP架構的開源大數據分布式SQL查詢引擎,支持對接MySQL、Elasticsearch、Tablestore等多種數據源。使用PrestoDB對接表格存儲Tablestore后,基于PrestoDB on Tablestore您可以使用SQL查詢與分析Tablestore中的數據、寫入數據到Tablestore以及導入數據到Tablestore。
背景信息
PrestoDB是基于MPP架構的開源大數據分布式SQL查詢引擎,支持對接MySQL、Elasticsearch、Tablestore等多種數據源。PrestoDB可以作為查詢工具、數據ETL工具、壓力器和統一查詢引擎來滿足不同場景的數據處理需求。
PrestoDB作為日常開發和調查問題時的查詢工具,支持通過SQL查詢或分析表中數據。
PrestoDB作為數據ETL工具,支持實現跨表或跨實例的數據復制以及異構數據源的數據拷貝。
PrestoDB作為壓力器,支持批量掃描或者批量寫入數據。
PrestoDB作為數據中臺內的統一查詢引擎,支持對接多種異構數據源。
通過PrestoDB使用Tablestore前,您需要使用PrestoDB對接Tablestore。對接完成后,基于PrestoDB on Tablestore您可以使用SQL查詢與分析Tablestore中的數據、寫入數據到Tablestore以及導入數據到Tablestore。
前提條件
已準備帶有Linux系統或者macOS系統的服務器并完成如下軟件的安裝,本文以Linux系統為例介紹。
說明如果當前沒有帶有Linux系統的服務器,推薦您使用云服務器ECS部署Linux系統后再進行操作。更多信息,請參見通過控制臺使用ECS實例(快捷版)。
已完成Java 8(64-bit)和Python3開發環境的安裝。
已完成PrestoDB安裝。
請根據所用PrestoDB版本下載相應的prestodb-tablestore-connector文件并將文件上傳到PrestoDB安裝目錄下的
plugin
目錄中,然后解壓文件。prestodb-tablestore-connector插件版本與PrestoDB版本的配套關系請參見下表。
插件版本
PrestoDB版本
說明
0.280
首個版本發布。本插件適用于PrestoDB 0.280及之后版本。
已獲取PrestoDB要對接的Tablestore相關信息,例如訪問賬號、實例信息、表信息等。
已為具有Tablestore操作權限的RAM用戶創建AccessKey。具體操作,請參見獲取AccessKey。
說明如果未為RAM用戶授予操作Tablestore的權限,請完成授權后再進行操作。具體操作,請參見通過RAM Policy為RAM用戶授權。
注意事項
只適用于寬表模型。
當前PrestoDB的寫入模式默認為UpdateRow,暫時不提供PutRow的寫入模式。如果需要通過PrestoDB寫入數據到Tablestore,請務必確保Tablestore數據表的是否允許更新配置為是,否則數據無法寫入。
重要由于使用了多元索引數據生命周期(即取值不為-1)時,您必須配置Tablestore數據表的是否允許更新配置為否,因此如果某個表使用了多元索引數據生命周期,則無法通過PrestoDB寫入數據到該表。
如果實際場景中有使用PutRow的寫入模式需求,請通過釘釘搜索36165029092(
表格存儲技術交流群-3
)加入聯系我們。
您可以通過控制臺在數據表的基本詳情頁簽查看是否允許更新的配置或者通過SDK調用DescribeTable接口查詢。
字段類型映射
表格存儲與PrestoDB都有其自身的類型,兩者之間的字段類型對應關系請參見下表。
Tablestore的字段類型 | PrestoDB的字段類型 |
string | varchar |
integer | bigint |
double | double |
boolean | boolean |
binary | varbinary |
使用流程
通過PrestoDB使用Tablestore的主要步驟包括使用PrestoDB對接Tablestore、運行PrestoDB的SQL CLI、創建Schema和映射表以及使用SQL操作數據。
步驟一:使用PrestoDB對接Tablestore
安裝PrestoDB后,您需要進行PrestoDB的Catalog配置和Schema配置來完成PrestoDB和Tablestore的對接,其中Catalog配置文件的存放路徑為etc/catalog/tablestore.properties
。
配置說明
Presto中的Catalog配置文件中包括了連接器、Schema配置模式等配置。其中連接器必須配置為tablestore,Schema配置模式支持本地靜態文件配置和Meta表動態配置兩種配置方式。
Schema配置模式的具體說明請參見下表。
Schema配置模式 | 說明 | 配置流程 |
本地靜態文件配置 | 通過靜態文件預先定義Tablestore資源相關信息,例如訪問賬號、實例信息、映射表的元數據。 重要 配置表的元數據時,必須包含所有的主鍵列且主鍵列順序必須與Tablestore表的主鍵順序一致。 使用PrestoDB訪問Tablestore時只能訪問靜態文件中已配置實例下的表。 | 運行PrestoDB前,完成如下步驟:
|
(推薦)Meta表動態配置 | 只需要配置用于存儲Schema的Metastore信息,無需預先定義Tablestore資源相關信息。 您可以在使用PrestoDB訪問Tablestore時動態創建Schema和創建表來定義Tablestore資源相關信息。其中創建Schema時需要配置賬號和實例信息,創建表時需要配置映射表的信息。 |
|
由上表可知,本地靜態文件配置方式必須預先定義要使用的表信息,如果表信息之前未配置,則需要手動添加后才能進行訪問。Meta表動態配置方式支持在使用PrestoDB訪問Tablestore時根據實際業務場景動態創建所需表信息,配置更靈活。推薦使用Meta表動態配置方式進行Schema配置。
操作步驟
在Catalog配置文件中指定Schema的配置模式并完成相應參數配置。此處以Meta表動態配置方式為例介紹對接配置操作。
進入PrestoDB安裝目錄,然后在PrestoDB安裝目錄下的
etc/catalog/
路徑中創建tablestore.properties
文件。重要請確保已具有文件的可執行權限后再進行編輯操作。
Catalog配置文件所處的目錄如下圖所示。
編輯
tablestore.properties
文件并根據實際修改配置示例后拷貝到文件中。使用Meta表動態配置方式時,請配置
tablestore.schema-mode
為meta-table
。說明如果要使用本地靜態文件配置方式進行Schema配置,請配置
tablestore.schema-mode
為file
并配置tablestore.schema-file
為本地靜態文件完整路徑,然后在靜態文件中配置Schema信息。更多信息,請參見Server配置。connector.name=tablestore tablestore.schema-mode=meta-table #tablestore.schema-mode=file tablestore.schema-file=/users/test/tablestore/presto/tablestore.schema tablestore.meta-instance=metastoreinstance tablestore.endpoint=http://metastoreinstance.cn-hangzhou,ots.aliyuncs.com/ tablestore.accessid=**************** tablestore.accesskey=************************** tablestore.meta-table=meta_table tablestore.auto-create-meta-table=true
具體配置項說明請參見下表。
配置項
示例
是否必選
說明
connector.name
tablestore
是
連接器名稱。此項必須配置tablestore。
tablestore.schema-mode
meta-table
是
Schema模式配置。此處配置為
meta-table
。tablestore.meta-instance
metastoreinstance
是
Tablestore中用于存儲元數據的實例,請根據實際修改。更多信息,請參見實例。
重要請確保配置的實例已在阿里云賬號中存在。
tablestore.endpoint
http://metastoreinstance.cn-hangzhou,ots.aliyuncs.com/
是
Tablestore中用于存儲元數據的實例的訪問地址,請修改實際修改。更多信息,請參見服務地址。
tablestore.accessid
****************
是
具有存儲元數據的實例訪問權限的用戶AccessKey ID和AccessKey Secret。
tablestore.accesskey
**************************
tablestore.meta-table
meta_table
是
Tablestore中用于存儲元數據的表名,請根據實際修改。
tablestore.auto-create-meta-table
true
否
是否需要自動創建元數據表。默認值為true,表示創建Schema時會自動創建元數據表。
保存配置文件并退出。
說明您可以執行cat命令確認配置是否保存成功。
步驟二:運行Presto的SQL CLI
對接完成后,您可以啟動Presto Server并運行SQL。
獲取client可執行程序。
下載PrestoDB客戶端。
此處以presto-cli-0.280-executable.jar為例介紹。
將PrestoDB客戶端保存到PrestoDB安裝目錄下的
bin
目錄中。在PrestoDB安裝目錄下的
bin
目錄中執行如下命令獲取client可執行程序。# 將PrestoDB客戶端文件重命名為presto。其中presto-cli-0.280-executable.jar請替換為實際所用的客戶端版本名稱。 mv presto-cli-0.280-executable.jar presto # 為用戶授予操作presto文件的權限。 chmod +x presto
client可執行程序的所處目錄如下圖所示。
在PrestoDB安裝目錄下的
bin
目錄中執行命令啟動Presto Server。重要啟動Presto Server時,您必須分別啟動Coordinator和至少一個Worker。
# 支持前臺運行和后臺運行兩種啟動方式,其中前臺運行方式更方便查看運行日志。 # 方式一:后臺運行 ./launcher start # 方式二:前臺運行 ./launcher run
在PrestoDB安裝目錄下的
bin
目錄中執行如下命令啟動SQL CLI。說明PrestoDB默認運行在8080端口。如果要修改端口配置,請修改
etc/config.properties
中的http-server.http.port
配置。修改部分config配置后需要重啟服務器使配置生效。
命令中的
./presto
為client可執行程序在PrestoDB安裝目錄下的bin
目錄中的相對路徑。
./presto --server localhost:8080 --catalog tablestore --schema default
配置項說明請參見下表。
配置項
示例
是否必選
說明
--server
localhost:8080
是
Presto Server的URI,請根據實際替換。此項的配置必須與PrestoDB安裝目錄下
etc/config.properties
文件中的discovery.uri
參數的配置相同。--catalog
tablestore
是
Catalog配置文件的名稱,此處配置為tablestore,與創建的Catalog配置文件名稱相同。
--schema
default
是
Schema配置,保持default配置即可。
步驟三:創建Schema和映射表
使用Meta表動態配置的Schema配置模式時,您需要手動創建并使用Schema用于配置對接的Tablestore實例和進行用戶鑒權,然后再創建Tablestore表的映射表用于數據查詢和分析。
如果使用的是本地靜態文件配置的Schema配置模式,則無需執行此步驟。
執行如下命令創建Schema。
創建一個訪問Tablestore myinstance實例的Schema,Schema名稱為testdb。
CREATE SCHEMA tablestore.testdb WITH ( endpoint = 'https://myinstance.cn-hangzhou.ots.aliyuncs.com', instance_name = 'myinstance', access_id = '************************', access_key = '********************************' );
具體參數配置說明請參見下表。
參數
示例
是否必選
說明
endpoint
https://myinstance.cn-hangzhou.ots.aliyuncs.com
是
Tablestore實例的訪問地址。更多信息,請參見服務地址。
instance_name
myinstance
是
Tablestore實例名稱。更多信息,請參見實例。
access_id
************************
是
阿里云賬號或者RAM用戶的AccessKey ID。
access_key
********************************
是
阿里云賬號或者RAM用戶的AccessKey Secret。
執行
use <SCHEMA_NAME>;
命令使用創建的Schema。其中
<SCHEMA_NAME>
請替換為實際創建的Schema名稱。您可以執行show schemas;
命令獲取Schema列表。執行如下命令Tablestore數據表的映射表。
重要創建映射表時,請注意如下事項:
請確保映射表中的字段類型和表格Tablestore數據表中的字段類型相匹配更多信息,請參見字段類型映射。
映射表名稱必須與Tablestore中實際的表名稱相同。
SQL語句CREATE TABLE中的table_name用于映射到Tablestore中實際的表。您可以為Tablestore中的同一個數據表創建多個不同的映射表。
映射表中必須包括數據表的所有主鍵列,但是支持只包括部分屬性列。
映射表中主鍵列的名稱和順序必須與Tablestore數據表中主鍵列的名稱和順序保持一致。映射表中每一個屬性列可通過指定 origin_name參數來映射到Tablestore中實際表內的列名。
假設數據表名為main_table,包括gid和uid兩個主鍵列以及col1、col2和col3三個屬性列。
以下SQL示例用于為Tablestore數據表main_table創建一個同名映射表。
CREATE TABLE if not exists main_table ( gid bigint, uid bigint, c1 boolean with (origin_name = 'col1'), c2 bigint with (origin_name = 'col2'), c3 varchar with (origin_name = 'col3') ) WITH ( table_name = 'main_table' );
步驟四:使用SQL操作數據
使用SQL操作Tablestore數據前,請確保已使用use <SCHEMA_NAME>;
命令使用所需Schema。
使用SQL語句查詢Schema配置、表的元數據以及讀寫Tablestore表中數據。更多SQL示例,請參見常用SQL示例。
查詢Schema配置。
獲取Schema列表
show schemas;
獲取指定Schema中表列表
show tables;
查看指定表的元數據
其中
<TABLE_NAME>
請替換為實際的表名稱。describe <TABLE_NAME>;
數據操作。
讀寫Tablestore數據。
寫入數據
插入一行數據
以下示例用于在main_table中插入一行數據。
insert into main_table values(10001,10001,true,100,'hangzhou');
批量導入數據
重要批量導入數據前,請確保已創建目標表,且目標表的表結構與源數據表的表結構保持一致。
以下示例用于將main_table表中gid大于0且uid小于10000的gid、uid、c1、c2和c3列數據批量導入到sampletable表中。
insert into sampletable select gid, uid, c1, c2, c3 from main_table where gid > 0 and uid < 100000;
讀取數據
以下示例用于查詢sampletable表中gid列值大于0,uid列值小于10且c1等于true的行數據。
select * from sampletable where gid > 0 and uid < 10 and c1 = true;
計費說明
表格存儲支持VCU模式(原預留模式)和CU模式(原按量模式)兩種計費模式,請根據所用的實例模型參考相應計費模式了解計費信息。更多信息,請參見計費概述。
VCU模式(原預留模式):計費項包括計算能力、數據存儲量和外網下行流量,其中數據存儲量包括高性能存儲、容量型存儲和多元索引存儲。
使用計算引擎訪問表格存儲時會消耗計算資源。存儲元數據的表占用的數據存儲量與創建實例時的存儲規格相關。
CU模式(原按量模式):計費項包括讀吞吐量、寫吞吐量、數據存儲量和外網下行流量。
使用計算引擎訪問表格存儲時,表格存儲會根據具體的讀寫請求按照讀寫吞吐量計量計費。存儲元數據的表占用的數據存儲量與創建實例時的存儲規格相關。
相關文檔
您可以使用MaxCompute、Spark、函數計算、Flink等其他計算引擎查詢與分析Tablestore表中數據。更多信息,請參見計算與分析概述。您也可以使用表格存儲的SQL查詢和多元索引統計聚合功能查詢與分析表中數據。更多信息,請參見SQL查詢介紹和多元索引介紹。
您也可以通過DataWorks集成服務、DataX等其他工具將其他數據源的數據遷移到表格存儲中。更多信息,請參見遷移工具。
如果要以圖表等形式可視化展示數據,您可以使用DataV或者Grafana實現。更多信息,請參見數據可視化工具。
結合計算引擎和表格存儲您可以實現表格存儲結合Spark流批處理實現一體化存儲和計算、表格存儲結合實時計算Flink進行大數據分析等解決方案。