命令语法
3.6.2.1 LOAD DATA 命令功能命令功能
LOAD DATA命令以CarbonData特定的数据存储类型加载原始的用户数据,这样,
CarbonData可以在查询数据时提供良好的性能。
说明
仅支持加载位于HDFS上的原始数据。
命令格式
LOAD DATA INPATH 'folder_path' INTO TABLE [db_name.]table_name OPTIONS(property_name=property_value, ...);
参数描述
表3-35 LOAD DATA 参数描述
参数 描述
folder_path 原始CSV数据文件夹或者文件的路径。
db_name Database名称。若未指定,则使用当前database。
table_name 所提供的database中的表的名称。
注意事项
以下是可以在加载数据时使用的配置选项:
● DELIMITER:可以在加载命令中提供分隔符和引号字符。默认值为,。
OPTIONS('DELIMITER'=',' , 'QUOTECHAR'='"')
可使用'DELIMITER'='\t'来表示用制表符tab对CSV数据进行分隔。
OPTIONS('DELIMITER'='\t')
CarbonData也支持\001和\017作为分隔符。
说明
对于CSV数据,分隔符为单引号(')时,单引号必须在双引号(" ")内。例如:
'DELIMITER'= "'"。
● QUOTECHAR:可以在加载命令中提供分隔符和引号字符。默认值为"。
OPTIONS('DELIMITER'=',' , 'QUOTECHAR'='"')
● COMMENTCHAR:可以在加载命令中提供注释字符。在加载操作期间,如果在行 的开头遇到注释字符,那么该行将被视为注释,并且不会被加载。默认值为#。
OPTIONS('COMMENTCHAR'='#')
● FILEHEADER:如果源文件中没有表头,可在LOAD DATA命令中提供表头。
OPTIONS('FILEHEADER'='column1,column2')
● ESCAPECHAR:如果用户想在CSV上对Escape字符进行严格验证,可以提供 Escape字符。默认值为\。
OPTIONS('ESCAPECHAR'='\') 说明
如果在CSV数据中输入ESCAPECHAR,该ESCAPECHAR必须在双引号(" ")内。例如:"a
\b"。
● Bad Records处理:
为了使数据处理应用程序为用户增值,不可避免地需要对数据进行某种程度的集 成。在大多数情况下,数据质量问题源于生成源数据的上游(主要)系统。
有两种完全不同的方式处理Bad Data:
– 按照数据原本的样子加载所有数据,之后进行除错处理。
– 在进入数据源的过程中,可以清理或擦除Bad Data,或者在发现Bad Data时 让数据加载失败。
有多个选项可用于在CarbonData数据加载过程中清除源数据。对于CarbonData 数据中的Bad Records管理,请参见表3-36。
表3-36 Bad Records Logger
配置项 默认值 描述
BAD_RECORDS_LOGGE
R_ENABLE false 若设置为true,则将创建Bad Records日志文件,其中包含Bad Records的详细信息。
BAD_RECORDS_ACTIO
N FAIL 以下为Bad Records的四种操作类
型:
● FORCE:通过将Bad Records存储 为NULL来自动校正数据。
● REDIRECT:无法加载Bad Records,并将其写入原始CSV文 件。
● IGNORE:既不加载Bad Records 也不将其写入原始CSV文件。
● FAIL:如果发现存在Bad Records,数据加载将会失败。
说明
在加载数据时,如果所有记录都是 Bad Records,则参数
BAD_RECORDS_ACTION将不起作 用,加载数据操作将会失败。
IS_EMPTY_DATA_BAD_
RECORD false 如果设置为“false”,则空(""或 ''或,,)数据将不被视为Bad
Records,如果设置为“true”,则 空数据将被视为Bad Records。
配置项 默认值 描述
BAD_RECORD_PATH - 指定存储Bad Records的HDFS路径。
默认值为Null。 如果启用了Bad Records日志记录或者Bad Records操 作重定向,则该路径必须由用户进行 配置。
示例:
LOAD DATA INPATH 'filepath.csv' INTO TABLE tablename OPTIONS('BAD_RECORDS_LOGGER_ENABLE'='true',
'BAD_RECORD_PATH'='hdfs://hacluster/tmp/carbon', 'BAD_RECORDS_ACTION'='REDIRECT',
'IS_EMPTY_DATA_BAD_RECORD'='false');
说明
使用“REDIRECT”选项,CarbonData会将所有的Bad Records添加到单独的CSV文件中,
但是该文件内容不能用于后续的数据加载,因为其内容可能无法与源记录完全匹配。用户 必须清理原始源记录以便于进一步的数据提取。该选项的目的只是让用户知道哪些记录被 视为Bad Records。
● MAXCOLUMNS:该可选参数指定了在一行中,由CSV解析器解析的最大列数。
OPTIONS('MAXCOLUMNS'='400')
表3-37 MAXCOLUMNS
可选参数名称 默认值 最大值
MAXCOLUMNS 2000 20000
表3-38 MAXCOLUMNS 可选参数的行为图
MAXCOLUMNS值 在文件Header选项中的 列数
考虑的最终值
在加载项中未指定 5 2000
在加载项中未指定 6000 6000
40 7 文件header列数与
MAXCOLUMNS值,两 者中的最大值
22000 40 20000
60 在加载项中未指定 CSV文件第一行的列数与
MAXCOLUMNS值,两 者中的最大值
说明
对于设置MAXCOLUMNS Option的最大值,要求executor具有足够的内存,否则,数据加 载会由于内存不足的错误而失败。
● 如果在创建表期间将SORT_SCOPE定义为GLOBAL_SORT,则可以指定在对数据进 行排序时要使用的分区数。如果未配置或配置小于1,则将使用map任务的数量作 为reduce任务的数量。 建议每个reduce任务处理512MB - 1GB数据。
OPTIONS('GLOBAL_SORT_PARTITIONS'='2') 说明
增加分区数可能需要增加“spark.driver.maxResultSize”,因为在driver中收集的采样数据 随着分区的增加而增加。
● DATEFORMAT:此选项用于指定表的日期格式。
OPTIONS('DATEFORMAT'='dateFormat') 说明
日期格式由日期模式字符串指定。 Carbon中的日期模式字母与JAVA中的日期模式字母相 同。
● TIMESTAMPFORMAT:此选项用于指定表的时间戳格式。
● OPTIONS('TIMESTAMPFORMAT'='timestampFormat')
● SKIP_EMPTY_LINE:数据加载期间,此选项将忽略CSV文件中的空行。
OPTIONS('SKIP_EMPTY_LINE'='TRUE/FALSE')
● 可选: SCALE_FACTOR:针对RANGE_COLUMN,SCALE_FACTOR用来控制分区的 数量,根据如下公式:
splitSize = max(blocklet_size, (block_size - blocklet_size)) * scale_factor numPartitions = total size of input data / splitSize
默认值为3,range的范围为[1, 300]。
OPTIONS('SCALE_FACTOR'='10') 说明
● 如果GLOBAL_SORT_PARTITIONS和SCALE_FACTOR同时使用,只有 GLOBAL_SORT_PARTITIONS生效。
● RANGE_COLUMN合并默认使用LOCAL_SORT。
使用场景
可使用下列语句从CSV文件加载CarbonData table。
LOAD DATA INPATH 'folder path' INTO TABLE tablename OPTIONS(property_name=property_value, ...);
示例
LOAD DATA inpath 'hdfs://hacluster/src/test/resources/data.csv' INTO table carbontable
options('DELIMITER'=',', 'QUOTECHAR'='"', 'COMMENTCHAR'='#',
'ESCAPECHAR'='\',
'FILEHEADER'='empno,empname,designation,doj, workgroupcategory,workgroupcategoryname, deptno,deptname,projectcode,projectjoindate, projectenddate,attendance,utilization,salary', 'DATEFORMAT' = 'yyyy-MM-dd'
);
系统响应
可在driver日志中查看命令运行成功或失败。