1. 8a加载支持avro文件8种基本数据类型:null、boolean、int、long、float、double、bytes(对应8a的blob)、string(对应8a的varchar);不支持6种复杂数据类型:records、enums、arrays、maps、fixed、unions。
2. avro文件标识和识别:data_format 7或者avro
3. file_list对文件名和文件后缀没有要求,支持使用通配符方式批量加载。通配符匹配的文件只要有一个文件错误,则加载任务终止,程序报错退出;通配符未匹配到任何文件,加载失败,程序也报错退出。
4. 对avro有效,加载可正常使用的参数:file_list、data_format、null_value、preserve blanks、autofill、table_fields、max_bad_records、datetime format、date format、timestamp format、time format、trace、trace_path、parallel、max_data_processors、skip_bad_file、set、file_format
5. 对avro无效,加载使用会报警的参数:having lines separator、fields terminated by、enclosed by、length、lines terminated by、ignore num lines
6. avro不支持的功能参数,加载使用会忽略该参数:文件分块nosplit、min_chunk_size。
7. avro文件加载支持的数据源:本地、ftp、sftp、http、hdfs、kafka、S3
8. avro文件由两部分组成,头文件Header和数据块DataBlock,其中头文件中包含文件的MetaData信息(通常是json格式)。Kafka数据源支持加载不包含MetaData信息的avro文件,对于不包含MetaData信息的avro文件,Kafka数据源的加载语句中支持单独指定metadata信息。语法如下:
LOAD DATA INFILE 'kafka://...' INTO TABLE ...DATA_FORMAT avro [options] (with_metadata=true|false, [codec='null|deflate',] schema_location='...'|schema_content='...');
参数说明:
with_metadata:用于指定avro文件中是否包含metadata信息,取值为true、false。指定为true表示数据中包含metadata信息,不需要再单独指定元数据信息;指定为false表示数据中不包含metadata信息,需要单独指定元数据信息。相应的,如果需要单独指定元数据信息,必须指定参数with_metadata,元数据信息可以通过schema_location或者schema_content单独指定。
codec:用于指定avro数据的内部压缩格式,可指定为null或deflate。指定为null表示数据内部无压缩;指定为deflate表示数据内部以deflate格式压缩。
schema_location:avro文件对应的schema信息保存在单独的文件,通过该参数指定schema文件的位置。
schema_content:用于直接指定avro数据对应的schema。schema_content的优先级高于schema_location,若两者同时指定,采用schema_content中指定的内容。
示例1:
load data infile 'kafka://192.168.7.24:9092/avrodata?duration=3000#frombeginning' into table avro.lineitem data_format avro (with_metadata=false,codec='null',schema_location='http://192.168.6.6/data_avro/lineitem.tbl.avsc');
示例2:
load data infile 'kafka://192.168.7.24:9092/avrodata?duration=3000#frombeginning' into table avro.lineitem data_format avro (
with_metadata=false,codec='null',schema_content='{
"type":"record","name":"lineitem","fields":[
{"name":"l_orderkey","type":"long"},{"name":"l_partkey","type":"long"},{"name":"l_suppkey","type":"long"},{"name":"l_linenumber","type":"long"},{"name":"l_quantity","type":"double"},{"name":"l_extendedprice","type":"double"},{"name":"l_discount","type":"double"},{"name":"l_tax","type":"double"},{"name":"l_returnflag","type":"string"},{"name":"l_linestatus","type":"string"},{"name":"l_shipdate","type":"string"},{"name":"l_commitdate","type":"string"},{"name":"l_receiptdate","type":"string"},{"name":"l_shipinstruct","type":"string"},{"name":"l_shipmode","type":"string"},{"name":"l_comment","type":"string"}
]
}'
);
注:
数据文件中不包含Metadata信息,且加载语句中未指定schema_content或schema_location,则加载失败,程序报错退出;数据文件中不包含Metadata信息,加载语句中同时指定schema_content或schema_location,则优先使用schema_content指定的内容,报warnings;数据文件中包含Metadata信息,且加载语句中指定with_metadata为true,同时也指定了schema_content或schema_location,加载使用数据文件中metadata正常加载,忽略schema_content或schema_location,报warnings。
9. gbase_avro_block_limit
说明:限制avro加载时avro文件中block大小,如果avro文件中的block大小超过该参数的限制,则加载失败,程序报错退出。默认值为4M,取值范围是[4194304,UINT_MAX)。最好根据avro数据block真实大小去设定gbase_avro_block_limit参数的值,参数设置大后会很占用内存。