【问题标题】:How to query Hive table which has parquet as inputformat?如何查询以镶木地板为输入格式的 Hive 表?
【发布时间】:2017-03-20 21:10:54
【问题描述】:

我创建了一个配置单元表,如下所示:

create table parqtab(id int, name char(30), city char(30))
  partitioned by (country char(30))
  row format delimited
  fields terminated by ','
  stored as parquet
  location '/home/hive/practice';

并加载以下数据:

3,Bobby,London
4,Sunny,Amsterdam

使用加载命令:

load data local inpath '/home/cloudera/Desktop/hid' into table parqtab partition(country='abcd');

当我从 parqtab 查询 select * 时,它给了我以下错误:

Failed with exception java.io.IOException:java.lang.RuntimeException: 
hdfs://quickstart.cloudera:8020/home/hive/practice/country=abcd/hid is not a Parquet file. expected magic number at tail [80, 65, 82, 49] but found [111, 114, 101, 10]
Time taken: 0.227 seconds

我知道查询以 parquet 格式存储的数据不是正确的方法。但我不明白该怎么做。谁能告诉我我在这里犯了什么错误以及如何正确查询表格?

【问题讨论】:

  • 你是如何“加载”数据的? Sqoop --as-parquet?
  • @AM_Hawk 我添加了我使用的加载命令。

标签: hadoop hive


【解决方案1】:

不确定您是如何加载数据的,但如果您有 csv,请将其放在 hdfs 上。在存储为文本的目录上创建一个外部表。创建您的 parquet 表,您可以进行插入操作,然后 hive 会将结果数据集存储为 parquet。

CREATE EXTERNAL TABLE db_name.tbl0(
col0    INT,
col1    VARCHAR(255)
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
LINES TERMINATED BY '\n'
LOCATION '/someDir/tbl0';

CREATE EXTERNAL TABLE db_name.tbl1(
col0    INT,
col1    VARCHAR(255) 
)
STORED AS PARQUET
LOCATION '/someDir/tbl1';
;

INSERT INTO TABLE tbl1
select * from tbl0;

【讨论】:

    【解决方案2】:

    正如@AM_Hawk 建议的那样,如果您有 csv,那么您应该在创建表中简单地使用 STORED AS TEXTFILE。如下所示:

    create external table parqtab(id int, name char(30), city char(30))
    partitioned by (country char(30))  
    ROW FORMAT DELIMITED  
    FIELDS TERMINATED BY ',' 
    STORED AS TEXTFILE 
    LOCATION '/home/hive/practice';
    

    错误清楚地表明它无法找到任何镶木地板文件。

    如果您真的需要 Parquet,那么您可以使用 Spark 将您的 Hive 数据编写为 Parquet 文件,如下所示,并按照 @AM_Hawk 在他的回答中建议的那样在其上创建 Hive 架构:

    val iSql="your hive select statement"
    val hiveDF = hsc.sql(iSql)
    hiveDF.coalesce(noExecutors).write.mode("append/overwrite").parquet(parquetLoc)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-10
      • 1970-01-01
      • 1970-01-01
      • 2016-10-05
      • 1970-01-01
      • 1970-01-01
      • 2017-08-04
      • 2021-12-06
      相关资源
      最近更新 更多