今天咱们来聊一聊GBase8a的数据导入导出。
GBase8a是数据仓库产品,其本身并不产生数据,它的数据来源于前端的各业务系统,GBase8a需要将这些业务数据汇聚入库后才能进行下一步的数据分析和挖掘,这就需要用到数据导入功能(也可以叫“数据加载”),数据加载是将用户从其他数据源获得的原始数据文件,按照某种加载规则分发至集群的数据节点,集群各数据节点接收数据并入库保存到本地磁盘的过程。可以说,数据仓库一半的工作都是在进行数据加载,而数据加载的性能直接关乎到数据仓库的运行效率。
GBase8a的数据加载分两个阶段,第一阶段,由gcluster接收客户端发起的数据加载请求,进行SQL解析后,协调集群的各gnode进程,将数据源区域的数据文件按一定的大小分段,并行得复制到各gnode节点,第二阶段,各gnode节点对切段的数据进行Hash散列计算,将散列计算后数据互相分发到集群的各gnode节点,各节点调用本地的加载进程接收数据并执行入库保存到本地磁盘。具体过程如下图所示:
基于上述的工作模式,GBase8a的数据加载的过程类似于linux的scp,其速度可以近似达到数据源网络带宽的极限,在一个万兆互联的网络中,GBase8a的每小时可以加载超过3TB数据。数据导出的过程是数据导入(数据加载)过程的逆向过程,这里就不再赘述。
GBase8a的数据加载特性:
- 支持单表多数据源并行加载,支持多加载机对单表的并行加载,最大化提升加载性能;
- 支持从通用数据服务器拉取数据,支持ftp/http/hdfs/Kafka/sftp/https 等多种文件传输协议;
- 支持普通文本、gzip 压缩、snappy 压缩、lzo 压缩等多种格式数据文件;
- 支持普通文本、定长文本、宽松模式的加载;
- 支持错误数据溯源功能,可以准确定位错误数据在源文件中的位置;
- 加载性能可以随着集群规模的扩展而持续提升。
具体的命令示例如下:
1、导入数据
load data infile 'file://IP/路径/文件名(可以用*)' into table <table_name> fields terminated by '\t';
load data infile 'ftp://<用户名>:<密码>@IP/路径/文件名(可以用*)' into table <table_name> fields terminated by '\t';
load data infile 'sftp://<用户名>:<密码>@IP/路径/文件名(可以用*)' into table <table_name> fields terminated by '\t';
load data infile 'http://IP/路径/文件名(可以用*)' into table <table_name> fields terminated by '\t';
2、导出数据
rmt:select * from <table_name> into outfile '<路径/file_name>';
GBase8a还有哪些技术特性呢?且听我下回分解。。。