• 沒有找到結果。

命令语法

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日志中查看命令运行成功或失败。

3.6.2.2 UPDATE CARBON TABLE