本文介紹如何使用云原生數據倉庫 AnalyticDB MySQL 版Spark SQL讀寫MaxCompute數據。
背景信息
大數據計算服務MaxCompute是一種快速、完全托管的TB/PB級數據倉庫解決方案。您可以通過AnalyticDB for MySQLSpark SQL讀寫MaxCompute數據。
前提條件
AnalyticDB for MySQL集群的產品系列為企業版、基礎版或湖倉版。
已創建數據庫賬號。
如果是通過阿里云賬號訪問,只需創建高權限賬號。具體操作,請參見創建高權限賬號。
如果是通過RAM用戶訪問,需要創建高權限賬號和普通賬號并且將RAM用戶綁定到普通賬號上。具體操作,請參見創建數據庫賬號和綁定或解綁RAM用戶與數據庫賬號。
已在AnalyticDB for MySQL集群中創建Job型資源組。具體操作,請參見新建資源組。
已創建與AnalyticDB for MySQL集群同地域的MaxCompute項目空間。具體操作,請參見創建MaxCompute項目。本文示例為杭州地域創建的項目空間
spark_on_maxcompute
。
操作步驟
您可以選擇批處理或者交互式執行任意一種方式讀寫MaxCompute數據。兩種方式的區別,請參見Spark SQL執行方式。
批處理方式讀寫MaxCompute數據
步驟一:提交Spark配置
登錄云原生數據倉庫AnalyticDB MySQL控制臺,在左上角選擇集群所在地域。在左側導航欄,單擊集群列表,在企業版或湖倉版頁簽下,單擊目標集群ID。
在左側導航欄,單擊作業開發 > SQL開發。
在SQLConsole窗口,選擇Spark引擎和Job型資源組。
在SQLConsole窗口,按照
SET Key=Value;
的形式輸入以下配置。SET spark.sql.catalog.odps = org.apache.spark.sql.execution.datasources.v2.odps.OdpsTableCatalog; SET spark.hadoop.odps.access.id = LTAI5tMnzDS5EyqqMsT****; SET spark.hadoop.odps.access.key = A2kHFzEgFidOKrDKqAbJIPt8****; SET spark.hadoop.odps.endpoint = http://service.cn-hangzhou.maxcompute.aliyun-inc.com/api; SET spark.hadoop.odps.project = spark_on_maxcompute; SET spark.adb.connectors = odps;
參數名稱
取值說明
spark.sql.catalog.<catalog_name>
Spark SQL支持的配置數據源的方式。
參數取值固定為
org.apache.spark.sql.execution.datasources.v2.odps.OdpsTableCatalog
。說明參數名稱中的
catalog_name
可自定義,本文示例為odps
。spark.hadoop.odps.access.id
阿里云賬號或者具備MaxCompute訪問權限的RAM用戶的AccessKey ID。
如何獲取AccessKey ID,請參見獲取AccessKey信息。
spark.hadoop.odps.access.key
阿里云賬號或者具備MaxCompute訪問權限的RAM用戶的AccessKey Secret。
如何獲取AccessKey Secret,請參見獲取AccessKey信息。
spark.hadoop.odps.endpoint
MaxCompute所在地域對應VPC網絡的Endpoint。
查詢各地域VPC網絡的Endpoint,請參見各地域Endpoint對照表(阿里云VPC網絡連接方式)。
spark.hadoop.odps.project
MaxCompute的項目空間名稱。
spark.adb.connectors
Spark作業連接的數據源,固定為
odps
。在彈窗中,選擇繼續執行。
步驟二:使用Spark SQL讀寫MaxCompute數據
輸入以下語句,單擊執行SQL(F8),并在彈窗中,單擊繼續執行。創建MaxCompute表。
CREATE TABLE odps.spark_on_maxcompute.spark_test(k1 int, k2 string) partitioned by (part int);
重要本示例中表名
odps.spark_on_maxcompute.spark_test
以三層Catalog形式命名。第一層為Catalog_name,需要與參數
spark.sql.catalog.<catalog_name>
中的Catalog_name一致,本文示例為odps
。第二層為MaxCompute項目空間名稱。
第三層為MaxCompute表名稱。
Spark SQL也支持使用兩層Catalog形式命名
<maxcompute_project_name>.<table_name>
,需要在執行建表語句前,先執行USE <catalog_name>;
。您還可以繼續執行USE <maxcompute_project_name>;
,建表時只寫表名。輸入以下語句,單擊執行SQL(F8),并在彈窗中,單擊繼續執行。向表中寫入數據。
INSERT INTO odps.spark_on_maxcompute.spark_test values (1, 'aaa', 101), (2, 'bbb', 102);
輸入以下語句,單擊執行SQL(F8),并在彈窗中,單擊繼續執行。查詢MaxCompute表數據。
SELECT * FROM odps.spark_on_maxcompute.spark_test;
說明您可以在DataWorks控制臺查詢對應的MaxCompute項目空間,確認在項目空間中表是否已經創建并且寫入數據。
交互式執行方式讀寫MaxCompute數據
步驟一:提交Spark配置
登錄云原生數據倉庫AnalyticDB MySQL控制臺,在左上角選擇集群所在地域。在左側導航欄,單擊集群列表,在企業版或湖倉版頁簽下,單擊目標集群ID。
在左側導航欄,單擊集群管理 > 資源組管理。
在資源組列表中,單擊目標Job型資源組操作列的高級配置。
單擊其他配置后的,填寫以下參數。
參數名稱
取值說明
spark.sql.catalog.<catalog_name>
Spark SQL支持的配置數據源的方式。
參數取值固定為
org.apache.spark.sql.execution.datasources.v2.odps.OdpsTableCatalog
。說明參數名稱中的
catalog_name
可自定義,本文示例為odps
。spark.hadoop.odps.access.id
阿里云賬號或者具備MaxCompute訪問權限的RAM用戶的AccessKey ID。
如何獲取AccessKey ID,請參見獲取AccessKey信息。
spark.hadoop.odps.access.key
阿里云賬號或者具備MaxCompute訪問權限的RAM用戶的AccessKey Secret。
如何獲取AccessKey Secret,請參見獲取AccessKey信息。
spark.hadoop.odps.endpoint
MaxCompute所在地域對應VPC網絡的Endpoint。
查詢各地域VPC網絡的Endpoint,請參見各地域Endpoint對照表(阿里云VPC網絡連接方式)。
spark.hadoop.odps.project
MaxCompute的項目空間名稱。
spark.adb.connectors
Spark作業連接的數據源,固定為
odps
。單擊啟動。當高級配置(Spark ThriftServer配置)頁面顯示運行中,則配置生效。
步驟二:使用Spark SQL讀寫MaxCompute數據
在左側導航欄,單擊作業開發 > SQL開發。
在SQLConsole窗口,選擇Spark引擎和Job型資源組。
輸入以下語句,單擊執行SQL(F8),創建MaxCompute表。
CREATE TABLE odps.spark_on_maxcompute.spark_test(k1 int, k2 string) partitioned by (part int);
重要本示例中表名
odps.spark_on_maxcompute.spark_test
以三層Catalog形式命名。第一層為Catalog_name,需要與參數
spark.sql.catalog.<catalog_name>
中的Catalog_name一致,本文示例為odps
。第二層為MaxCompute項目空間名稱。
第三層為MaxCompute表名稱。
Spark SQL也支持使用兩層Catalog形式命名
<maxcompute_project_name>.<table_name>
,需要在執行建表語句前,先執行USE <catalog_name>;
。您還可以繼續執行USE <maxcompute_project_name>;
,建表時只寫表名。輸入以下語句,單擊執行SQL(F8),向表中寫入數據。
INSERT INTO odps.spark_on_maxcompute.spark_test values (1, 'aaa', 101), (2, 'bbb', 102);
輸入以下語句,單擊執行SQL(F8),查詢MaxCompute表數據。
SELECT * FROM odps.spark_on_maxcompute.spark_test;
說明您可以在DataWorks控制臺查詢對應的MaxCompute項目空間,確認在項目空間中表是否已經創建并且寫入數據。
支持的操作和數據類型
支持的庫表操作
SHOW DATABASES
AHOW TABLES
CREATE TABLE
DROP TABLE
SELECT
INSERT INTO
INSERT INTO PARTITION
暫不支持INSERT OVERWRITE PARTITION。
支持的字段類型
BOOLEAN
DOUBLE
INT
BIGINT
STRING
DECIMAL
DATA
TIMESTAMP
FLOAT
SMALLINT
TINYINT
BINARY
ARRAY
MAP
STRUCT
支持的分區字段類型
INT
BIGINT
STRING
TINYINT
SMALLINT