2016-04-01 18 views
1

Impala/kovanda kullanmamız ve ayırmamız gereken bir JSON yapımız var. JSON yapısı geliştikçe Avro'yu kullanabileceğimizi düşündük.Impala/hive storage için gelişen avro şemasını kullanma

JSON'u ayrıştırmayı ve bunu avro olarak biçimlendirmeyi planladık.

Avro biçimlendirilmiş veriler doğrudan impala tarafından kullanılabilir. Biz HDF'ler dizinde /user/HDF'ler saklayın Diyelim/person_data/

Biz o klasördeki avro tefrika verileri koyarak tutacak ve biz birer giriş json bir ayrıştırma edilecektir. Biz oluşturarak kovanında tablo yaratacak Bunun için

{ 
"type": "record", 
"namespace": "avro", 
"name": "PersonInfo", 
"fields": [ 
    { "name": "first", "type": "string" }, 
    { "name": "last", "type": "string" }, 
    { "name": "age", "type": "int" } 
] 
} 

gibi: (//user/hdfs/avro/scheams/person.avsc HDF'ler)

biz kişi için avro şema dosyası var, Sağlar ki

{ 
"type": "record", 
"namespace": "avro", 
"name": "PersonInfo", 
"fields": [ 
    { "name": "first", "type": "string" }, 
    { "name": "last", "type": "string" }, 
    { "name": "age", "type": "int" }, 
    { "name": "city", "type": "string" } 
] 
} 
- için: - dış tablo

CREATE TABLE kst 
    ROW FORMAT SERDE 
    'org.apache.hadoop.hive.serde2.avro.AvroSerDe' 
    STORED AS INPUTFORMAT 
    'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' 
    OUTPUTFORMAT 
    'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' 
    TBLPROPERTIES (
    'avro.schema.url'='hdfs://user/hdfs/avro/scheams/person.avsc'); 

bu şemayı (//user/hdfs/avro/scheams/person.avsc HDF'ler) değiştirmeniz gerekir yarın Diyelim

Yeni seriliazed verileri aynı HDFS dizininde/kullanıcı/hdfs/person_data/dizininde tutmaya devam edebilir miyiz ve impala/hive, NULL değerli eski kayıtlar olarak şehir sütununu vererek çalışmaya devam edebilir mi?

cevap

1

Evet, ama tüm yeni sütunlar için varsayılan bir değer belirtmek gerekir edebilirsiniz:

{ "name": "newField", "type": "int", "default":999 } 

veya null olarak işaretleyin:

{ "name": "newField", "type": ["null", "int"] } 
İlgili konular