使用

本文档将介绍存储类型与SparkSQL 实例类型映射、SequoiaDB 存储引擎向 SparkSQL 实例类型转换的兼容性及 Spark-SequoiaDB 的使用

存储类型与SparkSQL 实例类型映射

存储引擎类型SparkSQL 实例类型SQL 实例类型
int32IntegerTypeint
int64LongTypebigint
doubleDoubleTypedouble
decimalDecimalTypedecimal
stringStringTypestring
ObjectIdStringTypestring
booleanBooleanTypeboolean
dateDateTypedate
timestampTimestampTypetimestamp
binaryBinaryTypebinary
nullNullTypenull
BSON(嵌套对象)StructTypestruct<field:type,…>
arrayArrayTypearray<type>

SequoiaDB 存储引擎向 SparkSQL 实例类型转换的兼容性

Y 表示兼容,N 表示不兼容

ByteTypeShortTypeIntegerTypeLongTypeFloatTypeDoubleTypeDecimalTypeBooleanType
int32YYYYNNY
int64YYYYNNY
doubleYNNYNNY
decimalYYYYNNY
stringYYYYNNY
ObjectIdYNNYNNY
booleanYNNYNNY
dateYYYYNNY
timestampYYYYNNY
binaryYNNYNNY
nullYYYYYYY
BSONYNNNNYY
arrayYNNNYNY

Note:

  • 不支持 SparkSQL 的 CalendarIntervalType 类型;
  • null 转换为任意类型仍为 null;
  • 不兼容类型转换时变为目标类型的零值;
  • date 和 timestamp 与数值类型转换时取其毫秒值;
  • string 如果是数值的字符串类型,则可转为对应的数值时,否则转换为 null;
  • boolean 值转为数值类型时,true 为 1,false 为 0;
  • 数值类型之间转换可能会溢出或损失精度。

Spark-SequoiaDB 使用

下述以通过 SparkSQL 创建 SequoiaDB 表为例,创建语句如下:

  1. create <[temporary] table| temporary view> <tableName> [(schema)] using com.sequoiadb.spark options (<option>, <option>, ...)
  • temporary 表示为临时表或视图,只在创建表或视图的会话中有效,会话退出后自动删除。

  • 表名后紧跟的 schema 可不填,连接器会自动生成。自动生成的 schema 字段顺序与集合中记录的顺序不一致,因此如果对 schema 的字段顺序有要求,应该显式定义 schema 。

  • option 为参数列表,参数是键和值都为字符串类型的键值对,其中值的前后需要有单引号,多个参数之间用逗号分隔。

option 参数说明

名称类型默认值描述是否必填
hoststring-SequoiaDB 协调节点/独立节点地址,多个地址以”,”分隔,例如:”server1:11810,server2:11810”
collectionspacestring-集合空间名称
collectionstring-集合名称(不包含集合空间名称)
usernamestring“”用户名
passwordtypestring“cleartext”密码类型,取值如下:
“cleartext”:表示参数 password 为明文密码
“file”:表示参数 password 为密码文件路径
passwordstring“”用户名对应的密码
samplingratiodouble1schema 采样率,取值范围为(0, 1.0]
samplingnumint641000schema 采样数量(每个分区),取值大于 0
samplingwithidbooleanFALSEschema采样时是否带 _id 字段,取值为 true 或 false
samplingsinglebooleanTRUEschema 采样时使用一个分区,取值为 true 或 false
bulksizeint32500向 SequoiaDB 集合插入数据时批插的数据量,取值大于 0
partitionmodestringauto分区模式,取值可以是”single”、”sharding”、”datablock”、”auto”;设为”auto”时根据情况自动选择”sharding”或”datablock”
partitionblocknumint324每个分区的数据块数,在按 datablock 分区时有效,取值大于 0
partitionmaxnumint321000最大分区数量,在按 datablock 分区时有效,取值大于等于 0,等于 0 时表示不限制分区最大数量
由于 partitionMaxNum 的限制,每个分区的数据块数可能与 partitionBlockNum 不同
preferredinstancestring“A”指定分区优先选择的节点实例,取值可参考 preferredinstance
preferredinstancemodestring“random”在preferredinstance有多个实例符合时的选择模式,取值可参考 preferredinstancemode
preferredinstancestrictbooleanTRUE在 preferredinstance 指定的实例 ID 都不符合时是否报错
ignoreduplicatekeybooleanFALSE向表中插入数据时忽略主键重复的错误
ignorenullfieldbooleanFALSE向表中插入数据时忽略值为 null 的字段
pagesizeint3265536create table as select 创建集合空间时指定数据页大小,如果集合空间已存在则忽略该参数
domainstring-create table as select 创建集合空间时指定所属域,如果集合空间已存在则忽略该参数
shardingkeyjson-create table as select 创建集合时指定分区键
shardingtypestring“hash”create table as select 创建集合时指定分区类型,取值可以是”hash”和”range”
replsizeint321create table as select 创建集合时指定副本写入数
compressiontypestring“none”create table as select 创建集合时指定压缩类型,取值可以是”none”、”lzw”和”snappy”,”none”表示不压缩
autosplitbooleanFALSEcreate table as select 创建集合时指定是否自动切分,必须配合散列分区和域使用,且不能与 group 同时使用
groupstring-create table as select 创建集合时指定创建在某个复制组,group 必须存在于集合空间所属的域中

示例

  1. 假设集合名为 test.data ,协调节点在 serverX 和 serverY 上,通过 spark-sql 创建一个表来对应 SequoiaDB 的集合

    1. spark-sql> create table datatable(c1 string, c2 int, c3 int) using com.sequoiadb.spark options(host 'serverX:11810,serverY:11810', collectionspace 'test', collection 'data');
  2. 从 SequoiaDB 的表 t1 向表 t2 插入数据

    1. spark-sql> insert into table t2 select * from t1;