建设企业门户网站苏州网站建设公司
文章目录
- LibrA(MPP)批量数据导入
 - COPY导入
 - GDS导入
 - HDFS导入
 
LibrA(MPP)批量数据导入
COPY导入
- 多数数据库拥有该命令
 - 适用: 低并发,本地小数据量导入
 - 示例A - 从文件中copy
--从/home/jerry/data01.txt文件拷贝数据到表tb_test COPY tb_test FROM '/home/jerry/data01.txt' WITH(format 'text', -- 导入格式为TEXTdelimiter ',', -- 分隔符为','ignore_extra_data 'true', -- 忽略多余列noescaping 'true' -- 不指定转义 ); - 示例B - 从标准输入中copy 
- 利用gaussdb200对应的jdbc的jar包,使用CopyManager导入数据
 - 代码如下
// 将数据转换为InputStream ArrayList<String> list = new ArrayList<>(); list.add("xiaowang,18,beijing"); list.add("xiaohong,22,shanghai"); list.add("lilei,25,guangdong"); String data = String.join("\n", list); ByteArrayInputStream in = new ByteArrayInputStream(data.getBytes("UTF-8")); // 拷贝 CopyManager copyManager = new CopyManager((BaseConnection)connection); copyManager.copyIn("COPY " + tableName + " FROM STDIN", in); COPY tb_test FROM STDIN WITH(delimiter ',', encoding 'UTF-8')WITH后面可以传入分隔符、指定字符集- 推荐:字段分隔符为
$^&,换行符为$^#,则执行语句为COPY tb_name FROM STDIN WITH(FORMAT 'text', DELIMITER '$^&', EOL '$^#') 
 
GDS导入
- 架构图:

 - 利用多个DataNode并行将数据导入到LibrA数据库中
 - 适用: 高并发、大数据量导入
 - 操作示例: 
- 数据导入流程图

 
- 蓝色路径:建立外表指向服务器的GDS进程,GDS进程指向数据源路径
 - 橙色路径:执行SQL,从外表插入数据到实际表。外表向GDS进程取数据,GDS从数据路径获取
 
- GDS工具安装 
- GDS工具由华为提供 Gauss200-OLAP-V100R006C10-REDHAT-64bit-gauss-loader.tar.gz
 - 在Linux服务器上解压后,进入gauss_loaders目录
 - 执行install_gaussload.sh 命令,即可安装
 - gds命令在…/gauss_loaders/bin/gds/gds
 
 - GDS工具运行 
- 示例: …/gauss_loaders/bin/gds/gds -d /data/test -p 192.168.0.10:5000 -H 192.168.0.115/24 -l /home/jerry/log/gds_log.txt -D -t 2
 - 命令解释:
-d 指定数据路径文件夹; -p 指定GDS进程IP和端口;-H 指定MPP数据库其中一台主节点服务器IP; -l 指定日志输出文件 
 - 在MPP库中建立外表 
- 建外表示例:
 
CREATE FOREIGN TABLE foreign_test (-- 外表字段结构应和实际表一样,但不能加字段约束等类似的标记name VARCHAR(20),phone VARCHAR(20),address VARCHAR(30) ) SERVER gsmpp_server OPTIONS (location 'gsfs://192.168.0.10:5000/*', -- location参数 指定了GDS所在的服务器format 'CSV',mode 'normal', encoding 'utf8', delimiter ',', -- delimiter参数 指定了数据源每个字段之间的分割符quote E'\x1b', null '',fill_missing_fields 'false' ) LOG INTO err_test PER NODE REJECT -- LOG INTO err_test 指定了错误日志的输出到err_test表(会自动创建) LIMIT 'unlimited'; - 数据源样例
路径: /data/test/p-0001 内容: 小明,18912345678,北京 小王,15112345678,重庆 小红,13912345678,上海 - 执行SQL,导入数据至LibrA(MPP) 
- 确保数据源已经准备好
 - 确保GDS进程已经配置正确,且已开启
 - 确保MPP库中外表建立无误
 - 使用SQL查询外表数据,插入到实际表中
 - 插入SQL示例:
 
INSERT INTO tb_test SELECT * FROM foreign_test; 
 - 数据导入流程图
 
HDFS导入
-  
将HDFS上的大量数据快速导入到LibrA(MPP)
 -  
适用: 大批量导入;HDFS上数据量过大,无法导出到本地使用GDS导入。
 -  
操作示例:
- 在FusionInsightManager管理界面给LibrA(MPP)添加跨集群访问HDFS的配置项
 
参数 描述 remote_connect_hdfs_enable 是否开启远端连接HDFS功能的开关,请修改为true remote_connect_core_config_file HDFS的配置文件core-site.xml remote_connect_hdfs_config_file HDFS的配置文件hdfs-site.xml dfs.namenode.kerberos.principal 安全模式,集群的用户名 remote_connect_krb5_conf_file 安全模式,认证鉴权文件krb5.conf remote_connect_user_keytab_file 安全模式,认证鉴权文件user.keytab - 取得当前库的外部数据服务访问权限 
- 登入LibrA的主节点之一,使用omm用户
 - 加载环境变量,示例 $source /opt/huawei/Bigdata/mppdb/.mppdbgs_profile (不同集群可能不一样)
 - 以管理员身份进入对应的数据库 $gsql db_name -p 25308 -r
 - 创建 hdfs_server,执行 SQL
CREATE SERVER hdfs_server FOREIGN DATA WRAPPER hdfs_fdw OPTIONS (address '10.10.0.100:25000,10.10.0.101:25000', -- HDFS集群的主备节点所在的IP地址以 及端口hdfscfgpath '/opt/hadoop_client/HDFS/hadoop/etc/hadoop' -- HDFS集群配置文件路径(不一定需要指定) ); - 授权,执行SQL
GRANT USAGE ON FOREIGN SERVER hdfs_server TO username; 
 - 创建指向HDFS目录的外表,示例:
 
CREATE FOREIGN TABLE region_test(name TEXT,phone TEXT,address TEXT ) SERVER hdfs_server -- 外部数据服务名称 OPTIONS(FORMART 'orc', -- 数据文件格式,目前只支持orc格式FOLDERNAME '/data/test' -- HDFS数据存储路径 ) DISTRIBUTE BY roundrobin;- 执行SQL,导入数据至LibrA(MPP)
 
INSERT INTO tb_test SELECT * FROM region_test; 
