是否有一种方法可以将简单的文本文件加载到配置单元表中,而用“ ::”将字段分开,而不是将“ ::”替换为“,”,然后再加载它? 当文本文件较小时,用“,”替换“ ::”会更快,但是如果包含数百万条记录呢?
答案 0 :(得分:0)
尝试使用 Regex Serde
创建Hive表示例:
我的文件中带有以下文字。
i::90
w::99
创建配置单元表:
hive> create external table default.i
(Id STRING,
Name STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES ('input.regex' = '(.*?)::(.*)')
STORED AS TEXTFILE;
从Hive表中选择:
hive> select * from i;
+-------+---------+--+
| i.id | i.name |
+-------+---------+--+
| i | 90 |
| w | 99 |
+-------+---------+--+
如果要跳过标题,请使用以下语法:
hive> create external table default.i
(Id STRING,
Name STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES ('input.regex' = '(.*?)::(.*)')
STORED AS TEXTFILE
tblproperties ('skip.header.line.count'='1');
更新:
检查您的表位置中是否有older files
。如果其中有一些文件,则将其删除(if you don't want them)
。
1。创建Hive表为:
create external table <db_name>.<table_name>
(col1 STRING,
col2 STRING,
col3 string,
col4 string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES ('input.regex' = '(.*?)::(.*?)::(.*?)::(.*)')
STORED AS TEXTFILE;
2。然后运行:
load data local inpath 'Source path' overwrite into table 'Destination table'