赞
踩
在创建Hive表时,默认行分隔符"^A",列分隔符"\n",这两项也是可以设置的。在实际开发中,一般默认使用默认的分隔符,当然有些场景下也会自定义分隔符。
- spark-hive
- use test_db;
-
- # 创建外部表
- CREATE EXTERNAL TABLE test_tb (
- user_id bigint COMMENT '用户ID',
- user_name string COMMENT '用户名'
- )
- LOCATION '/home/test_db/test_tb'
- ;
- show create table test_tb;
- 20/04/13 11:47:49 INFO SparkHiveShell: current SQL: show create table test_tb
- CREATE EXTERNAL TABLE `test_tb`(
- `user_id` bigint COMMENT '用户ID',
- `user_name` string COMMENT '用户名')
- ROW FORMAT SERDE
- 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' # 默认分隔符,行分割符:"\n",列分割符:"^A"
- STORED AS INPUTFORMAT
- 'org.apache.hadoop.mapred.TextInputFormat' # 默认存储格式textfile
- OUTPUTFORMAT
- 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' # HDFS存储目录
- LOCATION
- 'hdfs://namenode.xxx.com:9000/home/test_db/test_tb'
- TBLPROPERTIES (
- 'transient_lastDdlTime'='1586749208')
- Time taken: 1.702 s
- CREATE EXTERNAL TABLE test_tb_2 (
- user_id bigint COMMENT '用户ID',
- user_name string COMMENT '用户名'
- )
- ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
- LINES TERMINATED BY '\n'
- LOCATION '/home/test_db/test_tb_2'
- ;
- show create table test_tb_2;
- 20/04/13 11:55:22 INFO SparkHiveShell: current SQL: show create table test_tb_2
- CREATE EXTERNAL TABLE `test_tb_2`(
- `user_id` bigint COMMENT '用户ID',
- `user_name` string COMMENT '用户名')
- ROW FORMAT DELIMITED
- FIELDS TERMINATED BY '\t' # 列分割符,表2的列分割符为:"\t"
- LINES TERMINATED BY '\n' # 行分割符,表2的行分隔符为:"\n"
- STORED AS INPUTFORMAT
- 'org.apache.hadoop.mapred.TextInputFormat'
- OUTPUTFORMAT
- 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
- LOCATION
- 'hdfs://namenode.xxx.com:9000/home/test_db/test_tb_2'
- TBLPROPERTIES (
- 'transient_lastDdlTime'='1586749805')
- Time taken: 2.485 s
从如上两个例子中可以看出:Hive默认的列分隔符类型为“org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe”。
Hive中默认的列分割符为:"^A"(CTRL+V,CTRL+A),在数据文件中为:"1^AJom\n",如果需要自定义分隔符,需要设置 "ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'",因为^A八进制编码为“\001”,如果使用默认的分隔符,可以不加此参数。
Hive中默认行分隔符为"\n",也可以通过"LINES TERMINATED BY '\n' "来设置。
一般来说Hive默认行分隔符为换行符,如果非要自定义分隔符,可以通过定义INPUTFORMAT和OUTPUTFORMAT类来指定特定的(行|列)分隔符。
使用时需要注意:数据中如果包含:"\001","\n"等分隔符,需要提前处理掉。正常在HQL中我们需要REGEXP_REPLACE(字段,'\r|\n|\r\n|\001|\002|\003|\t', '')把常用的分隔符转移掉,免得带来串列,断行的困扰。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。