select语句返回一些具有空值的列

krugob8w  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(341)

我见过这种问题被问过很多次,但这些解决方案对我不起作用。我创建了一个外部配置单元表,因为我的数据是来自map only作业输出的。然后,通过load命令,我给出了特定文件的路径。它表现得很好。但当我付出 select * from table 命令返回某个具有空值的列。我执行的每个命令都在错误图片中。
文件中的分隔符是 || ,所以我在create table命令中也提到了同样的内容。
这是我的输入文件。这是错误图片。我也试过用普通表代替外部表。这也表明了同样的错误。我还尝试将分隔符作为 //|| 还有 \|\| . 但都没用。

9avjhtql

9avjhtql1#

您面临的问题与多个字符作为字段分隔符有关。
根据文档,字段分隔符应该是 CHAR ```
row_format
: DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char]
[MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
[NULL DEFINED AS char] -- (Note: Available in Hive 0.13 and later)

您需要将数据更改为只有一个字符字段分隔符。
如果不能做到这一点,那么另一种方法是使用带有单个字段的stage表。将数据加载到该表中,然后在实际的目标表中,将stage表中的列按 `||` 分隔符,然后插入。您需要确保字段计数在数据中是一致的,否则您的最终输出将被关闭。
参考文献:https://cwiki.apache.org/confluence/display/hive/languagemanual+ddl#languagemanualddl-createTable创建/删除/截断表

相关问题