Spark SQL創(chuàng)建內(nèi)表
AnalyticDB for MySQL支持使用Spark SQL創(chuàng)建C-Store表(即表引擎是XUANWU的表),本文主要介紹使用Spark SQL創(chuàng)建C-Store表的語法、示例以及數(shù)據(jù)類型的映射關(guān)系。
背景信息
AnalyticDB for MySQL Spark SQL創(chuàng)建C-Store表的語法與開源社區(qū)Spark SQL的建表語法存在差異,AnalyticDB for MySQL支持特有的表屬性,詳情請參見創(chuàng)建表。AnalyticDB for MySQL Spark SQL的建庫、查詢庫和查詢表等語法與開源社區(qū)Spark一致,詳情請參見開源社區(qū)Spark SQL參考文檔。
創(chuàng)建表
語法
CREATE TABLE [ IF NOT EXISTS ] table_identifier
[ ( column_name column_type [ COMMENT col_comment1 ], ... ) ]
USING adb
[ COMMENT table_comment ]
[ TBLPROPERTIES ( key1=val1, key2=val2, ... ) ]
參數(shù)說明
參數(shù) | 說明 |
table_identifier | 表名。支持 表名的命名規(guī)則,請參見命名約束。 |
column_name | 列名。 列名的命名規(guī)則,請參見命名約束。 |
column_type | 列的數(shù)據(jù)類型。 Spark SQL支持的數(shù)據(jù)類型,請參見數(shù)據(jù)類型映射。 |
USING adb | 指定創(chuàng)建AnalyticDB for MySQL類型的表。 |
COMMENT | 表注釋。 |
TBLPROPERTIES | 定義表屬性。支持的表屬性,請參見表屬性說明。 |
表屬性說明
Spark SQL支持的表屬性如下。
表 1. 表屬性說明
表屬性 | 說明 | 是否必須 |
indexName={indexNameValue1,indexNameValue2,...} | 設(shè)置索引名稱,多個索引用英文逗號(,)分隔。示例: | 否 |
indexType.{indexNameValue}={indexTypeValue} | 設(shè)置索引類型。支持如下索引類型:
示例: | 否 |
indexColumn.{indexNameValue}={column_name1,column_name2,...} | 設(shè)置被索引的列。 示例: | 否 |
indexAll=[Y|N] | 設(shè)置是否對全部列進行索引。
| 否 |
primaryKey={column_name1 [,column_name2...]} | 定義主鍵索引。 主鍵中必須包含分布鍵和分區(qū)鍵,建議將分布鍵和分區(qū)鍵放在組合主鍵的前部。 | 否 |
distributeType=[HASH|BROADCAST] | 設(shè)置分布鍵類型,支持HASH或BROADCAST。
| 是 |
distributeColumns={column_name1[,column_name2,...]} | 定義分布鍵(一級分區(qū))。 AnalyticDB for MySQL支持將多個字段作為分布鍵。 AnalyticDB for MySQL不支持修改分布鍵。 | 是 |
partitionType=VALUE | 設(shè)置分區(qū)建類型,固定為VALUE。 | 否 |
partitionColumn={column_name} | 定義分區(qū)鍵(二級分區(qū))。 | 否 |
partitionCount={partitionCountValue} | 二級分區(qū)的生命周期。 當(dāng)您指定了分區(qū)鍵時,必須定義生命周期 例如,當(dāng)分區(qū)的列類型為日期時間類型時, | 否 |
storagePolicy=[HOT|COLD|MIXED] | 指定存儲策略。支持如下取值:
說明 HOT、COLD、MIXED大小寫兼容。 不同存儲策略下數(shù)據(jù)讀寫性能不同,存儲成本不同。為了降低數(shù)據(jù)存儲成本,同時還要保證查詢性能,您可以選擇將查詢頻度高的數(shù)據(jù)(稱為熱數(shù)據(jù))存儲在SSD介質(zhì);將查詢頻度低的數(shù)據(jù)(稱為冷數(shù)據(jù))存儲在OSS上。 根據(jù)業(yè)務(wù)需求,您還可以按表粒度、表的二級分區(qū)粒度獨立選擇冷、熱存儲介質(zhì)。例如,指定這個表數(shù)據(jù)全部存儲在SSD,或者全部存儲在OSS,或者指定這個表的一部分二級分區(qū)存儲在SSD,另一部分二級分區(qū)存儲在OSS。 | 是 |
hotPartitionCount=N | 指定MIXED存儲策略時熱分區(qū)的個數(shù)。表示按分區(qū)鍵的值的大小倒序排列,最大N個分區(qū)為熱分區(qū),其他分區(qū)為冷分區(qū)。 指定MIXED策略時,必須同時指定熱分區(qū)的個數(shù);其他策略禁止指定 說明 N為正整數(shù)。 | 否 |
tableEngineName=XUANWU | 設(shè)置存儲引擎,默認值為XUANWU。 | 否 |
示例
假設(shè)已有名為adb_demo
的數(shù)據(jù)庫。建表示例語句如下:
USE adb_demo;
CREATE TABLE `test_data__tbl` (
`k1` int,
`k2` string,
`part` int)
using adb
TBLPROPERTIES (
'distributeType' = 'HASH',
'distributeColumns' = 'part',
'partitionType' = 'value',
'partitionColumn' = 'part',
'partitionCount' = 4,
'indexAll' = 'N',
'storagePolicy' = 'COLD'
);
數(shù)據(jù)類型映射
Spark SQL列類型 | XIHE SQL列類型 |
BOOLEAN | BOOLEAN |
TINYINT | TINYINT |
SMALLINT | SMALLINT |
INT | INT |
INTEGER | INTEGER |
BIGINT | BIGINT |
FLOAT | FLOAT |
DOUBLE | DOUBLE |
BINARY | BINARY |
DATE | DATE |
STRING |
|
TIMESTAMP |
|