当前位置: 首页 > 知识库问答 >
问题:

在镶木地板数据上使用 Avro 架构动态创建 Hive 外部表

上官迪
2023-03-14

我正在尝试动态(不在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中提到列名和类型列表?

共有1个答案

宰父志新
2023-03-14

以下查询作品:

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';
 类似资料:
  • 我有一个数据帧,它是由运行特定日期的每日批处理创建的,然后保存在HDFS(Azure Data Lake Gen 2)中。 它是用这样的东西保存的 如您所见,我没有对数据帧进行分区,因为它只包含一个日期。 例如,第一天的第一个文件将存储在文件夹中 交易/2019/08/25 然后第二天,它就会在文件夹里 贸易/2019/08/26 问题是,当所有数据都放好后,日期上的过滤器谓词是否仍会被按下,HD

  • 我正在尝试创建一个数据管道,其中incomng数据存储在parquet中,我创建了一个外部配置单元表,用户可以查询配置单元表并检索数据。我可以保存parquet数据并直接检索它,但当我查询配置单元表格时,它不会返回任何行。我做了以下测试设置: -创建外部配置单元表创建外部表emp ( id double,hire_dt时间戳,用户字符串)存储为parquet location '/test/EMP

  • 问题内容: 有没有办法从Java创建镶木地板文件? 我的内存中有数据(java类),我想将其写入一个Parquet文件中,以便以后从apache-drill中读取它。 有没有简单的方法可以做到这一点,例如将数据插入sql表? 得到它了 谢谢您的帮助。 结合答案和此链接,我能够创建一个实木复合地板文件并用钻头将其读回。 问题答案: 不建议使用ParquetWriter的构造函数(1.8.1),但不建

  • 有没有一种方法可以直接从基于avro模式的parquet文件在Amazon Athena中创建表?模式被编码到文件中,所以我需要自己实际创建DDL看起来很愚蠢。 我看到了这个,还有另一个复制品 但它们与Hive直接相关,这对雅典娜不起作用。理想情况下,我正在寻找一种以编程方式执行此操作的方法,而无需在控制台上定义它。

  • 我试图创建一个Hive表与模式字符串,字符串,双在包含两个拼花文件的文件夹上。第一个拼花文件模式是字符串,字符串,双,第二个文件的模式是字符串,双,字符串。 我正在尝试使用pig(0.14)脚本中的hive表。 但我得到了错误 java.lang.UnsupportedOperationException:无法检查org.apache.hadoop.hive.serde2.io.DoubleWri

  • 我正在尝试将存储在HDFS(100Gbs)上的一堆多部分avro文件转换为拼花文件(保留所有数据) Hive可以使用以下命令将avro文件作为外部表读取: 但是当我试图设计一张拼花桌时: 它会抛出一个错误: 失败:执行错误,从org.apache.hadoop.hive.ql.exec.DDLTask返回代码1。java.lang.UnsupportedOperationException:未知字