gpt4 book ai didi

hadoop - 从 View 创建表存储为文本文件时出错

转载 作者:行者123 更新时间:2023-12-02 20:27:27 25 4
gpt4 key购买 nike

我试图将 View 中的信息加载到配置为文本文件的Hive表中,配置如下:

CREATE TABLE table1 (
field1 BIGINT
,field2 STRING
,email STRING
,field3 BIGINT
,field4 STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\u0001'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE ;

关键是在创建表之后,我从 View 中插入信息,如下所示:
insert into table1 as 
select
field1
,field2
,email
,field3
,field4
from v_table2 ;

该过程返回成功,但是当我检查table1上的数据时,select语句返回以下输出:
Error converting column: 4 to BIGINT

当 View 上有该字段的信息时,该字段的信息返回Null,但insert语句不返回任何错误。

此外,我可以正确加载第一个BIGINT字段,但电子邮件字段显示一个“正方形”,之后的BIGINT字段会显示该错误。
检查文件上的数据后,似乎该信息在电子邮件字段之后出现了偏移。

听起来有些编码问题。

已经尝试强制这样的编码,但是不走运:
ALTER TABLE table1 SET SERDEPROPERTIES('serialization.format'='\u0001', 'serialization.encoding'='windows-1252');

我还应该提到,从 View 加载到table1中的字段在 View 从中加载信息的表中已经是BIGINT。

有人可以帮忙吗?



经过一番研究,我设法通过创建具有以下定义的目标表来找到解决方案:
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES ('separatorChar'='\u0001', 'quoteChar'="'", 'escapeChar' = '\\')
STORED AS TEXTFILE

通过像这样处理“电子邮件”字段上的数据:
case 
when ascii(email_fe) <> 1
then email_fe
else NULL
end email_fe

对于出现奇怪数据的“电子邮件”字段,我检查了 ascii 代码始终为 1 ,并通过在select语句中检查是否可以相应地处理该信息并获取其他插入表的数据正确的方式。

有谁有更好的选择?

最佳答案

你能试试看吗?由于创建的表具有一列bigint,并且我们正在尝试插入一个int值,因此将引发此错误

插入表1作为
选择
栏位1
,field2
,电子邮件
,cast(field3为bigint)
,field4
来自v_table2;

关于hadoop - 从 View 创建表存储为文本文件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55362699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com