Apache Drill中基于CSV的视图列类型显示为ANY,如何获取准确类型?
解决DFS视图列类型显示为ANY的问题
我之前也碰到过类似的情况,结合你的描述,咱们从这几个方面入手来解决:
先确认CSV文件的格式是否正确
你提供的CSV内容看起来所有记录都挤在一行里了,正常的CSV应该是每行一条数据,标准格式应该是这样的:id,name,city 1,shrinivas,pune 2,harshal,morgaon 3,nikhil,chiplun 4,ravinder,chandigarh如果你的CSV是把所有内容放在同一行,哪怕开了
extractHeader=true,系统也没法正确识别每条记录的结构,自然没法推断数据类型。先把CSV调整成每行一条记录的标准格式。显式指定列的数据类型
有时候自动类型推断可能因为各种原因不生效,最稳妥的方式是在创建视图时直接强制转换列类型,比如:create view dfs.root.`names` as select cast(id as INT) as id, name as STRING, city as STRING from dfs.root.`names.csv`这样执行
describe dfs.root.names``时,就能看到各列对应的准确类型了。开启自动Schema推断参数
除了extractHeader=true,你还可以尝试开启inferSchema参数(不同DFS系统可能参数名略有差异,比如有些叫autoInferSchema),让系统自动分析列的数据类型。修改创建视图的语句如下:create view dfs.root.`names` as select id,name,city from dfs.root.`names.csv` options('extractHeader'='true', 'inferSchema'='true')这个参数会让系统扫描部分数据来推断列的类型,比单纯依赖header配置更有效。
验证数据加载是否正常
创建完视图后,先执行select * from dfs.root.nameslimit 2检查数据是否正确加载。如果查询结果是乱的,那说明CSV格式还有问题,得先解决格式问题再处理类型的事。
内容的提问来源于stack exchange,提问作者Shrinivas Deshmukh
相关产品推荐
相关产品推荐

