我想创建一个使用HDFS中已有数据的外部HIVE表。文件位于类似/hdfs/data/location
的目录和year-month
格式的子目录中。例如:CCD_ 3和CCD_。
这些目录中有多个文件,但文件中有不同类型的数据(不同的字段)。不同类型记录的示例有:
A类
type
state
city
population
B型
type
zipcode
registeredvoters
实际数据示例(制表符分隔)
type:A state:New York city:New York population:8336697
type:A state:California city:Los Angeles population:3857799
type:B zipcode:92118 registeredvoters:794051
type:B zipcode:92155 registeredvoters:794053
type:A state:Illinois city:Chicago population:2714856
数据已经是这种格式,并且正在被HIVE之外的其他进程使用,因此更改它可能不是一种选择。我也不想重复HDFS中的数据。
有没有办法只为上面数据中定义的给定类型创建一个HIVE表
以下是我到目前为止创建的内容:
create external table population (
type string,
state string,
city string,
population int
)
location '/hdfs/data/location';
我不认为你可以有一个表,但我认为你可以创建一个视图,使用str_to_map UDF 来解释行
create external table raw_population( line string ) location '/hdfs/data/location';
create view population_view as
select
pmap['type'] as type,
pmap['state'] as state,
pmap['city'] as city
pmap['population'] as population
from
( select str_to_map( line, 't', ':') as pmap from raw_population ) pm;