【问题标题】:Hive table with multiple SerDe具有多个 SerDe 的 Hive 表
【发布时间】:2018-11-22 09:37:35
【问题描述】:

我们有一个由date 分区的 HIVE 表。它目前具有序列文件格式,我想将其转换为 Parquet 表。

是否有可能我们有 Parquet Serde 的新分区,以及序列格式的旧分区,所以我不需要回填它?

【问题讨论】:

  • 为什么不做一个单独的表呢? CREATE TABLE t2 LIKE t STORED AS PARQUET?
  • @cricket_007 但是我需要通过将序列文件转换为 Parquet 文件来回填它(对于 2-3 年的历史数据)。此外,可能会破坏管道的不同表名(可以通过多种方式修复)
  • 您不能混合使用 serdes。这是一个表级别的设置,而不是分区级别

标签: hive


【解决方案1】:
  1. 使用默认 serde(LazySimpleSerDe) 和默认存储 (textfile) 创建一个外部空表。

  2. 添加分区。

  3. 更改分区设置文件格式(或设置 serde)。

Hive LanguageManual DDL

CREATE EXTERNAL TABLE test(ip string, localTime string ) 
PARTITIONED BY (partition__hive__ STRING)  location '/tmp/table/empty';

alter table test add partition (partition__hive__='p_0') location 'hdfs://hdfsTest/hive/table/test/2018/11/21/08';
alter table test partition (partition__hive__='p_0') SET FILEFORMAT parquet;

alter table test add partition (partition__hive__='p_1') location 'hdfs://hdfsTest/hive/table/test/2018/11/21/09'; 
alter table test partition (partition__hive__='p_1') SET SERDE  'org.apache.hive.hcatalog.data.JsonSerDe';

【讨论】:

  • 也许你可以用几句话解释
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-28
相关资源
最近更新 更多