使用 Hive 复杂数据类型



我正在尝试将文本文件加载到 hive db 中,文本文件中的值,分开,在这些值中,有一个值是数组类型。

这是我的示例数据。

101,suresh,67,45,67,21,hyderabad

这里:

101: 学生名册编号

suresh: 学生姓名

67,45,67,21: 学生成绩

hyderabad: 学生位置

这里我需要如何加载到 Hive 中作为

101,suresh,[67,45,67,21],hyderabad

其中标记字段必须作为数组类型加载。

我该怎么做?

您可以使用正则表达式 serde并创建文本表。

问题在于数组类型,因为正则表达式 serde不允许数组数据类型。

hive> CREATE TABLE details(
id STRING,
name STRING,
marks STRING,
location STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES  (
"input.regex" = "^(.*?),(.*?),(.*),(.*)"
)
STORED AS TEXTFILE;
hive> select * from details;
+------+---------+--------------+------------+--+
|  id  |  name   |    marks     |  location  |
+------+---------+--------------+------------+--+
| 101  | suresh  | 67,45,67,21  | hyderabad  |
+------+---------+--------------+------------+--+

要解决此问题,您可以创建另一个数据类型array<string>,然后插入到final_table从正则表达式 serde 表中选择。

hive> select id,name,array(marks)marks,location from access_log;
+------+---------+------------------+------------+--+
|  id  |  name   |      marks       |  location  |
+------+---------+------------------+------------+--+
| 101  | suresh  | ["67,45,67,21"]  | hyderabad  |
+------+---------+------------------+------------+--+

(或(

而不是创建正则表达式 serde 表 只需创建带有逗号分隔符的文本表

hive> CREATE TABLE details(
id STRING,
name STRING,
marks1 STRING,
marks2 STRING,
marks3 STRING,
marks4 STRING,
location STRING
)
ROW FORMAT delimited Fields Terminated by ','
STORED AS TEXTFILE;

然后使用数组数据类型创建最终表并插入到final_Table从文本表中进行选择。

hive> select id,name,array(marks1,marks2,marks3,marks4) marks,location from details

最新更新