如果我按以下方式运行配置单元插入覆盖查询以镶木地板格式存储数据,则列名将默认为_col0。我该如何避免这种情况并强制执行select子句中的列名。
插入覆盖目录“某些位置” 存储为PARQUET 从员工中选择姓名;
-创建的实木复合地板文件的列名称为“ _col0”而不是“名称”
是否可以通过将一些属性传递给Serde来解决此问题?
hive> select * from employee;
OK
employee.id employee.name employee.salary
100 john doe 99999
101 jane doe 88888
hive> insert overwrite directory '/tmp/empdata' stored as parquet select name from employee;
scala> spark.read.parquet("/tmp/empdata").printSchema
root
|-- _col0: string (nullable = true)
答案 0 :(得分:0)
仅当metastore和Parquet模式中的表定义完全匹配时,或者仅在模式末尾添加附加内容时,列索引才能正常工作。而当使用列名时,架构演变没有问题。
以下是三种情况,它们在hive.parquet.use-column-names = true
时起作用,并使用默认的hive.parquet.use-column-names = false
断开: