用于 ORC 或 RC 格式的 Hive Json SerDE
Posted
技术标签:
【中文标题】用于 ORC 或 RC 格式的 Hive Json SerDE【英文标题】:Hive Json SerDE for ORC or RC Format 【发布时间】:2017-04-05 01:54:06 【问题描述】:是否可以使用带有 RC 或 ORC 文件格式的 JSON serde?我正在尝试使用文件格式 ORC 插入 Hive 表并以序列化 JSON 的形式存储在 azure blob 中。
【问题讨论】:
【参考方案1】:好像没有
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
;
推荐 "mycol":123,"mystring","Hello"
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 我的字符串 失败并出现异常 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;
...
【讨论】:
【参考方案2】:您可以使用某种转换步骤来执行此操作,例如分桶步骤,该步骤将在目标目录中生成 ORC 文件,并在分桶后安装具有相同架构的配置单元表。如下所示。
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的主要内容,如果未能解决你的问题,请参考以下文章