【问题标题】:Data in HDFS files not seen under hive table在 hive 表下看不到 HDFS 文件中的数据
【发布时间】:2015-08-27 12:00:53
【问题描述】:

我必须根据 oracle 表中存在的数据创建一个配置单元表。 我正在做一个 sqoop,从而将 oracle 数据转换为 HDFS 文件。然后我在 HDFS 文件上创建一个配置单元表。 sqoop 成功完成,文件也在 HDFS 目标目录中生成。 然后我在 hive 中运行创建表脚本。表被创建。但它是一个空表,在 hive 表中看不到任何数据。

有人遇到过类似的问题吗?

【问题讨论】:

  • 请交叉检查您正在导入 HDFS 数据的哪个 HDFS 目录。如果您正在创建配置单元表,则位置应该相同。请提供导入的目录和您的create table声明
  • 交叉检查了在 Create 语句中指定的 HDFS 位置和目录。它们完全相同。检查创建的配置单元表的元数据,该表也指向 HDFS 位置。
  • 导入目录:/ user / rajendrap / webdata / wpt_booking / step_web_prod_trav_booking创建脚本:create table default.stage_web_prod_trav_booking(船舶码字符串,portcode字符串,持续时间字符串,saildate字符串,num_of_travellers decimal,num_of_bookings decimal,num_of_booking_web十进制) 分区(RDATE 字符串)位置“/user/rajendrap/webdata/WPT_Booking/Stage_Web_Prod_Trav_Booking”;

标签: hadoop hive sqoop hadoop-partitioning


【解决方案1】:

Hive 默认分隔符是 ctrlA,如果你不指定任何分隔符,它将使用默认分隔符。在您的配置单元脚本中添加以下行。

以“\t”结尾的行格式分隔字段

【讨论】:

    【解决方案2】:

    您的 Hive 脚本和您的期望是错误的。您正在尝试在已导入的数据上创建分区表,分区不会那样工作。如果您的查询中没有分区,那么您可以看到数据。

    基本上如果你想要分区表,你不能像上面尝试的那样在底层数据上创建。如果您希望 hive 分区将中间表或该 sqoop 目录中的数据加载到您的分区表以获取 Hive 分区。

    【讨论】:

    • 感谢 BigData,您是对的。我创建了没有分区的配置单元表,它工作正常。现在我面临另一个问题。所有数据都显示在 hive 表的单个字段中。 Hive 表无法识别 HDFS 文件中存在的数据中的分隔符。在 sqoop 中,我使用了参数 [--fields-terminated-by '\t']。即便如此,也会发生这种情况。你能解释一下吗?
    猜你喜欢
    • 2013-11-05
    • 2020-07-28
    • 2015-12-28
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多