云原生數據倉庫 AnalyticDB MySQL 版集群支持通過Spark SQL在線或離線讀寫C-Store表數據。本文主要介紹通過Spark SQL在線或離線讀寫C-Store表數據的具體方法。
前提條件
集群的產品系列為企業版、基礎版或湖倉版。
說明湖倉版集群存儲預留資源需大于0 ACU。
企業版集群預留資源需大于0 ACU。
基礎版集群預留資源需大于0 ACU。
已在企業版、基礎版或湖倉版集群中創建Job型資源組。具體操作,請參見新建資源組。
已創建企業版、基礎版或湖倉版集群的數據庫賬號。
步驟一:進入數據開發
登錄云原生數據倉庫AnalyticDB MySQL控制臺,在左上角選擇集群所在地域。在左側導航欄,單擊集群列表,在企業版、基礎版或湖倉版頁簽下,單擊目標集群ID。
在左側導航欄,單擊
。在SQLConsole窗口,選擇Spark引擎和Job型資源組。
步驟二:創建庫和C-Store表
您可以選擇批處理或交互式執行任意一種方式執行以下SQL語句。詳情請參見Spark SQL執行方式。
執行以下語句,創建數據庫。
CREATE DATABASE spark_create_adb_db_test;
執行以下語句,創建C-Store表。Spark SQL建表語法詳情請參見Spark SQL創建C-Store表。
CREATE TABLE spark_create_adb_db_test.test_adb_tbl ( id int, name string COMMENT 'test_name', age int ) using adb TBLPROPERTIES('primaryKey'='id,age', 'distributeType'='HASH', 'distributeColumns'='id', 'partitionType'='value', 'partitionColumn'='age', 'partitionCount'='120' );
步驟三:讀寫C-Store表數據
您可以選擇批處理或交互式執行任意一種方式執行以下SQL語句。詳情請參見Spark SQL執行方式。
執行Spark SQL語句,只返回執行成功或者失敗,不返回數據。您可以在Spark Jar開發頁面應用列表頁簽中的日志查看表數據。詳情請參見查看Spark應用信息。
離線讀寫數據時,僅需選擇Spark引擎和Job型資源組,無需配置其他參數;在線讀寫數據時,需通過SET命令設置執行SQL語句的資源組,且資源組類型必須為Interactive型。
離線讀寫數據
離線讀寫數據需注意以下內容:
不支持通過Spark SQL更新和刪除C-Store表數據。
查詢熱數據時,需要先使用XIHE引擎執行如下SQL修改相關配置項,再執行SQL查詢語句,否則會導致SQL執行失敗。配置項如下:
SET adb_config CSTORE_HOT_TABLE_ALLOW_SINGLE_REPLICA_BUILD=true; SET adb_config ELASTIC_ENABLE_HOT_PARTITION_HAS_HDD_REPLICA=true; SET adb_config ELASTIC_PRODUCT_ENABLE_MIXED_STORAGE_POLICY=true;
修改配置項后需進行強制BUILD,詳情請參見BUILD。
寫入C-Store表數據。
AnalyticDB for MySQL支持通過INSERT OVERWRITE語句離線寫入數據到C-Store表。您可以選擇以下任意一種方式向C-Store表寫入數據:
方式一:INSERT OVERWRITE靜態分區寫入
INSERT OVERWRITE spark_create_adb_db_test.test_adb_tbl partition(age=10) VALUES (1, 'bom');
方式二:INSERT OVERWRITE動態分區寫入
INSERT OVERWRITE spark_create_adb_db_test.test_adb_tbl partition (age) VALUES (1, 'bom', 10);
讀取C-Store表數據。
SELECT * FROM spark_create_adb_db_test.test_adb_tbl;
在線讀寫數據
AnalyticDB for MySQL支持通過INSERT INTO語句在線寫入數據到C-Store表。
-- 集群的數據庫賬號、密碼以及內網地址
conf spark.adb.username=user;
conf spark.adb.password=password;
conf spark.adb.endpoint=amv-bp1a74zh1aqi2a6910000****.ads.aliyuncs.com:3306;
-- 開啟ENI訪問
SET spark.adb.eni.enabled=true;
SET spark.adb.eni.vswitchId=vsw-bp12ldm83z4zu9k4d****;
SET spark.adb.eni.securityGroupId=sg-bp1cdm3acizrgq6x****;
-- 使用JDBC模式
SET spark.adb.useJdbc = true;
-- 設置執行SQL的在線資源組
SET spark.adb.resourceGroup=user_default;
-- 寫入數據
INSERT INTO spark_create_adb_db_test.test_adb_tbl VALUES (1, 'adb', 20);
--讀取數據
SELECT * FROM spark_create_adb_db_test.test_adb_tbl;
參數說明:
參數 | 說明 |
spark.adb.username | 集群的數據庫賬號。 |
spark.adb.password | 數據庫賬號的密碼。 |
spark.adb.endpoint | 集群的內網地址和端口。格式為 |
spark.adb.eni.enabled | 開啟ENI訪問。 訪問數據時,需將 |
spark.adb.eni.vswitchId | 集群所屬的交換機ID。 |
spark.adb.eni.securityGroupId | 集群的安全組ID。您可以選擇已有安全組或新建安全組。 重要 安全組需和企業版、基礎版或湖倉版集群屬于同一VPC。 |
spark.adb.useJdbc | 是否使用JDBC方式訪問數據。取值:
在線寫入數據時需配置為true。 |
spark.adb.resourceGroup | 設置執行SQL語句的Interactive型資源組。 說明 創建企業版、基礎版或湖倉版集群時,會默認創建一個名為 |
Spark配置項
通過Spark SQL讀寫C-Store表時,支持配置如下配置項:
配置項 | 說明 | 默認值 |
spark.adb.write.batchSize | 單批次寫入數據的條數。取值范圍為大于0的正整數。 說明 僅在線寫入數據時,支持配置該參數。 | 600 |
spark.adb.write.arrow.maxMemoryBufferSize | 寫入最大內存緩沖大小。取值范圍為大于0的正整數,單位為MB。 說明 僅離線寫入數據時,支持配置該參數。 | 1024 MB |
spark.adb.write.arrow.maxRecordSizePerBatch | 單批次寫入數據的最大記錄條數。取值范圍為大于0的正整數。 說明 僅離線寫入數據時,支持配置該參數。 | 500 |