大规模集群的加载使用限制

支持ftp/http/hdfs多种协议。

定长加载模式
当使用定长加载模式时,必须指定FIELDS DEFINER的值。
文本加载模式
当使用文本加载模式时,NULL_VALUE的默认值为'N'。
当使用文本加载方式时,行分隔符默认为'n'。
当使用文本加载方式时,如果某列数据可能包含了行分隔符,则需要在SQL中输入'HAVING LINES SEPARATOR'子句,同时需要输入'ENCLOSED BY'指定字段包围符。

使用LOAD DATA INFILE数据加载,数据能否对命名管道(Named Pipe)加载?

8611版本集群加载工具load data infile目前不支持本地文件的加载,数据文件可以放在任意通用的ftp、http、hadoop服务器上。目前数据来源只能是文件方式存放,不支持命名管道,因为linux下命名管道不支持远程,并且不能预先获取文件大小。

使用新建数据库用户加载数据需要的最小权限是什么?

对于随机分布表、复制表、nocopies表的加载需要file权限,加载表的insert权限,gbase.table_distribution的select权限;
对于哈希分布表,除了需要上述权限外,还需要gbase.nodedatamap的select权限。

加载随机分布表、复制表、nocopies表用户权限示例:
gbase> show grants for u1;
+--------------------------------------------------------------------------------------------------+
| Grants for u1@%                                              |
+--------------------------------------------------------------------------------------------------+
| GRANT FILE ON *.* TO 'u1'@'%' IDENTIFIED BY PASSWORD 
'*556BEF296211C2AF58F53DA3EDDD0A3371B6ECD5' |
| GRANT INSERT ON "db1"."t1" TO 'u1'@'%'                          |
| GRANT SELECT ON "gbase"."table_distribution" TO 'u1'@'%'            |
+--------------------------------------------------------------------------------------------------+
3 rows in set (Elapsed: 00:00:00.00)
加载哈希分布表用户权限示例:
gbase> show grants for u1;
+--------------------------------------------------------------------------------------------------+
| Grants for u1@%                                              |
+--------------------------------------------------------------------------------------------------+
| GRANT FILE ON *.* TO 'u1'@'%' IDENTIFIED BY PASSWORD 
'*556BEF296211C2AF58F53DA3EDDD0A3371B6ECD5' |
| GRANT INSERT ON "db1"."t2" TO 'u1'@'%'                          |
| GRANT SELECT ON "gbase"."table_distribution" TO 'u1'@'%'            |
| GRANT SELECT ON "gbase"."nodedatamap" TO 'u1'@'%'               |
+--------------------------------------------------------------------------------------------------+
4 rows in set (Elapsed: 00:00:00.00)

集群通过jdbc获取加载skip行数的解决办法

参考以下代码

public void testLoadData2 throws SQLException{
         String insSql="";
         String loadSql="";
         Connection conn= this.conn;
         StatementImpl stmt = (StatementImpl) conn.createStatement();
         stmt.execute(loadSql);
         long skippedLines = stmt.getSkippedLines();
         
         PrepareStatement pst = conn.prepareStatement(loadSql);
         pst.execute();
         skippedLines =((com.gbase.jdbc.PrepareStatement) pst).getSkippedLines();

 } 

文本文件宽松加载模式(format 5)适用范围

1、包围符中有行分隔符的数据;
2、包围符中有包围符的数据(配对或不配对);
3、字符型数据超过表定义字段宽度;
4、对于数值型字段和日期型字段,实际数据类型与对应的字段类型不同;
5、数据源文件列数多于表的列数;
6、数据源文件列数少于表的列数。