使用CSV序列号和配置单元创建表将所有字段类型转换为字符串



如果我创建一个表并指定一个CSVSerde,那么所有字段都将转换为字符串类型。

hive> create table foo(a int, b double, c string) row format serde 'com.bizo.hive.serde.csv.CSVSerde' stored as textfile; OK Time taken: 0.22 seconds hive> describe foo; OK a string from deserializer b string from deserializer c string from deserializer Time taken: 0.063 seconds, Fetched: 3 row(s) 那个Serde来自https://github.com/ogrodnek/csv-serde

如果我尝试这个页面上的serde"org.apache.hadop.hive.serde2.OpenCSVSerde"https://cwiki.apache.org/confluence/display/Hive/CSV+Serde我也看到了同样的事情。所有字段都将更改为字符串类型。

配置单元1.2.1版Hadoop 2.7.0版本java版本"1.7.0_80">

是的,com.bizo.hive.serde.csv.CSVSerde只创建字符串。这就是它的建造方式,也是它将永远运作的方式。没有改变它的选择。我认为这很可能对你的大多数变量都有效。话虽如此,我会的。

使用SELECT语句,该语句使用基于regex的列规范,该规范可以在0.13.0之前的配置单元版本中使用,如果配置属性Hive.support.quoted.identifiers设置为none,则可以在0.130及更高版本中使用。这意味着您可以快速构建一个新表,将需要使用的少数变量的类型更改为double或int。

set hive.support.quoted.identifiers=none;
drop table if       exists database.table_name;
create table if not exists database.table_name as
select `(a|b|c)?+.+`
    , cast(a as double) as a
    , cast(b as double) as b
    , cast(c as double) as c
    from database.some_table

您可以使用此方法只触摸需要更改的变量,并最小化查询长度。您可以在表的顶部创建视图,以这种方式进行查询。或者,您可以创建一个外部表并删除旧表;

相关内容

  • 没有找到相关文章

最新更新