GBase 8a 开发与技术支持 - 导入导出
type: channel
link: https://8a.gbasedbt.com/index.php/tag/导入导出/
items: longblob加载流程
items: 集群加载支持kerberos认证，对kerberos客户端安装、版本要求及集群参数配置分别是什么？
items: 如何在集群data节点gncli执行load data infile加载
items: 修改加载sftp服务器ssh默认端口后，如何编写加载语句？
items: 集群用户加载需要的最小权限是什么？
items: 大规模集群的加载使用限制
items: 大规模集群加载服务核心功能
items: 使用LOAD DATA INFILE数据加载，数据能否对命名管道（Named Pipe）加载？
items: 使用新建数据库用户加载数据需要的最小权限是什么？
items: 集群通过jdbc获取加载skip行数的解决办法

longblob加载流程
type: item
date: 2020-10-26T09:23:00+08:00
description: longblob类型数据加载时，当数据长度小于32k时，加载方法同其他类型，即：在在发送数据前，将实际数据存入DC，通过select into server 发送到接收端。当大于32k时，解析数据阶段将该条数据生成一个临时文件，将该文件的全路径名存入DC，发送时，先将临时文件通过select into server 发送到接收端，然后再发送DC。接收端接收到数据后，如果是longblob类型，会重新根据接收到的实际数据和原始DC中存储的数据，重新生成新的DC。如果是值则直接写入新的DC，如果是文件则根据DC中存的文件名进行匹配，找到与DC内相对应的临时文件，然后将临时文件改名（命名规则：标识号+DC号+行号），然后写入新DC（此时存储的是新的路径名）。

集群加载支持kerberos认证，对kerberos客户端安装、版本要求及集群参数配置分别是什么？
type: item
date: 2020-10-26T09:22:00+08:00
description: [shrinks title="1、kerberos客户端安装" checked="checked"]以redhat6.2操作系统为例：kerberos客户端只需安装krb5-libs、krb5-devel、krb5-workstation其他操作系统kerberos客户端安装存在差异[/shrinks][shrinks title="2、kerberos版本要求" checked="checked"]集群节点的krb5-libs版本需在1.10或以上版本，集群节点的Kerberos库版本太低时，集群加载不启用kerberos认证功能。[/shrinks][shrinks title="3、集群参数配置" checked="checked"]1)以下三个参数，若在配置文件中添加，需在gcluster与gnode层配置文件都进行配置。gbase_hdfs_auth_mode gbase_hdfs_protocol gbase_hdfs_principal2)以上三个参数，若在session级配置，只需在gcluster层执行即可。 [/shrinks]

如何在集群data节点gncli执行load data infile加载
type: item
date: 2020-10-26T09:22:00+08:00
description: 使用86版本集群data节点gncli执行load data infile加载，需要注释掉gnode配置文件中的gcluster-node。

修改加载sftp服务器ssh默认端口后，如何编写加载语句？
type: item
date: 2020-10-26T09:21:00+08:00
description: 加载sftp服务器修改了ssh默认端口后，sftp加载语句load data infile需要添加端口号。如ssh端口被修改为10022，则对应加载语句示例如下：load data infile 'sftp://gbase:gbase@192.168.10.114:10022//opt/data/test.tbl' into table test.t data_format 3;

集群用户加载需要的最小权限是什么？
type: item
date: 2020-10-26T09:20:00+08:00
description: 8611中新建用户想要执行加载，只需要被授予file权限和加载表的insert权限即可。

大规模集群的加载使用限制
type: item
date: 2020-10-26T09:19:00+08:00
description: 支持ftp/http/hdfs多种协议。[shrinks title="定长加载模式" checked="checked"]当使用定长加载模式时，必须指定FIELDS DEFINER的值。[/shrinks][shrinks title="文本加载模式" checked="checked"]当使用文本加载模式时，NULL_VALUE的默认值为'N'。当使用文本加载方式时，行分隔符默认为'n'。当使用文本加载方式时，如果某列数据可能包含了行分隔符，则需要在SQL中输入'HAVING LINES SEPARATOR'子句，同时需要输入'ENCLOSED BY'指定字段包围符。[/shrinks]

大规模集群加载服务核心功能
type: item
date: 2020-10-26T09:19:00+08:00
description: [shrinks title="核心功能：" checked="checked"]1、支持多加载机2、支持多个数据源对一个表的同时加载3、支持加载表状态的监控4、支持以SQL接口方式进行加载5、支持加载的高可用， 加载接入点gcluster异常后，能够支持加载的failover6、支持加载对错误数据的溯源功能7、支持GBK和UTF8字符编码格式的加载8、支持多种协议的数据获取方式9、支持多种数据格式10、支持加载程序的性能随着节点数的增加而线性提升[/shrinks]

使用LOAD DATA INFILE数据加载，数据能否对命名管道（Named Pipe）加载？
type: item
date: 2020-10-26T09:18:00+08:00
description: 8611版本集群加载工具load data infile目前不支持本地文件的加载，数据文件可以放在任意通用的ftp、http、hadoop服务器上。目前数据来源只能是文件方式存放，不支持命名管道，因为linux下命名管道不支持远程，并且不能预先获取文件大小。

使用新建数据库用户加载数据需要的最小权限是什么？
type: item
date: 2020-10-26T09:17:00+08:00
description: 对于随机分布表、复制表、nocopies表的加载需要file权限，加载表的insert权限，gbase.table_distribution的select权限；对于哈希分布表，除了需要上述权限外，还需要gbase.nodedatamap的select权限。[shrinks title="加载随机分布表、复制表、nocopies表用户权限示例：" checked="checked"]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) [/shrinks][shrinks title="加载哈希分布表用户权限示例：" checked="checked"]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) [/shrinks]

集群通过jdbc获取加载skip行数的解决办法
type: item
date: 2020-10-26T09:16:00+08:00
description: 参考以下代码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(); }