hive创建表

来源:互联网 发布:淘宝拍照用什么手机 编辑:程序博客网 时间:2024/06/10 12:53

hive默认的记录和字段分隔符

分隔符描述\n对于文本文件来说,每一行都是一条记录,换行符可以分割记录^A用于分割字段。^B用户分割Array 和 Struct 中的元素。或Map键值对。^CMap中键和值的分割。

建表时可以不采用这些默认分隔符,指定使用其他分隔符。当有其他程序使用不同的规则写数据时,这是非常必要的。


CREATE TABLE employees(

name STRING,

salary FLOAT,

subordinates ARRAY<STRING>,

deductions MAP<STRING,FLOAT>,

address STRUCT<street:STRING, city:STRING, state:STRING, zip :INT>

)

ROW FORMAT DELIMITED    -------(这是一组关键字,必须要写写在其他设置分隔符(含字段分隔符,map、struct 分隔符前面

[COLLECTION ITEMS TERMINATED BY '\002' ] ---------(这是array 等的分隔符,一般需用修改。)

FIELDS TERMINATED BY '\t';


以上是修改默认字段分隔符,指定为\t的语句,一般也就需要修改这里而已。


下面定义一个按照逗号进行分隔的表。


CREATE TABLE some_table(

first STRING,

second FLOAT,

third DOUBLE

)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ',' ;


Hive 的读时模式

当用户想传统数据库写入数据时候,不管是采用装载外部数据的方式,还是采用将一个查询的输出结构写入的方式,或者是使用UPDATE 语句时,数据库对于存储

都具有完全的控制力。传统数据库是写实模式,即数据在写入数据库时对模式进行检查。


Hive 对底层存储并没有这样的控制。对于Hive要查询的数据,有很多种方式对其进行创建,修改,设置损坏。因此Hive 不会在数据记载时进行验证,而是在查询时进行,也就是读时模式。


如果模式和文件内容不匹配的话,如果每行记录中的字段个数少于对应的欧式中定义的字段个数的话,建辉看到查询结果中有很多的null值。如果某些字段是数值型的,但是hive在读取时发现存在非数值型的字符串值的时候,哪些字段将会返回null。除此之外hive,都激励尝试尽可能将各种错误恢复过来。



创建数据库和表可以指定路径。对于不想使用默认的表路径,那么最好是使用外部表。















原创粉丝点击