2016-08-05 14 views
2

Ich bin neu bei Big Data und verwandten Technologien, daher bin ich nicht sicher, ob wir Daten an die vorhandene ORC-Datei anhängen können. Ich schreibe die ORC-Datei mit Java API und wenn ich den Writer schließe, kann ich die Datei nicht erneut öffnen, um neuen Inhalt zu schreiben, im Grunde um neue Daten anzuhängen.an ORC-Datei anhängen

Gibt es eine Möglichkeit, Daten an die vorhandene ORC-Datei entweder mit Java API oder Hive oder andere Mittel anhängen?

Eine weitere Klärung, wenn Java util.Date Objekt in ORC-Datei speichern, wird ORC Typ wie gespeichert:

struct<timestamp:struct<fasttime:bigint,cdate:struct<cachedyear:int,cachedfixeddatejan1:bigint,cachedfixeddatenextjan1:bigint>>, 

und für Java BigDecimal ist es:

<margin:struct<intval:struct<signum:int,mag:struct<>,bitcount:int,bitlength:int,lowestsetbit:int,firstnonzerointnum:int> 

Sind diese richtig und gibt es eine Infos dazu?

+0

Wir bieten Ihnen nicht helfen können, wenn Sie nicht Ihren Code – cheseaux

+0

Dank für die Antwort posten, aber ich im Allgemeinen bin gefragt. unterstützen ORC-Dateien den Vorgang append. Ich konnte nirgends verwandte Informationen finden. – rpr

Antwort

1

Nein, Sie können nicht direkt an eine ORC-Datei anhängen. Auch nicht zu einer Parkettdatei. Auch kein Spaltenformat mit einer komplexen internen Struktur mit Metadaten, die mit Daten verschachtelt sind.

die offizielle "Apache Parquet" site Zitiert ...

Metadaten geschrieben, nachdem die Daten für einzigen Durchgang zu schreiben zu ermöglichen.

Dann zitierte die offizielle "Apache ORC" site ...

Da HDFS nicht die Daten in einer Datei ändern unterstützt, nachdem es geschrieben, ORC speichert die Top-Level-Index bei der Ende der Datei (...) Der Schwanz der Datei besteht aus 3 Teilen; die Datei Metadaten, Fußzeile der Datei und Postscript.

Nun, technisch gesehen, heute Sie können zu einer HDFS Datei anhängen; Sie können es sogar abschneiden. Aber diese Tricks sind nur für einige Randfälle nützlich (z. B. Flume, die Nachrichten von Zeit zu Zeit in eine HDFS- "Protokolldatei" im Mikro-Batch-Format mit fflush einspeist).

Für Hive Transaktionsunterstützung verwenden sie einen anderen Trick: bei jeder Transaktion eine neue ORC-Datei erstellen (das heißt Mikro-Charge) mit periodischen Verdichtungsarbeiten im Hintergrund laufen, à la HBase.

2

Ja, das ist möglich durch Hive, in dem Sie neuere Daten grundsätzlich verketten können. Aus Bienenstock offizielle Dokumentation https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions#HiveTransactions-WhatisACIDandwhyshouldyouuseit?

+0

Wenn ich es richtig verstehe, führt es die Zusammenführung mehrerer Dateien durch, aber was ich suche, ist die Option, Daten zu bestehenden Dateien hinzuzufügen, ohne neue Dateien zu erstellen und sie zusammenzuführen. – rpr

+0

hey tut mir leid, ich habe eine falsche URL kopiert. Um Sie glücklich zu machen, finden Sie hier einen Link, der über die Unterstützung von Hive ORC ACID spricht. Es ist derzeit nur für ORC verfügbar. – abhiieor

1

-Update 2017

Ja jetzt können Sie!Hive bietet eine neue Unterstützung für ACID, aber Sie können Daten auf den Tisch anhängen Anfügen-Modus unter Verwendung von mode("append") mit Spark

Im Folgenden ein Beispiel

Seq((10, 20)).toDF("a", "b").write.mode("overwrite").saveAsTable("tab1") 
Seq((20, 30)).toDF("a", "b").write.mode("append").saveAsTable("tab1") 
sql("select * from tab1").show 

Oder eine vollständigere exmple mit ORC here; unter einem Extrakt:

val command = spark.read.format("jdbc").option("url" ....).load() 
command.write.mode("append").format("orc").option("orc.compression","gzip").save("command.orc")