在 Parquet 数据上使用 Avro 模式动态创建 Hive 外部 table
Dynamically create Hive external table with Avro schema on Parquet Data
我正在尝试动态地(不在 Hive DDL 中列出列名和类型)在 parquet 数据文件上创建 Hive 外部 table。我有底层镶木地板文件的 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 table 已使用正确的模式成功创建,但是当我尝试读取数据时:
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';
我正在尝试动态地(不在 Hive DDL 中列出列名和类型)在 parquet 数据文件上创建 Hive 外部 table。我有底层镶木地板文件的 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 table 已使用正确的模式成功创建,但是当我尝试读取数据时:
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';