我正在尝试动态(不在Hive DDL中列出列名和类型)在镶木地板数据文件上创建Hive外部表.我有底层镶木地板文件的Avro架构.
我的尝试是使用以下DDL:
CREATE EXTERNAL TABLE parquet_test ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe' STORED AS PARQUET LOCATION 'hdfs://myParquetFilesPath' TBLPROPERTIES ('avro.schema.url'='http://myHost/myAvroSchema.avsc');
使用正确的架构成功创建了我的Hive表,但是当我尝试读取数据时:
SELECT * FROM parquet_test;
我收到以下错误:
java.io.IOException: org.apache.hadoop.hive.serde2.avro.AvroSerdeException: Expecting a AvroGenericRecordWritable
有没有办法成功创建和读取Parquet文件,而没有在DDL中提及列名称和类型列表?
以下查询有效:
CREATE TABLE avro_test ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe' STORED AS AVRO TBLPROPERTIES ('avro.schema.url'='myHost/myAvroSchema.avsc'); CREATE EXTERNAL TABLE parquet_test LIKE avro_test STORED AS PARQUET LOCATION 'hdfs://myParquetFilesPath';