hive创建table时指定分隔符

    xiaoxiao2022-07-12  152

    由于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的数据就是集合中的某一种

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

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

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

    不过需要注意的时,目前hive似乎只支持一个字符作为分隔符,不支持多个字符作为分隔符,如果row format delimited fields terminated by后面跟多个字符,比如 **row format delimited fields terminated by '...'** 系统只会使用一个点(.)作为分隔符。
    最新回复(0)