HIVE建表读取CSV文件数据

HIVE建表读取CSV文件数据

  • 事由
    • 解决办法

事由

读取log日志文件,存储到csv 格式,再load到hive表,发现所有的csv列均存储到hive表的首个字段钟,hive建表语句

 CREATE TABLE test.dbl_20clw_base (
  sbbh STRING, 
  spn STRING, 
  spnname STRING, 
  fmi STRING, 
  fminame STRING, 
  gzsj STRING, 
  exchangecode STRING
)
PARTITIONED BY (
  pdate STRING
)

解决办法

查看成功事例,发现是未指定hive表的行分隔符和列分隔符导致的,hive建表默认的默认列分隔符为\001(SOH),行分隔符为\n,所以以上csv文件行分隔读取成功,列未能成功insert到对应hive字段,建表语句改成如下即可:

drop table test.dbl_20clw_base;
CREATE TABLE test.dbl_20clw_base (
  sbbh STRING, 
  spn STRING, 
  spnname STRING, 
  fmi STRING, 
  fminame STRING, 
  gzsj STRING, 
  exchangecode STRING
)
PARTITIONED BY (
  pdate STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
WITH SERDEPROPERTIES ('serialization.format'=',', 'field.delim'=',')
STORED AS TEXTFILE

–注释
ROW FORMAT DELIMITED 参数设置开始语句
FIELDS TERMINATED BY ‘,’ 设置字段与字段间的分隔符,
WITH SERDEPROPERTIES (‘serialization.format’=’,’, ‘field.delim’=’,’)
其中field.delim是表的两个列字段之间的文件中的字段分隔符.
serialization.format是文件序列化时表中两个列字段之间的文件中的字段分隔符.
序列化是指将"结构化数据"转换成"可存储格式"的过程,逆向转换过程被称为逆序列化

参考:(https://segmentfault.com/a/1190000020010065)

你可能感兴趣的:(hive)