我按照我拥有的命令和 avro 架构创建了一个配置单元表。
CREATE TABLE table_name
PARTITIONED BY (t string, y string, m string, d string, h string, hh string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
TBLPROPERTIES (
'avro.schema.url'='hdfs://location/schema.avsc');
现在我想将我在 HDFS 中的数据转储到创建的表中。
我有一个 HDFS 位置,其中我的目录结构中的数据为 t/y/m/d/h/hh/data.avro 根据分区,我有多个目录,因为那是我的分区列。
我想将所有数据转储到创建的表中。
我尝试使用外部表,但出现异常。
最佳答案
如果您在 hdfs 文件夹中遵循 hive 约定并创建指向表位置的 hive 表,则应运行 msck 修复表语句。
例如
CREATE TABLE table_name
PARTITIONED BY (t string, y string, m string, d string, h string, hh string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
TBLPROPERTIES (
'avro.schema.url'='hdfs://location/schema/schema.avsc')
location "hdfs:///location/data;
像这样加载数据
/location/data/y=2016/m=02/d=03/h=03/hh=12/data.avro /location/data/y=2016/m=02/d=03/h=03/hh=13/data2.avro
这样您就可以使用以下语句加载数据,因为 Hive 会识别分区
msck repair table table_name;
如果你不想这样做,你可以使用add partition like
ALTER TABLE table_nameADD PARTITION (y='01',m='02',d='03',h='03',hh='12') location '/yourpath/y=2016/m=02/d=03/h=03/hh=12/'; (or any other folder)
关于apache - 将数据从 .avro 文件导入到配置单元表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41850307/