Hadoop 将平面文件中的数据加载到配置单元表时获取空值
将平面文件中的数据加载到配置单元表时,我得到的是空值。Hadoop 将平面文件中的数据加载到配置单元表时获取空值,hadoop,null,hive,hdfs,flat-file,Hadoop,Null,Hive,Hdfs,Flat File,将平面文件中的数据加载到配置单元表时,我得到的是空值。 我的表格结构如下: hive> create table test_hive (id int,value string); 我的平面文件是这样的: input.txt 1 a 2 b 3 c 4 d 5 e 6 F 7 G 8 j 当我运行以下命令时,会得到空值: hive> LOAD DATA LOCAL INPATH '/home/hduser/input.txt' OVERWRITE I
我的表格结构如下:
hive> create table test_hive (id int,value string);
我的平面文件是这样的:
input.txt1 a
2 b
3 c
4 d
5 e
6 F
7 G
8 j
当我运行以下命令时,会得到空值:hive> LOAD DATA LOCAL INPATH '/home/hduser/input.txt' OVERWRITE INTO TABLE test_hive;
hive> select * from test_hive;
OK<br>
NULL NULL
NULL NULL
NULL NULL
NULL NULL
NULL NULL
NULL NULL
NULL NULL
NULL NULL
配置单元中的默认字段终止符为^A。您需要在create table语句中明确指出您正在使用不同的字段分隔符 与罗兰·本德在评论中指出的类似,使用:
CREATE TABLE test_hive(id INT, value STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ';
您不需要指定位置,因为您正在创建托管表(而不是外部表)。配置单元的默认记录和字段分隔符列表:
按^V^A可以在Vim中插入^A。元素之间用空格或制表符分隔?让我们按照以下步骤进行操作。如果使用分隔空间,请使用“”而不是“\t”确定
hive> CREATE TABLE test_hive(id INT, value STRING) row format
delimited fields terminated by '\t' line formated by '\n' stored as filename;
你必须进去
hive> LOAD DATA LOCAL INPATH '/home/hduser/input.txt' OVERWRITE INTO TABLE test_hive;
hive> select * from test_hive;
现在,您将获得准确的预期输出“filename”。解决方案非常简单。表的创建方式不正确 解决您的问题或任何其他问题的简单方法是知道如何加载数据 创建表[如果不存在]mytableName(id int,值字符串) 行格式分隔 以“/t”结尾的字段 存储为文本文件 现在让我解释一下代码:
希望有帮助。您面临的问题是,在数据中,字段由“”分隔,并且在创建表时,您没有提到字段分隔符。因此,如果在创建配置单元表时未提及字段分隔符,默认情况下,配置单元会将^A视为分隔符 因此,为了解决您的问题,您可以重新创建包含以下语法的表,这样就可以了
创建表测试配置单元(id INT,值字符串)
以“”结尾的行格式分隔字段代码>请检查数据集日期列,它应遵循日期格式yyyy mm dd
如果字符串的格式为“yyyy-mm-dd”,则返回对应于该年/月/日的日期值。如果字符串值与此格式不匹配,则返回NULL。
在加载到配置单元表时,可能需要指定输入文件中行/列的分隔方式。您可以尝试以下操作:create table test_hive(id int,value string)行格式分隔字段,以“”结尾,存储为TEXTFILE LOCATION'/user/hadoop/hive/input'代码>您面临的问题是,在数据中,字段由“”分隔,并且在创建表时未提及字段分隔符。因此,如果在创建配置单元表时未提及字段分隔符,默认情况下,配置单元会将^A视为分隔符。因此,为了解决您的问题,您可以重新创建包含以下语法的表,这样就可以了。创建以“”结尾的表测试配置单元(id INT,值字符串)行格式分隔字段;在ApacheHiveServer2客户端示例中,它们使用“Ctrl-a”分隔文件(a.txt)将数据加载到表中。首先,他们不包括这个文件,其次,我希望他们提供更多的信息。
hive> LOAD DATA LOCAL INPATH '/home/hduser/input.txt' OVERWRITE INTO TABLE test_hive;
hive> select * from test_hive;