1

我已经多次看到此类问题被问到,但这些解决方案对我不起作用。我创建了一个外部配置单元表,因为我的数据来自仅地图作业输出。然后,通过加载命令,我给出了特定文件的路径。它显示正常。但是当我给出select * from table命令时,它会返回一些带有空值的列。我执行的每个命令都在错误图片中。

我在文件中的分隔符是||,所以我在创建表命令中也提到了相同的内容。

这是我的输入文件 pic文件 pic。这是错误图片 。我也尝试过普通表而不是外部表。这也显示了同样的错误。我还尝试将分隔符称为//||and \|\|。但没有一个奏效。

4

1 回答 1

0

您面临的问题与作为 FIELD 分隔符的多个字符有关。

根据文档 FIELD delimiter 应该是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)

您需要将数据更改为只有单个字符字段分隔符。

如果你不能这样做,那么另一种方法是使用带有单个字段的阶段表。将您的数据加载到该表中,然后在您的实际目标表中,通过||分隔符拆分阶段表中的列,然后插入。您需要确保数据中的字段计数一致,否则您的最终输出将关闭。

参考: https ://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateTableCreate/Drop/TruncateTable

于 2017-12-26T03:00:28.203 回答