HIVE_CANNOT_OPEN_SPLIT:不支持列 <column_name> 类型为 null

Posted

技术标签:

【中文标题】HIVE_CANNOT_OPEN_SPLIT:不支持列 <column_name> 类型为 null【英文标题】:HIVE_CANNOT_OPEN_SPLIT : Column <column_name> type null not supported 【发布时间】:2019-10-01 08:03:34 【问题描述】:

HIVE_CANNOT_OPEN_SPLIT:打开 Hive 拆分 s3://path/to/file/.snappy.parquet 时出错:不支持列 ai.ja type null

这只发生在我定义一个“JA”列时,它是一个字符串结构。如果我离开该列,我可以毫无问题地查询。架构信息是使用 Apache Spark 从我们的 parquet 文件中获取的。

 The create table statement I'm using to reproduce the error follows:
  CREATE EXTERNAL TABLE <<tablename>>(`ai` struct < acs : varchar(100), ltc : varchar(100), primaryapplicant : struct < bwh : varchar(10), citizenship : varchar(20), currentaddresscity : varchar(50), currentaddressstate : varchar(50), currentaddressstreet2 : varchar(50), ss : varchar(50)>, JA : array < struct < dateofbirth : varchar(50), emailaddress : varchar(50), firstname : varchar(50), lastname : varchar(50), ss : varchar(50)>>, status : varchar(50), uri : varchar(50)>, `pr` struct < pc : struct < cn : varchar(50)>>, `product` array < struct < at : varchar(20), pi : varchar(50), pmn : varchar(256)>>, `ipt` varchar(40) ) PARTITIONED BY ( `owner` varchar(40) ) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' LOCATION 's3://<location>' TBLPROPERTIES ( 'compression_type' = 'snappy', 'numRows' = '2', 'transient_lastDdlTime' = <> )

从 parquet 文件中读取。

 Parquet schema : 
  root
 |-- ai: struct (nullable = true)
 |    |-- acs: string (nullable = true)
 |    |-- JA: struct (nullable = true)
 |    |    |-- DateOfBirth: string (nullable = true)
 |    |    |-- EmailAddress: string (nullable = true)
 |    |    |-- FirstName: string (nullable = true)
 |    |    |-- LastName: string (nullable = true)
 |    |    |-- ss: string (nullable = true)
 |    |-- ltc: string (nullable = true)
 |    |-- PrimaryApplicant: struct (nullable = true)
 |    |    |-- bwh: string (nullable = true)
 |    |    |-- Citizenship: string (nullable = true)
 |    |    |-- CurrentAddressCity: string (nullable = true)
 |    |    |-- CurrentAddressState: string (nullable = true)
 |    |    |-- CurrentAddressStreet2: string (nullable = true)
 |    |    |-- ss: string (nullable = true)
 |    |-- Status: string (nullable = true)
 |    |-- uri: string (nullable = true)
 |-- pr: struct (nullable = true)
 |    |-- pc: struct (nullable = true)
 |    |    |-- cn: string (nullable = true)
 |-- Product: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- at: string (nullable = true)
 |    |    |-- pi: string (nullable = true)
 |    |    |-- pmn: string (nullable = true)
 |-- ipt: string (nullable = true)  

此链接https://forums.aws.amazon.com/thread.jspa?threadID=246551 上提出了相同的问题。 但仍然无法弄清楚。

谁能帮忙?

【问题讨论】:

这里没有什么明显的。您可以尝试从一个工作模式开始,然后添加一个“小”字段直到它失败吗?我还会尝试将字段名称设为小写,并删除 VARCHAR 类型上的数字约束(例如 VARCHAR 而不是 VARCHAR(50) 【参考方案1】:

此问题已解决。

为了创建 Athena 表,每个字段都应精确映射到架构,即每个字段的顺序应与架构的顺序相同。

【讨论】:

以上是关于HIVE_CANNOT_OPEN_SPLIT:不支持列 <column_name> 类型为 null的主要内容,如果未能解决你的问题,请参考以下文章

Python curses 不支持重定向

自适应支付 PayPal 中不支持卡支付

重命名服务器文件错误(http 包装器不支持重命名)[PHP]

主机获得许可的版本为vmware vsphere 5 enterprise plus vcenter的许可证版本不支

WCF会话

ElasticSearch学习笔记--安装