IS Est-il possible d'utiliser un serice JSON avec des formats de fichier RC ou ORC? J'essaie d'insérer dans une table Hive avec le format de fichier ORC et de stocker sur blob azur dans JSON sérialisé.Hive Json SerDE pour ORC ou RC Format
2
A
Répondre
1
Apparemment pas
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", "Bonjour"}
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
a échoué avec exception java.io.IOException: java.lang.ClassCastException:
org.apache.hadoop.hive.ql.io.orc.OrcStruct ne peut pas être jeté à org.apache.hadoop.io.Text
...
import org.apache.hadoop.io.Text;
...
@Override
public Object deserialize(Writable blob) throws SerDeException {
Text t = (Text) blob;
...
0
Vous pouvez le faire en utilisant une sorte d'étape de conversion, comme une étape de stockage qui produira des fichiers ORC dans un répertoire cible et montera une table hive avec le même schéma après le stockage. Comme ci-dessous.
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;