用于ORC或RC格式的Hive Json SerDE

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于ORC或RC格式的Hive Json SerDE相关的知识,希望对你有一定的参考价值。

是否可以使用带有RC或ORC文件格式的JSON serde?我试图插入文件格式为ORC的Hive表,并在序列化的JSON中存储在azure blob上。

答案

显然不是

insert overwrite local directory '/home/cloudera/local/mytable' 
stored as orc 
select '{"mycol":123,"mystring","Hello"}'
;

create external table verify_data (rec string) 
stored as orc 
location 'file:////home/cloudera/local/mytable'
;

select * from verify_data
;

REC { “mycol”:123, “MyString的”, “你好”}

create external table mytable (myint int,mystring string)
row format serde 'org.apache.hive.hcatalog.data.JsonSerDe' 
stored as orc
location 'file:///home/cloudera/local/mytable'
;

myint mystring 异常java.io.IOException失败:java.lang.ClassCastException: org.apache.hadoop.hive.ql.io.orc.OrcStruct无法强制转换为org.apache.hadoop.io.Text

JsonSerDe.java

...
import org.apache.hadoop.io.Text;
...

  @Override
  public Object deserialize(Writable blob) throws SerDeException {

    Text t = (Text) blob;
  ...
另一答案

您可以使用某种转换步骤来执行此操作,例如将在目标目录中生成ORC文件并在分组后安装具有相同模式的hive表的分段步骤。如下。

CREATE EXTERNAL TABLE my_fact_orc
(
  mycol STRING,
  mystring INT
)
PARTITIONED BY (dt string)
CLUSTERED BY (some_id) INTO 64 BUCKETS
STORED AS ORC
LOCATION 's3://dev/my_fact_orc'
TBLPROPERTIES ('orc.compress'='SNAPPY');

ALTER TABLE my_fact_orc ADD IF NOT EXISTS PARTITION (dt='2017-09-07') LOCATION 's3://dev/my_fact_orc/dt=2017-09-07';

ALTER TABLE my_fact_orc PARTITION (dt='2017-09-07') SET FILEFORMAT ORC;

SELECT * FROM my_fact_orc WHERE dt='2017-09-07' LIMIT 5;

以上是关于用于ORC或RC格式的Hive Json SerDE的主要内容,如果未能解决你的问题,请参考以下文章

RC ORC Parquet 格式比较和性能测试

Hive ORC File Format

大数据:Hive - ORC 文件存储格式

Databricks 更新表不适用于 orc 格式

使用 ORC 格式的 LZO 压缩

如何在 Hive CDH 中创建 ORC 文件?