我有一个这样创建的配置单元表: CREATE EXTERNAL TABLE test_db.test( region STRING, start_date STRING ) PARTITIONED BY ( id STRING ) STORED AS PARQUET.
我有一个脚本添加Parquet文件如下: ALTER TABLE test_db.test ADD IF NOT EXISTS PARTITION ( id = '' ) LOCATION 's3://location/to/file'
此脚本接受用户对Parquet文件位置的输入。我想确保parquet文件列与表列匹配,但是add partition语句似乎总是有效的,即使列是错误的。如何让配置单元验证add上的列?
1条答案
按热度按时间u7up0aaq1#
Hive是
schema-on-read
. 当您添加带有数据文件位置的分区时,hive只是在其元存储中注册它。此时不会对实际数据执行架构检查。这与传统的关系数据库形成了鲜明的对比schema-on-write
. 当实际读取数据时,hive将根据表定义为基础数据分配一个模式。Parquet工具
用于验证
parquet
文件,你可以利用Parquet工具。此实用程序可用于检查parquet
文件。您可以在脚本中包含此步骤,并且仅在parquet
文件架构与Hive
表定义。下面是版本1.6.0的示例用法:
答。下载jar:
http://central.maven.org/maven2/com/twitter/parquet-tools/1.6.0/parquet-tools-1.6.0.jar
b。检查架构