apache - 将数据从 .avro 文件导入到配置单元表

标签 apache hadoop hive avro

我按照我拥有的命令和 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/

相关文章:

hadoop - 配置单元索引创建失败

java - 从Hive连接到HDFS(JSON文件)

https 后面的 Apache 目录尾随斜杠问题

java - 无法找到 tools.jar

hadoop - hadoop用例与有效贷款数据

hadoop - 将 json 文件加载到 PIG

python - 如何通过 Python 访问 Hive?

php - 存储 PHP 超全局变量,直到 Apache 服务器重新启动

python - Apache/Django - CSS 未在 Alias 上加载

r - sparklyr 看不到在 Hive 中创建的数据库,反之亦然