Hive 用于ORC或RC格式的配置单元Json SerDE

Hive 用于ORC或RC格式的配置单元Json SerDE,hive,hive-serde,Hive,Hive Serde,可以将JSON serde与RC或ORC文件格式一起使用吗?我正在尝试插入一个文件格式为ORC的配置单元表,并以序列化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 str

可以将JSON serde与RC或ORC文件格式一起使用吗?我正在尝试插入一个文件格式为ORC的配置单元表,并以序列化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
{“mycl”:123,“mystring”,“Hello”}

myint mystring
失败,出现异常java.io.IOException:java.lang.ClassCastException:
org.apache.hadoop.hive.ql.io.orc.OrcStruct不能强制转换为org.apache.hadoop.io.Text

:


您可以使用某种转换步骤来实现这一点,比如bucketing步骤,它将在目标目录中生成ORC文件,并在bucketing之后装载具有相同模式的配置单元表。如下图所示

创建外部表my\u fact\u orc
(
麦可尔字符串,
mystring INT
)
分区依据(dt字符串)
由(某些id)聚集到64个存储桶中
储存为兽人
位置's3://dev/my\u fact\u orc'
TBLProperty('orc.compress'='SNAPPY');
更改表my_fact_orc ADD IF NOT EXISTS PARTITION(dt='2017-09-07')LOCATION's3://dev/my_fact_orc/dt=2017-09-07';
更改表my_fact_orc分区(dt='2017-09-07')设置文件格式orc;
从my_fact_orc中选择*,其中dt='2017-09-07'限制5;
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'
;
...
import org.apache.hadoop.io.Text;
...

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

    Text t = (Text) blob;
  ...