GBase 8a avro加载中字符串default值使用限制

文本文件加载,对于字符串类型,若该列未设置NULL值,则空值在8a集群入库时会按空字符串入库;若该列设置了NULL值,则空值在8a集群入库

时会按NULL入库,即字符串类型列的default列不会被用到。

举例如下:创建含有default的表,并加载含有空值的普通文本文件,空数据均以default值代替,可见字符串类型的default值可正常入库。
--对应文本文件内容如下:
1| |3.14
 |bb|3.15
3|cc|

gbase> create table t_default_1(a int default '1111',b varchar(10) default 'aaa',c decimal default '100');
Query OK, 0 rows affected (Elapsed: 00:00:01.32)
 
gbase> load data infile 'sftp://test:test@10.10.1.1/data/defalut.tbl' into table t_default_1 fields terminated by '|';
Query OK, 3 rows affected (Elapsed: 00:00:01.27)
Task 1032 finished, Loaded 3 records, Skipped 0 records
 
gbase> select * from t_default_1;
+------+------+------+
| a    | b    | c    |
+------+------+------+
|    1 | aaa  |    3 |
|    3 | cc   |  100 |
| 1111 | bb   |    3 |
+------+------+------+
3 rows in set (Elapsed: 00:00:00.04)
 
gbase> truncate t_default_1;
Query OK, 3 rows affected (Elapsed: 00:00:09.59)
 
 
在9.5.3.29.2版本发现,加载含有空数据的avro文件(未设置NUll值属性),数值类型的空数据以default值代替,字符串类型的空数据以空字符

串入库。
gbase> load data infile 'sftp://test:test@10.10.1.1/data/defalut.avro' into table t_default_1 data_format avro;
Query OK, 3 rows affected (Elapsed: 00:00:01.29)
Task 1034 finished, Loaded 3 records, Skipped 0 records
 
gbase> select * from t_default_1;
+------+------+------+
| a    | b    | c    |
+------+------+------+
| 1111 | bb   |    3 |
|    3 | cc   |  100 |
|    1 |      |    3 |
+------+------+------+
3 rows in set (Elapsed: 00:00:00.02)
 

另建立一行数据前3列为null值,第4列有数值1的avro文件,发现修改后数值类型和字符串类型均按NULL入库。
gbase> create table t_default_2(a int default '1111',b varchar(10) default 'aaa',c decimal default '100',d int default '5');
Query OK, 0 rows affected (Elapsed: 00:00:00.78)
 
gbase> desc t_default_2;
+-------+---------------+------+-----+---------+-------+
| Field | Type          | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| a     | int(11)       | YES  |     | 1111    |       |
| b     | varchar(10)   | YES  |     | aaa     |       |
| c     | decimal(10,0) | YES  |     | 100     |       |
| d     | int(11)       | YES  |     | 5       |       |
+-------+---------------+------+-----+---------+-------+
4 rows in set (Elapsed: 00:00:00.01)
 
gbase> load data infile 'sftp://test:test@10.10.1.1/data/avro_null_bug.avro' into table t_default_2 data_format avro;
Query OK, 1 row affected (Elapsed: 00:00:00.74)
Task 1044 finished, Loaded 1 records, Skipped 0 records
 
gbase> select * from t_default_2;
+------+------+------+------+
| a    | b    | c    | d    |
+------+------+------+------+
| NULL | NULL | NULL |    1 |
+------+------+------+------+
1 row in set (Elapsed: 00:00:00.03)


为此提问并获得反馈:avro文件加载时,由于avro本身有null类型,所以avro中的数据可以区分是空值还是空字符串,不受null_value参数限制


由此可见,对于该版本的avro文件加载,字符串类型的default值无法被使用到,其指定为空值时按空字符串入库;指定为NULL时按NULL入库,没

有default值入库的可能。


此类情况的绕行建议:
该版本的字符串类型,在建表时设置的default值在加载时无法被用到,绕开用default值默认入库字符串列的使用方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值