hive创建table时指定分隔符

由于hive由java编写,所以row format delimited fields terminated by 后也可以使用java的方式输入特殊字符,比如用java的转义字符——反斜杠()+0+八进制数字可以代表任意ASCII码,或者用\u + 四位数字可以代表任意Unicode字符。

比如hive创建表格的默认分隔符为SOH字符,ASCII码中的序号为1,所以可以用’\001’表示。
数据迁移到hive目录下时,由于hive默认的分隔符是/u0001,为了平滑迁移,需要在创建表格时指定数据的分割符号,语法如下:

create table test(uid string,name string)row format delimited fields terminated by ‘/t’;

一个比较简单的方法是直接创建 external table,语法如下:

create table test(uid string,name string) row format delimited fields terminated by ‘/t’ location ‘hdfs’;

通过这种方式,避免数据的移动带来时间损耗,提高运行的效率。

hive指定数据切分格式–row format

创建表时需要指定数据切分格式,会用到ROW FORMAT关键字。

下面是java集合框架图,存入hive的数据就是集合中的某一种

所以在创建标的时候就可以指定分隔符:

  1. 第一个--<字段>,由[ , ]分割----------FIELDS TERMINATED BY ','
  2. 第二个是--,元素与元素之间由[ - ]分割----------COLLECTION ITEMS TERMINATED BY '-'
  3. 第三个是--,每组K-V对内部由[ : ]分割,每组K-V对之间由[ - ]分割----------MAP KEYS TERMINATED BY ':'
  4. 每条数据之间由换行符分割(默认[ \n ]),如果是其它分割方式(比如[ ; ])----------LINES TERMINATED BY ';'

hive建表的时候默认的分隔符是’\001’,若在建表的时候没有指明分隔符,加载文件的时候文件的分割符号须为’\001’;如果分隔符不是’\001’,程序不会报错,但是表查询的时候结果全部为’null’

不过需要注意的时,目前hive似乎只支持一个字符作为分隔符,不支持多个字符作为分隔符,如果row format delimited fields terminated by后面跟多个字符,比如

**row format delimited fields terminated by '...'**

系统只会使用一个点(.)作为分隔符。

你可能感兴趣的:(linux,大数据,hive,理论概念,大数据,hive,理论概念)