Hive 外部表未从 CSV 源读取整个字符串

Posted

技术标签:

【中文标题】Hive 外部表未从 CSV 源读取整个字符串【英文标题】:Hive external table not reading entirety of string from CSV source 【发布时间】:2015-06-16 20:44:24 【问题描述】:

对于 Hadoop 世界来说相对较新,因此很抱歉,如果这是一个明智的选择,但我在 SO 或其他地方没有找到任何关于此的内容。

简而言之,我在 Hive 中创建了一个外部表,它从 HDFS 中的 CSV 文件文件夹中读取数据。问题在于,虽然第一列具有字符串数据类型,但它并未读取包含连字符的值的整个值。

例如:

Hive 表定义:

CREATE EXTERNAL TABLE BG (
  `Id` string,
  `Someint` int,
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/Path/To/Folder'
TBLPROPERTIES ("skip.header.line.count"="1");

示例数据:

506253-A,10
506254-C,19
506233,8

当我在 Hive 中查询数据或在 HCat 中浏览时,我看到的是这样的:

Id Someint
506253 10
506254 19
506233 8

有什么想法吗?提前致谢!

【问题讨论】:

它对我来说也很好用。我正在 CLI 中查看输出。 【参考方案1】:

您使用的是哪个版本的 Hive?在 Amazon EMR 上,Hive 版本 0.13.1 我运行您的代码并获得以下内容

hive> CREATE EXTERNAL TABLE BG (
    >   `Id` string,
    >   `Someint` int
    > )
    > ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
    > LOCATION '/tmp/example'
    > TBLPROPERTIES ("skip.header.line.count"="1");
OK
Time taken: 0.598 seconds
hive> select * from BG;
OK
506253-A        10
506254-C        19
506233  8
Time taken: 0.714 seconds, Fetched: 3 row(s)

【讨论】:

你说得对,它工作正常。我的文件夹包含一些数据非常相似的 CSV,再看一遍后,我将结果与错误的源文件进行了比较!感谢您的帮助,并确认这只是我自己的愚蠢行为。【参考方案2】:

我已经讨论过从 CSV 文件自动生成 Hive 脚本,它会生成“具有所有字符串数据类型的 CREATE 语句,但您可以根据需要更新 Hive 脚本并更改为适当的类型”,并在下面的 ST 帖子中提供示例,

您可以参考 *** 线程“Hadoop/Hive : Loading data from .csv on a local machine”了解更多详情。

【讨论】:

以上是关于Hive 外部表未从 CSV 源读取整个字符串的主要内容,如果未能解决你的问题,请参考以下文章

Hive 外部表未显示在 Namenode (Cloudera-QuickstartVm) 中

数据未从csv文件正确加载到hive表

MYSQL - 表未从过程更新

表未从对象数组中正确填充

镶木地板上的配置单元外部表未获取数据

特殊字符 $ 未从命令行 python 读取