通過Spark SQL讀寫C-Store數(shù)據(jù)
云原生數(shù)據(jù)倉(cāng)庫(kù) AnalyticDB MySQL 版集群支持通過Spark SQL在線或離線讀寫C-Store表(即表引擎是XUANWU的表)數(shù)據(jù)。本文主要介紹通過Spark SQL在線或離線讀寫C-Store表數(shù)據(jù)的具體方法。
前提條件
集群的產(chǎn)品系列為企業(yè)版、基礎(chǔ)版或湖倉(cāng)版。
說(shuō)明湖倉(cāng)版集群存儲(chǔ)預(yù)留資源需大于0 ACU。
企業(yè)版集群預(yù)留資源需大于0 ACU。
基礎(chǔ)版集群預(yù)留資源需大于0 ACU。
已在企業(yè)版、基礎(chǔ)版或湖倉(cāng)版集群中創(chuàng)建Job型資源組。具體操作,請(qǐng)參見新建和管理資源組。
已創(chuàng)建企業(yè)版、基礎(chǔ)版或湖倉(cāng)版集群的數(shù)據(jù)庫(kù)賬號(hào)。
步驟一:進(jìn)入數(shù)據(jù)開發(fā)
登錄云原生數(shù)據(jù)倉(cāng)庫(kù)AnalyticDB MySQL控制臺(tái),在左上角選擇集群所在地域。在左側(cè)導(dǎo)航欄,單擊集群列表,在企業(yè)版、基礎(chǔ)版或湖倉(cāng)版頁(yè)簽下,單擊目標(biāo)集群ID。
在左側(cè)導(dǎo)航欄,單擊
。在SQLConsole窗口,選擇Spark引擎和Job型資源組。
步驟二:創(chuàng)建庫(kù)和C-Store表
您可以選擇批處理或交互式執(zhí)行任意一種方式執(zhí)行以下SQL語(yǔ)句。詳情請(qǐng)參見Spark SQL執(zhí)行方式。
執(zhí)行以下語(yǔ)句,創(chuàng)建數(shù)據(jù)庫(kù)。
CREATE DATABASE spark_create_adb_db_test;
執(zhí)行以下語(yǔ)句,創(chuàng)建C-Store表。Spark SQL建表語(yǔ)法詳情請(qǐng)參見Spark SQL創(chuàng)建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表數(shù)據(jù)
您可以選擇批處理或交互式執(zhí)行任意一種方式執(zhí)行以下SQL語(yǔ)句。詳情請(qǐng)參見Spark SQL執(zhí)行方式。
執(zhí)行Spark SQL語(yǔ)句,只返回執(zhí)行成功或者失敗,不返回?cái)?shù)據(jù)。您可以在Spark Jar開發(fā)頁(yè)面應(yīng)用列表頁(yè)簽中的日志查看表數(shù)據(jù)。詳情請(qǐng)參見查看Spark應(yīng)用信息。
離線讀寫數(shù)據(jù)時(shí),僅需選擇Spark引擎和Job型資源組,無(wú)需配置其他參數(shù);在線讀寫數(shù)據(jù)時(shí),需通過SET命令設(shè)置執(zhí)行SQL語(yǔ)句的資源組,且資源組類型必須為Interactive型。
離線讀寫數(shù)據(jù)
離線讀寫數(shù)據(jù)需注意以下內(nèi)容:
僅支持通過Spark SQL讀取(SELECT)和寫入(INSERT)C-Store分區(qū)表中的數(shù)據(jù),不支持讀寫非分區(qū)表數(shù)據(jù)。分區(qū)表創(chuàng)建方法,詳情請(qǐng)參見CREATE TABLE。
不支持通過Spark SQL更新(UPDATE)和刪除(DELETE)C-Store表數(shù)據(jù)(包括分區(qū)表和非分區(qū)表)。
查詢熱數(shù)據(jù)時(shí),需要先使用XIHE引擎執(zhí)行如下SQL修改相關(guān)配置項(xiàng),再執(zhí)行SQL查詢語(yǔ)句,否則會(huì)導(dǎo)致SQL執(zhí)行失敗。配置項(xiàng)如下:
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;
修改配置項(xiàng)后需進(jìn)行強(qiáng)制BUILD,詳情請(qǐng)參見BUILD。
寫入C-Store表數(shù)據(jù)。
AnalyticDB for MySQL支持通過INSERT OVERWRITE語(yǔ)句離線寫入數(shù)據(jù)到C-Store表。您可以選擇以下任意一種方式向C-Store表寫入數(shù)據(jù):
方式一:INSERT OVERWRITE靜態(tài)分區(qū)寫入
INSERT OVERWRITE spark_create_adb_db_test.test_adb_tbl partition(age=10) VALUES (1, 'bom');
方式二:INSERT OVERWRITE動(dòng)態(tài)分區(qū)寫入
INSERT OVERWRITE spark_create_adb_db_test.test_adb_tbl partition (age) VALUES (1, 'bom', 10);
讀取C-Store表數(shù)據(jù)。
SELECT * FROM spark_create_adb_db_test.test_adb_tbl;
在線讀寫數(shù)據(jù)
AnalyticDB for MySQL支持通過INSERT INTO語(yǔ)句在線寫入數(shù)據(jù)到C-Store表。
-- 集群的數(shù)據(jù)庫(kù)賬號(hào)、密碼以及內(nèi)網(wǎng)地址
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;
-- 設(shè)置執(zhí)行SQL的在線資源組
SET spark.adb.resourceGroup=user_default;
-- 寫入數(shù)據(jù)
INSERT INTO spark_create_adb_db_test.test_adb_tbl VALUES (1, 'adb', 20);
--讀取數(shù)據(jù)
SELECT * FROM spark_create_adb_db_test.test_adb_tbl;
參數(shù)說(shuō)明:
參數(shù) | 說(shuō)明 |
spark.adb.username | 集群的數(shù)據(jù)庫(kù)賬號(hào)。 |
spark.adb.password | 數(shù)據(jù)庫(kù)賬號(hào)的密碼。 |
spark.adb.endpoint | 集群的內(nèi)網(wǎng)地址和端口。格式為 |
spark.adb.eni.enabled | 開啟ENI訪問。 訪問數(shù)據(jù)時(shí),需將 |
spark.adb.eni.vswitchId | 集群所屬的交換機(jī)ID。 |
spark.adb.eni.securityGroupId | 集群的安全組ID。您可以選擇已有安全組或新建安全組。 重要 安全組需和企業(yè)版、基礎(chǔ)版或湖倉(cāng)版集群屬于同一VPC。 |
spark.adb.useJdbc | 是否使用JDBC方式訪問數(shù)據(jù)。取值:
在線寫入數(shù)據(jù)時(shí)需配置為true。 |
spark.adb.resourceGroup | 設(shè)置執(zhí)行SQL語(yǔ)句的Interactive型資源組。 說(shuō)明 創(chuàng)建企業(yè)版、基礎(chǔ)版或湖倉(cāng)版集群時(shí),會(huì)默認(rèn)創(chuàng)建一個(gè)名為 |
Spark配置項(xiàng)
通過Spark SQL讀寫C-Store表時(shí),支持配置如下配置項(xiàng):
配置項(xiàng) | 說(shuō)明 | 默認(rèn)值 |
spark.adb.write.batchSize | 單批次寫入數(shù)據(jù)的條數(shù)。取值范圍為大于0的正整數(shù)。 說(shuō)明 僅在線寫入數(shù)據(jù)時(shí),支持配置該參數(shù)。 | 600 |
spark.adb.write.arrow.maxMemoryBufferSize | 寫入最大內(nèi)存緩沖大小。取值范圍為大于0的正整數(shù),單位為MB。 說(shuō)明 僅離線寫入數(shù)據(jù)時(shí),支持配置該參數(shù)。 | 1024 |
spark.adb.write.arrow.maxRecordSizePerBatch | 單批次寫入數(shù)據(jù)的最大記錄條數(shù)。取值范圍為大于0的正整數(shù)。 說(shuō)明 僅離線寫入數(shù)據(jù)時(shí),支持配置該參數(shù)。 | 500 |