SparkSql create table导入本地excel

小白首次尝试导入本地excel表格到数据库并创建table,因为刚接触sparksql不久所以犯了很多小错误,特此记录。

数据源处理

首先是excel表格的处理,因为涉及公司机密和隐私就不放具体数据了,6条columns,一开始因为手贱把空白表格拖动了几下,导致后来把空白列也当做null数据算进去了。
在这里插入图片描述
因为要把它变成可以处理的类型,所以要保存为txt文件。分隔符选择",",可能是因为excel版本的缘故不能直接到处逗号分割的文本(只能tab符),选择先save as CSV格式,然后再修改后缀就好了。
这里犯了一个错,就是txt里第一行会是列名,但是我们不需要,只需要各列的值,可以手动删除。

这是其中一行。

上传到数据库

我们公司用的是自主开发的数据库平台,总之就是把txt文件upload上Repository目录下,之后sql能访问就行。

sql代码

CREATE EXTERNAL TABLE default.eip_rewards_usage (Asset varchar(50),Platform varchar(50),UserOrBatch varchar(50),NT_Login varchar(50),y_Date DECIMAL(18,0),Sum_ACCESS_CNT DECIMAL(18,0))
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION '/user/taiwang/eip_rewards_usage_test/';

一共六列,前四列是string类型,由于博主太zz相关文档说明没找到,反反复复试了好几次String、StringType之类的关键词,终于确定用可变长度的 varchar来定义column name。
(修订:之前直接用char加长度的描述来定义column name这样是错误的,在之后查询的时候不得不补全空白字符数,显得很蠢。)

然后Location不用精确到我们上传的txt,只用到该文件在的目录就行,目录下的文件全部会被扫描一遍。

然后refresh一遍就成功了。

refresh table eip_rewards_usage;
select * from eip_rewards_usage;

在这里插入图片描述
如果创建失败或者要修改的,就把原来的表格下线重新create一遍,或者直接换个名字就行。

drop table default.eip_rewards_usage

最后:因为真的是小白实习生,随便写一行sql跑通了都能高兴半天,特记此文,以资自励。

发布了5 篇原创文章 · 获赞 2 · 访问量 173

猜你喜欢

转载自blog.csdn.net/DUTwangtaiyu/article/details/103601288