我正在尝试将文本文件加载到配置单元数据库中,文本文件中的值是 ,
分隔的,这些值中有一个值是数组类型。
这是我的示例数据。
101,suresh,67,45,67,21,hyderabad
这里:
101
:学号
suresh
: 学生姓名
67,45,67,21
:学生成绩
hyderabad
: 学生所在地
这里我需要如何加载到配置单元中
101,suresh,[67,45,67,21],hyderabad
标记字段必须作为数组类型加载。
我该怎么做?
最佳答案
您可以使用regex serde 并创建文本表。
问题出在数组类型,因为regex 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>
创建另一个表 数据类型,然后从 regex serde 表 中选择插入到 final_table。
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
关于sql - 使用 Hive 复杂数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51833309/