sql - 使用 Hive 复杂数据类型

标签 sql arrays hadoop hive custom-data-type

我正在尝试将文本文件加载到配置单元数据库中,文本文件中的值是 , 分隔的,这些值中有一个值是数组类型。

这是我的示例数据。

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/

相关文章:

MYSQL 显示 Null employees on left join

hadoop - oozie中执行 Action 后删除hdfs路径

hadoop - hdfs(namenode)中使用的命名空间和元数据的含义是什么

sql - 如何找到月份之间的差异

sql - MS SQL 列相当于 C# 'readonly'?

sql - SQL批量插入父子表的操作

sql - 在给定日期之间获取最高分条目

java - 如何将字节数组转换为 key 格式?

arrays - 不可变值只有可变成员

C++——反转两个字母的字符数组会产生未知行为?