1.5 导入数据
分析型数据库支持多种接入数据的方式:
- 通过Kettle等ETL工具将本地文件写入分析型数据库。
- 通过阿里云数据传输从阿里云RDS中实时同步数据变更。(见《用户指南》相关使用阿里云数据传输实时同步RDS的数据章节—仅公共云可用)
- 建立批量导入表从阿里云MaxCompute(原名ODPS)大批量的导入数据。
- 通过阿里云数据集成(专有云中通过大数据开发套件的‘数据同步’)任务导入数据。(详见《用户指南》数据的导入章节)
- 直接将数据通过insert/delete SQL写入实时表。(详见《用户指南》insert章节)
批量导入
批量导入适合每天1-2次且每次同步大量批数据(每次200w条以上)。
特点:小规模数据量的同步速度相对很慢;大批量的数据同步速度相对较快,但是整体任务延迟长。
实时写入
实时写入适合数据写入后比较短时间内(例如1-2分钟)就需要查询的场景。
特点:每次写入的数据相对少(一条到几十条),每秒钟写入一般在千条到万条的数据量。(如果需要非常高的写入速度,例如达到百万条每秒,需要相对大量的ECU资源和优化的写入方法)。
在这里,作为测试使用,我们将介绍如何通过控制台界面进行数据批量导入和实时写入。
通过控制台批量导入数据
我们设定这里通过控制台界面进行MaxCompute(原ODPS)数据导入,AnalyticDB目标表即为前面创建的qsdemo_load_data 表。
前提条件
AnalyticDB目标表qsdemo_load_data创建时更新方式属性为“批量更新”;
操作步骤
步骤1:数据准备。
此处我们需要把MaxCompute的表导入到分析型数据库,因此需要先在MaxCompute中准备好表和数据。
MaxCompute表建表语句:<PRE prettyprinted? linenums>
- use projecta;--在MaxCompute的某个project中创建表
- CREATE TABLE
- demo_load_data (
- user_id bigint ,
- amt bigint ,
- num bigint ,
- cat_id bigint ,
- thedate bigint
- ) ;
本地创建demo_load_data.txt文件,输入数据如下,列分割符为英文逗号,回车换行。<PRE prettyprinted? linenums>
- 12345,80,900,1555,20140101
- 12346,81,901,1556,20140101
- 12347,82,902,1557,20140101
- 12348,83,903,1558,20140101
- 12349,84,904,1559,20140101
- 12350,85,905,1560,20140101
- 12351,86,906,1561,20140101
- 12352,87,907,1562,20140101
- 12353,88,908,1563,20140101
- 12354,89,909,1564,20140101
- 12355,90,910,1565,20140101
- 12356,91,911,1566,20140101
- 12357,92,912,1567,20140101
- 12358,93,913,1568,20140101
- 12359,94,914,1569,20140101
- 12360,95,915,1570,20140101
- 12361,96,916,1571,20140101
- 12362,97,917,1572,20140101
- 12363,98,918,1573,20140101
- 12364,99,919,1574,20140101
MaxCompute数据上传,若用tunnel上传命令如下:<PRE prettyprinted? linenums>
- use projecta;
- tunnel upload demo_load_data.txt demo_load_data;--把本地数据文件demo_load_data.txt
步骤2:在操作导入数据之前,需要对数据的来源表进行授权。
此处数据的来源表在MaxCompute上,所以需要在MaxCompute上对云账号授予describe和select权限。
各个专有云授权的云账号名参照专有云的相关配置文档,一般为
test1000000009@aliyun.com
公共云上需要给
garuda_build@aliyun.com以及
garuda_data@aliyun.com账号授权。
授权命令:<PRE prettyprinted? linenums>
- USE projecta;--表所属ODPS project
- ADD USER ALIYUN$xxxx@aliyun.com;--输入正确的云账号
- GRANT Describe,Select ON TABLE table_name TO USER ALIYUN$xxxx@aliyun.com;--输入需要赋权的表和正确的云账号
步骤3:进入DMS for AnalyticDB页面,选择菜单栏上的导入按钮,弹出导入对话框。这里我们的数据源表在阿里云MaxCompute(原ODPS)上。因此数据导入路径按照”odps://project_name/table_name/partition_spec”的格式来填写。目标表选前面创建的表qsdemo_load_data。填写完毕后,如下图所示,点击“确定”按钮。
关于分区信息,在仅有一级Hash分区的情况下DMS会自动识别并填写。
步骤4:接下来页面会显示导入状态一览,分析型数据库会对导入任务进行调度,根据当前系统繁忙情况和待导入数据的大小和结构不同,二十分钟至数个小时内数据导入会结束。
步骤5:数据导入结束后,可以在左侧栏对表进行右键“SQl操作”查看表的数据。
通过控制台实时写入数据
创建表时表属性“更新方式”选择“实时更新”,则可以在建表后直接在SQL窗口中编写SQL语句实时写入数据。
操作步骤
步骤1:创建表my_first_table,参考前面《使用DMS创建表组和表》章节,表属性“更新方式”选择“实时更新”。
步骤2:进入控制台的SQL窗口,输入命令:<PRE prettyprinted? linenums>
- insert into my_first_table (user_id,amt,num,cat_id,thedate) values (12345, 80, 900, 1555, 20140101);
步骤3:执行命令。
步骤4:命令执行成功后,可以在左侧栏对表进行右键“SQl操作”查看表的数据。
注意:
- 实时更新的表刚刚建立后,会有一分钟左右的准备时间,这时候写入的数据需要在准备完成后才能查询,否则查询会报错。
- 在准备完成后,实时进行insert/delete数据变更,一般需要等待一分钟后才可查询。
- 分析型数据库进行实时插入和删除时,不支持事务,并且仅遵循最终一致性的设计,所以分析型数据库并不能作为OLTP系统使用。
其他的数据导入方式请看《用户指南》相关数据导入章节。