Impala插件与Hive插件

wgx48brx  于 2022-09-27  发布在  Impala
关注(0)|答案(1)|浏览(178)

当我试图使用Hive命令将整数值插入 parquet 表中的列时,这些值没有得到插入,显示为null。但当使用impala命令时,它是有效的。但随着 Impala 的插入,分区的大小减小了。分区(show partitions)中的行数也显示为-1。这是什么原因?

CREATE TABLE `TEST.LOGS`(
  `recordtype` string, 
  `recordstatus` string, 
  `recordnumber` string, 
  `starttime` string, 
  `endtime` string, 
  `acctsessionid` string, 
  `subscriberid` string, 
  `framedip` string, 
  `servicename` string, 
  `totalbytes` int, 
  `rxbytes` int, 
  `txbytes` int, 
  `time` int, 
  `plan` string, 
  `tcpudp` string, 
  `intport` string)
PARTITIONED BY (`ymd` string)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
WITH SERDEPROPERTIES ( 
  'field.delim'=',', 
  'serialization.format'=',') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
  'hdfs://dev-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
TBLPROPERTIES (
  'transient_lastDdlTime'='1634390569')

插入语句
Hive

sudo -u hdfs hive -e 'insert into table TEST.LOGS partition (ymd="20220221") select * from TEMP.LOGS;'

Impala

impala-shell --ssl -i xxxxxxxxxxx:21000 -q 'insert into table TEST.LOGS partition (ymd="20220221") select * from TEMP.LOGS;'
um6iljoc

um6iljoc1#

当我试图使用Hive命令将整数值插入 parquet 表中的列时,这些值没有得到插入,显示为null

请分享您的准确插入语句和表格定义,以获得准确答案?如果我不得不猜测,这可能是因为hive和impala的隐式数据类型转换存在差异。

  • HIVE-如果设置了HIVE.metastore.disallow.incompatible.col.type。如果更改为false,则可以将Metastore中的列类型从任何类型更改为任何其他类型。在这种类型更改后,如果可以用新类型正确显示数据,则将显示数据。否则,数据将显示为NULL。根据文档,前向转换有效(int>bigint),而后向转换无效(bigint>smallint),并生成null。
  • Impala-它支持有限的隐式转换集,以避免意外的转换行为产生不希望的结果。当从较小或不太精确的类型转换为较大或更精确的类型时,Impala会在数字类型之间执行隐式转换。例如,Impala将隐式地将SMALLINT转换为BIGINT。
    分区(show partitions)中的行数也显示为-1-

请运行compute stats table_name修复此问题。

相关问题