【问题标题】:hive "\n" value in records记录中的配置单元“\n”值
【发布时间】:2016-11-08 15:54:13
【问题描述】:

我正在使用 hive 处理一个 120 GB 的大文件。数据首先作为 csv 文件(制表符分隔)从 sql server 表加载到 aws s3,然后在此文件之上创建 hive 外部表。从 hive 外部表查询数据时遇到问题。我注意到 csv 在许多列字段中包含 \n(在 sql server 中实际上是“null”)。现在,当我创建配置单元表时,任何记录中出现的 \n 都会将配置单元带到新记录并为该记录中的其余列生成 NULL。我尝试了以“001”结尾的行,但没有成功。我收到错误提示 hive 仅支持“由 \n 终止的行”。我的问题是,如果 hive 仅支持 \n 作为行分隔符,您将如何处理包含 \n 值的列? 有什么建议吗?

这就是我创建外部表的方式:

DROP TABLE IF EXISTS IMPT_OMNITURE__Browser;

CREATE EXTERNAL TABLE IMPT_OMNITURE__Browser ( 
     ID int, Region string, Description string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LOCATION 's3://abm-dw/data-import/omniture/Browser/';

【问题讨论】:

  • 如何创建外部表?您应该始终将相关代码与您的问题一起发布,否则我们无法真正帮助您。
  • 我添加了创建外部表的查询。谢谢
  • 可能重复 - 请参阅 this answer

标签: sql-server amazon-web-services hadoop amazon-s3 hive


【解决方案1】:

您可以使用以下命令更改表或在 TBL 属性的创建语句中添加属性;

ALTER TABLE table set SERDEPROPERTIES ('serialization.null.format' = "");

这会使文件中的数据为 NULL。

【讨论】:

  • 我尝试了下面的 serde 属性,但没有帮助,行为是一样的
  • 行格式 serde 'com.bizo.hive.serde.csv.CSVSerde' 与 serdeproperties ("separatorChar" = "\t", "serialization.null.format" = " ")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多