前言
Tablestore是一款NoSQL多模型数据库,可提供海量结构化数据存储以及快速的查询和分析服务。如何将数据导入Tablestore,可以通过SDK/API、控制台、命令行工具直接写入、或者使用离线数据迁移工具DataX等。本文介绍另外一种本地数据快速导入Tablestore的途径:通过Datahub将本地的CSV文件导入Tablestore,希望能给大家接入和使用Tablestore提供新思路。
原理介绍
为什么选择Datahub
Datahub是专注于流数据处理的平台,提供对流式数据的发布,订阅和分发功能。通过Datahub可以轻松构建基于流式数据的分析和应用。要将本地csv文件中的数据导入Tablestore我们当然可以用现已发布的SDK写一个数据导入的tool实现,选择Datahub因为它专注于做数据通道服务。首先Datahub提供了更丰富的数据接入方式如这篇文章介绍的从csv文件接入和后面将介绍的从Logstash接入等,其次Datahub从优化消费体验降低使用难度上扩展了订阅、协同消费等功能,使数据的消费逻辑更清晰简明。
数据模型转换介绍
一个csv文件对应Datahub中Project下的一个Topic,对应Tablestore中实例下的一张表。直观来看支持以行为单位固定列数且固定列属性的数据模型,数据导入Tablestore前行内所有的列都是属性列无差别,数据导入Tablestore后区分主键列和属性列,通过主键对行数据进行查询、更新等操作,所以csv文件中应将能作为主键的列放在行首。注意:csv中每列在Topic创建时均需一一对应定义,列数不一致或数据类型不相符文件将无法识别上传;主键列属性(列名称、列值的类型)在Datahub和Tablestore中也需要一一对应。
导入实践
csv文件准备
每行数据对应Tablestore表中的一行数据,行内列以逗号分隔,若将导入的Tablestore表设置了n个主键则靠前的n列对应主键列,其余对应属性列。
'pk001',1,'aaa','bbb','ccc','ddd','111','222','333'
'pk002',2,'aaa','bbb','ccc','ddd','111','222','333'
'pk003',3,'aaa','bbb','ccc','ddd','111','222','333'
'pk004',4,'aaa','bbb','ccc','ddd','111','222','333'
'pk005',5,'aaa','bbb','ccc','ddd','111','222','333'
'pk006',6,'aaa','bbb','ccc','ddd','111','222','333'
'pk007',7,'aaa','bbb','ccc','ddd','111','222','333'
'pk008',8,'aaa','bbb','ccc','ddd','111','222','333'
'pk009',9,'aaa','bbb','ccc','ddd','111','222','333'
'pk010',10,'aaa','bbb','ccc','ddd','111','222','333'
注意:目前Datahub仅支持列值所有数据类型(String, Bigint, Double,Boolean,Decimal,Timestamp)均以String类型写入Tablestore,“用户选择是否开启保留数据类型“的选项已在开发中,最大程度保障数据类型写入Tablestore的过程不失真。
Tablestore资源准备
创建实例
使用控制台创建Tablestore实例参考文档。
设计主键、建表
将csv文件中九列属性列的前两列设置为主键列类型为string,名称为"pk1、pk2"(最多支持四个主键列),Tablestore支持同一个属性列的值可以有多种数据类型,故无需指定属性列类型,新建表参考文档。
Datahub资源准备
创建Project
创建Topic
在已创建的Project下创建Topic,选择tuple类型,在schema下添加九个列的列名及类型,需要注意topic的前两个列对应Tablestore表中的主键列,需要保持列名和类型相同。目前只支持1M以下文件的上传故分片(shard)选择默认的1个即可(Datahub中单shard支持最高每日8000万Record级别的写入量)。
Datahub数据中转
csv上传Datahub
datahub支持csv文件的一键上传,在topic详情页面选择“数据采集”--“文件上传”,选择目的topic和上传文件的路径完成数据上传。
创建connector导入Tablestore
首先对datahub访问Tablestore进行授权授权链接,然后进入准备好的topic的详情页面选择“+DataConnector”--“同步到Tablestore”填写Tablestore的资源信息完成数据导入。
(Tablestore Endpoint 使用实例的私网地址)
进入表详情页面选择“数据管理”--“查询数据”,可以查看导入的10行数据完整信息
注意:文件数据导入为一次性操作,文件无改变情况重复导入,因为主键相同数据将被覆盖从时间戳可以看到数据已更新;若文件部分更新后再次导入,主键重复的数据依旧会被重写,新的数据正常写入。
计量计费
目前Datahub尚在公测期间,数据导入Datahub不收取费用,使用限制见Datahub产品概述,数据从Datahub导入Tablestore是通过“BatchWriteRow”接口,计费方式与直接写入Tablestore相同。