I externe Tabelle erstellt wie folgt ...Mit Funken/scala, verwende ich saveAsTextFile() auf HDFS, aber hiveql ("select count (*) from ...) return 0
hive -e "create external table temp_db.temp_table (a char(10), b int) PARTITIONED BY (PART_DATE VARCHAR(10)) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE LOCATION '/work/temp_db/temp_table'"
Und ich saveAsTextFile() mit scala in IDEA IntelliJ wie folgt ...
itemsRdd.map(_.makeTsv).saveAsTextFile("hdfs://work/temp_db/temp_table/2016/07/19")
so ist die Datei (Felder beendet durch '\ t') war in der
/work/temp_db/temp_table/2016/07/19. hadoop fs -ls /work/temp_db/temp_table/2016/07/19/part-00000 <- data file..
Aber, ich habe mit hiveql überprüft, gibt es keine Daten wie folgt.
hive -e "select count(*) from temp_db.temp_table" -> 0. hive -e "select * from temp_db.temp_table limit 5" -> 0 rows fetched.
Hilf mir, was zu tun ist. Vielen Dank.
Antwort
Sie sparen an falscher Stelle von Funken. Der Name des Partitionsziels folgt part_col_name=part_value
.
In Funken: Datei speichern im Verzeichnis part_date=2016%2F07%2F19
unter temp_table
dir
itemsRdd.map(_.makeTsv)
.saveAsTextFile("hdfs://work/temp_db/temp_table/part_date=2016%2F07%2F19")
Partitionen hinzufügen: Sie müssen Partition hinzufügen, die hive Tabelle Metadaten (Partition dir aktualisieren sollten wir von Funken als hive erstellt haben erwartet key=value
Format)
alter table temp_table add partition (PART_DATE='2016/07/19');
[[email protected] ~]$ hadoop fs -ls /user/hive/warehouse/temp_table/part*|awk '{print $NF}'
/user/hive/warehouse/temp_table/part_date=2016%2F07%2F19/part-00000
/user/hive/warehouse/temp_table/part_date=2016-07-19/part-00000
Abfrage partitioniert Daten:
hive> alter table temp_table add partition (PART_DATE='2016/07/19');
OK
Time taken: 0.16 seconds
hive> select * from temp_table where PART_DATE='2016/07/19';
OK
test1 123 2016/07/19
Time taken: 0.219 seconds, Fetched: 1 row(s)
hive> select * from temp_table;
OK
test1 123 2016/07/19
test1 123 2016-07-19
Time taken: 0.199 seconds, Fetched: 2 row(s)
Für Jeden Tag Prozess: Sie saprk Job wie das laufen kann - nur Partitionen hinzufügen, direkt nach saveAsTextFile()
, die s
in alter
Anweisung aslo zu beachten. es ist müssen Variable in hive sql von Funken weitergeben müssen:
val format = new java.text.SimpleDateFormat("yyyy/MM/dd")
vat date = format.format(new java.util.Date())
itemsRDD.saveAsTextFile("/user/hive/warehouse/temp_table/part=$date")
val hive = new HiveContext(sc)
hive.sql(s"alter table temp_table add partition (PART_DATE='$date')")
HINWEIS: Partition hinzufügen, nachdem die Datei oder sonst Funkenspar wird werfen Verzeichnis bereits existieren Ausnahme als hive dir erzeugt (falls nicht vorhanden), wenn Partition hinzufügen.
- 1. JPA - MAX von COUNT oder SELECT FROM SELECT
- 2. SELECT SUM() FROM (SELECT (SELECT())
- 3. Mysql Mit sum = 0 return 0 Zeilen
- 4. return count (*) Wert in SQL mit Java
- 5. Abfrage - SELECT BOX, COUNT (*) FROM Tabelle WHERE GROUP BY
- 6. Wie verwende ich HDFS mit EMR?
- 7. SQL-Aggregat count = 0
- 8. SQL SELECT FROM ... AS mit Datentypspezifizierer?
- 9. FROM SELECT avg avg SELECT
- 10. $ rownum = mysqli_num_rows ($ result); return 0 aber muss 1 zurückgeben
- 11. Lehre select count wenn
- 12. sql query "select * from table" funktioniert nicht
- 13. Mysql Select Abfrage mit count
- 14. MySQL Select Count auf VARCHAR in PERL
- 15. SELECT count (*) mit OR-Operator
- 16. SELECT * FROM in MySQLi
- 17. MySQL SELECT COUNT> 0 als boolescher Wert
- 18. MySQL SELECT COUNT überlappende
- 19. SELECT COUNT() oder SELECT * Optimierung
- 20. SELECT Beliebige FROM-System
- 21. SQL select count distinct
- 22. SELECT COUNT (*) SQL SERVER
- 23. SELECT innerhalb eines COUNT
- 24. Android SQLite Cursor außerhalb der Grenzen Ausnahme auf SELECT COUNT (*) FROM Tabelle
- 25. Schienen COUNT SELECT DISTINCT
- 26. mysql String-Konvertierung return 0
- 27. * SELECT COUNT (*) in SQLite
- 28. SQL SELECT QUERY COUNT
- 29. SELECT * FROM und mysqli_fetch_array mit vorbereiteten Anweisungen
- 30. exit (0) vs return 0
Vielen Dank !!! Ich plane hdfs Verzeichnis zu verwalten, wie folgt ... ".../temp_table/2016/07/19" " .../temp_table/2016/07/20" ... ... So ... Soll ich jeden Tag die Klausel "alter table temp_table add partition (part_date = ....)" anweisen? – minsu
Und ... Ich möchte den Namen "part_date" verstecken. Also, ich möchte ... ".../temp_table/2016/07/19" (Jahre/Monate/Tage, jedes Verzeichnis), Nicht ".../temp_table/part_date = 2016% 2F07% 2F19" . Danke !! – minsu
für die tägliche Belastung können Sie Funken Job erstellen (siehe aktualisierte Antwort). zum Umbenennen des Partitionsverzeichnisses benutzen Sie den unteren Befehl, aber das ist meistens um den Partitionswert zu ändern NICHT den Schlüssel aus dem Verzeichnisnamen zu entfernen - es wird die Metadaten des Stockwerks durcheinander bringen - Ich rate dringend, es NICHT zu experimentieren!Ich weiß, es wird nie funktionieren, aber hier ist ein Befehl - 'ALTER TABLE Tabellenname [Partition Partition_Spec] SET LOCATION" neue Position ";' –