Spark SQL创建内表

更新时间:

AnalyticDB for MySQL支持使用Spark SQL创建C-Store表(即表引擎是XUANWU的表),本文主要介绍使用Spark SQL创建C-Store表的语法、示例以及数据类型的映射关系。

背景信息

AnalyticDB for MySQL Spark SQL创建C-Store表的语法与开源社区Spark SQL的建表语法存在差异,AnalyticDB for MySQL支持特有的表属性,详情请参见参数说明AnalyticDB for MySQL Spark SQL的建库、查询库和查询表等语法与开源社区Spark一致,详情请参见开源社区Spark SQL参考文档

使用限制

仅支持使用Spark SQL创建表引擎为XUANWU的表。

语法

CREATE TABLE [ IF NOT EXISTS ] table_identifier
    [ ( column_name column_type [ COMMENT col_comment1 ], ... ) ]
    USING adb
    [ COMMENT table_comment ]
    [ TBLPROPERTIES ( key1=val1, key2=val2, ... ) ]

参数说明

参数

是否必填

说明

table_identifier

表名。支持db_name.table_identifier格式,区分不同数据库下相同名字的表。

表名的命名规则,请参见命名约束

column_name

列名。

列名的命名规则,请参见命名约束

column_type

列的数据类型。

Spark SQL支持的数据类型,请参见数据类型映射

USING adb

指定创建AnalyticDB for MySQL类型的表。

COMMENT

表注释。

TBLPROPERTIES

distributeType

设置分布键类型。取值如下:

  • HASH:在普通表中定义表的分布键,按照所选列的HASH值进行分片。

  • BROADCAST:定义复制表,复制表会在集群的每个Shard存储一份数据,因此建议复制表的数据量不宜太大。

distributeColumns

定义分布键(一级分区)。支持将多个字段作为分布键,在建表后不支持修改分布键。

storagePolicy

指定存储策略。取值如下:

  • HOT(默认值):热存储。所有数据分区都在SSD盘,满足高性能访问的需求,查询性能最好,但存储成本最高。

  • COLD:冷存储。所有分区都在OSS,采用同城冗余存储(多AZ),是一种较为经济的存储策略。

  • MIXED:混合存储。热分区数据存储在SSD盘,冷分区数据存储在OSS。既保证热分区数据的查询性能,又节省冷分区数据的存储成本。需要通过hotPartitionCount指定热分区的分区数量。

说明

HOT、COLD、MIXED大小写兼容。

hotPartitionCount

指定MIXED存储策略时热分区的个数。表示按分区键的值的大小倒序排列,最大N个分区为热分区,其他分区为冷分区。

指定MIXED策略时,必须同时指定热分区的个数;其他策略禁止指定hotPartitionCount=N

说明

N为正整数。

indexName

设置索引名称,多个索引用英文逗号(,)分隔。示例:'indexName'='index1,index2'

indexType

设置索引类型。支持如下索引类型:

  • FULLTEXT:全文索引。

  • NORMAL:普通索引。

示例:'indexType.index1'='FULLTEXT'

indexColumn

设置被索引的列。

示例:'indexColumn.index1'='c1'

indexAll

设置是否对全部列进行索引。

  • Y(默认值):是。

  • N:否。

primaryKey

定义主键索引。

主键中必须包含分布键和分区键,建议将分布键和分区键放在组合主键的前部。

partitionType

设置分区键类型,固定为VALUE。

partitionColumn

定义分区键(二级分区)。

partitionCount

二级分区的生命周期。

当您指定了分区键时,必须定义生命周期partitionCount,否则会报错。

例如,当分区的列类型为日期时间类型时,'partitionCount'='365'表示每个分片(Shard)最多保留的二级分区个数为365,即如果数据保存天数为365天,则第366天写入数据后,系统会自动删除第1天写入的数据。

tableEngineName

设置存储引擎,默认值为XUANWU。

示例

新建非分区表

 CREATE TABLE orders (
  order_id BIGINT NOT NULL COMMENT '订单ID',
  customer_id INT NOT NULL COMMENT '顾客ID',
  order_status STRING NOT NULL COMMENT '订单状态',
  total_price BIGINT NOT NULL COMMENT '订单金额',
  order_date TIMESTAMP NOT NULL COMMENT '订单日期'
)
using adb 
    TBLPROPERTIES (
    'distributeType' = 'HASH',
    'distributeColumns' = 'order_status',
    'storagePolicy' = 'COLD'
  );    

新建分区表并设置生命周期

CREATE TABLE customer (
  customer_id BIGINT NOT NULL COMMENT '顾客ID',
  customer_name STRING NOT NULL COMMENT '顾客姓名',
  phone_num BIGINT NOT NULL COMMENT '电话',
  city_name STRING NOT NULL COMMENT '所属城市',
  sex INT NOT NULL COMMENT '性别',
  id_number STRING NOT NULL COMMENT '身份证号码',
  home_address STRING NOT NULL COMMENT '家庭住址',
  office_address STRING NOT NULL COMMENT '办公地址',
  age INT NOT NULL COMMENT '年龄',
  login_time TIMESTAMP NOT NULL COMMENT '登录时间'
 )
using adb 
    TBLPROPERTIES (
    'distributeType' = 'HASH',
    'primaryKey'= 'customer_id,phone_num,city_name',
    'distributeColumns' = 'city_name',
    'partitionType' = 'value',
    'partitionColumn' = 'city_name',
    'partitionCount' = 100,
    'indexAll' = 'N',
    'storagePolicy' = 'COLD'
  );    

数据类型映射

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

  • VARCHAR

  • TIME

  • POINT

  • JSON

  • ARRAY

  • MAP

TIMESTAMP

  • DATETIME

  • TIMESTAMP

相关文档

读写内表数据