【问题标题】:How can I make a Hive table from a .csv file which has one column with fields delimiited by semicolon ;如何从一个 .csv 文件中创建一个 Hive 表,该文件有一列的字段由分号分隔;
【发布时间】:2014-12-23 08:37:32
【问题描述】:

我有一个 .csv 文件,格式为具有一个(第一)列/单元格,其中我的配置单元表中的五个字段由分号分隔;像这样:

ISBN;"Title";"Author";"Year";"Publisher"
0002005018;"Clara Callan";"Richard Bruce Wright";"2001";"HarperFlamingo Canada"
0399135782;"The Kitchen God's Wife";"Amy Tan";"1991";"Putnam Pub Group"

etc. 
etc.
...

我可以使用 Hive 查询来拆分数据吗?并将其存储在我创建的具有相同列名顺序的表中?

喜欢 regexp_extract?还是我需要使用serde?​​p>

我是 Hadoop/hive/beeswax 的新手,正在使用 Cloudera-quickstart vm 5.2

【问题讨论】:

  • 最好用SerDe,可以找例子here

标签: mysql csv hadoop hive beeswax


【解决方案1】:

听起来你想做这样的事情:

CREATE TABLE books (ISBN STRING, Title STRING, Author STRING, Year STRING, Publisher STRING)
  ROW FORMAT DELIMITED FIELDS TERMINATED BY "\;";
LOAD DATA INPATH '/path/to/your/datafile' INTO TABLE books;

【讨论】:

  • 非常感谢,但您能解释一下为什么 YEAR 字段在此查询中不能为 INT 吗?当它为 INT 时,它显示为 NULL。
  • 我相信这是您数据中的年份被引号包围的事实。删除引号应该允许将数据直接加载到 INT 列中。
  • 谢谢,我的数据有时也会被误读,因为它在 & (我认为与符号代码)在表的某些行中。我怎样才能阻止这种情况发生?基本上有些标题有 &并且该行之后的所有列都变得不正确。
  • 其他人可能有不同的看法,但我的观点是,由于您可能使用 Hive/HDFS 作为数据仓库,因此您应该在加载之前至少对数据进行粗略的清理它(在加载到 HDFS 和 Hive 之前清除 & 符号)。或者,将每一行作为单个列吸入 Hive 中的临时表中,并将其后处理为所需的格式。
猜你喜欢
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
  • 1970-01-01
相关资源
最近更新 更多