Aşağıdaki gibi dosya yollarında Avro biçiminde Avro biçiminde veri var: /data/logs/[foldername]/[filename].avro
. Tüm bu günlük dosyaları, yani /data/logs/*/*
formunun tüm dosyaları üzerinde bir Hive tablosu oluşturmak istiyorum. (Hepsi aynı Avro şemasına dayalı ediyoruz.)Yuvalanmış alt dizinlerden girdileri içeren kovanı oluştur tablo
Ben bayrağı mapred.input.dir.recursive=true
aşağıda sorguyu çalıştırıyorum: Daha az iç içe olmak LOCATION
değiştirmediğiniz sürece
CREATE EXTERNAL TABLE default.testtable
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'
LOCATION 'hdfs://.../data/*/*'
TBLPROPERTIES (
'avro.schema.url'='hdfs://.../schema.avsc')
tablo boş olmak biter, yani belirli bir kullanıcı adıyla 'hdfs://.../data/[foldername]/'
olmalıdır. Bu, LOCATION
için daha az iç içe geçmiş bir yolla sorun yaratmadı.
Tüm bu farklı [foldername] klasörlerden veri kaynağı oluşturabilmek istiyorum. Yinelemeli giriş seçimini yuvalanmış dizinlerimde daha ileriye nasıl yaparım?
'hive.input.dir.recursive'? 'hive.supports.subdirectories'? Diğer (yanlış) cevaplardan kopyalamışsınız gibi görünüyor. Bazı araştırmalar yapıp –
@Dudu Markovitz test etmeyi öneriyorum. Bunu Hive 1.2.1'de test ettim. Bu harika çalışıyor. Hive alt dizinleri destekler. Belki bu ayarların hepsi gerekli değil, ama bu benim için çalışıyor. – leftjoin
Bu cevabı kendiliğinden kılan gereksiz parametreler değildir, mevcut olmayan parametrelerdir. Ayrıca, varolan olmayan parametrelerin kullanılması, hive 0.14'ten beri, hive.conf.validation' true değerine ayarlandığında istisnalar atar, bu da varsayılan değerdir. https://issues.apache.org/jira/browse/HIVE-7211 –