我正在尝试将文本文件加载到 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