《PolarDB for PostgreSQL源码与应用实战》——PolarDB for PostgreSQL用SQL做数据分析(2) https://developer.aliyun.com/article/1232910?groupCode=polardbforpg
3、其他预置数据
如前文演示中看到的,dataset目录下面还有其他预先准备好的CSV数据,都可以手工创建表,然后用COPY命令把数据导进来。为了方便使用,PolarDB的插件其实还额外提供了一批以load开头的函数,执行这些函数就能自动创建数据库的表,并把CSV的数据导入到表中。如下图所示:
目前插件里包含了这5份数据,分别是波士顿房价数据、鸢尾花数据、糖尿病数据、手写数字数据,以及苹果公司股价数
据。其中房价数据、糖尿病数据和股价数据可以用来做回归分析,另外两份数据可以用来做分类分析。
(二)处理数据
1、定义缺失值
鸢尾花这150条数据是非常完整并且干净的数据,如前文所说,现实工作中的数据往往会有许多缺失值或者异常值,需要
先对数据做清洗。比方说,如果我们现在插入一条新的鸢尾花的样本,但部分的数据缺失了,希望分析工具在数据缺失的
时候自动填充上默认值(例如0)。PolarDB里面有一个数据库字段默认值的功能,在数据库字段缺失的时候,就会自动
使用默认值来填充。
如上图所示,给字段加默认值有两种方法:第一种是在表还不存在的时候,创建表的时候直接定义字段的默认值,就像
图中左边的代码一样,也用到了CREATE TABLE;第二种是表已经创建好了,想给已经存在的字段添加默认值或者修改默认值,这时候就需要用到另一个命令,ALTER TABLE,代码就像图中右边一样,给刚刚创建的表前4个字段全部加上默认值。
2、使用缺失值
定义好了默认值,接下来就可以通过INSERT命令来插入默认值了。
如上图所示,PolarDB中有两种INSERT方式可以用到默认值:第一种就像左边的代码,在INSERT的时候,不指定有默认值的列;第二种,指定了列,但values里面用default关键字。这两种方式都能用上默认值,但用COPY导入数据的话,能
不能用上默认值呢?我们来测试一下。
再看一下flower表的定义:
其中每个字段的默认值是空(即null)。尝试插入一行脏数据,除了品类,其他的字段都不指定:
可以看到现在插进来的这行数据里面,其他字段的值都是空的。接着用Alter Table去添加数据库字段的默认值:`alter table flowers alter column sepal_length set default 0, alter column sepal_width set default 0, alter column patal_length set default 0, alter column patal_width set default 0`。再次查看flowers表的定义:
现在字段的默认值都已经有了,全部都是0。然后再试试重新insert一条bad2的脏数据:
此时,bad2的其他字段都是0。可以再试试另外一种用default关键词的insert的方式:
可以看到bad2与bad3都使用了默认值0。最后再测试一下COPY命令是否可以用到默认值。首先清空数据:
然后编辑test.csv,手工加入3行脏数据。最后通过COPY命令,把test.csv的数据导进来:
一共导入了153行,但脏数据的字段依然为空:
《PolarDB for PostgreSQL源码与应用实战》——PolarDB for PostgreSQL用SQL做数据分析(4) https://developer.aliyun.com/article/1232907?groupCode=polardbforpg