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.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 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 ' ';

您不需要指定位置,因为您正在创建托管表(而不是外部表)。

配置单元的默认记录和字段分隔符列表:

  • \n

  • ^A

  • ^B

  • ^C


  • 按^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”结尾的字段

    存储为文本文件

    现在让我解释一下代码:

  • 一线 创建您的表。[IF NOT EXIST]是可选的,它告诉您表是否存在,但不覆盖它。它更多的是安全措施

  • 第二线 在表级别为结构化字段指定分隔符

  • 第三项 可以包含任何单个字符,但默认值为“\001”。 “/t”表示选项卡空间:在您的情况下 “|”表示相邻并用空格分隔的数据| “”用于一个字符空间。等等

  • 第四行: 指定要在其中存储数据的文件类型。该文件可以是文本文件、SEQUENCEFILE、RCFILE或二进制SEQUENCEFILE。或者,可以将数据的存储方式指定为Java输入和输出类

  • 本地加载时:

    将LOCD DATA LOCAL INPATH'/your/DATA/path.csv'[OVERWRITE]放入表myTableName

    始终尝试通过简单的select*语句检查数据


    希望有帮助。

    您面临的问题是,在数据中,字段由“”分隔,并且在创建表时,您没有提到字段分隔符。因此,如果在创建配置单元表时未提及字段分隔符,默认情况下,配置单元会将^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;