Mam kilka dzienników serwera WWW, które chciałbym wysłać do Hive. Struktura katalogów, w HDFS, wygląda następująco:Czy Hive może rekurencyjnie zejść do podkatalogów bez partycji lub edytować plik hive-site.xml?
/data/access/web1/2014/09
/data/access/web1/2014/09/access-20140901.log
[... etc ...]
/data/access/web1/2014/10
/data/access/web1/2014/10/access-20141001.log
[... etc ...]
/data/access/web2/2014/09
/data/access/web2/2014/09/access-20140901.log
[... etc ...]
/data/access/web2/2014/10
/data/access/web2/2014/10/access-20141001.log
[... etc ...]
jestem w stanie utworzyć tabelę zewnętrzne:
CREATE EXTERNAL TABLE access(
host STRING,
identity STRING,
user STRING,
time STRING,
request STRING,
status STRING,
size STRING,
referer STRING,
agent STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\"[^\"]*\") ([^ \"]*|\"[^\"]*\"))?",
"output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s")
LOCATION '/data/access/'
... choć Hive nie zejść do podfolderów chyba biegnę następujące polecenia przed uruchomieniem kwerendy Hive:
set hive.input.dir.recursive=true;
set hive.mapred.supports.subdirectories=true;
set hive.supports.subdirectories=true;
set mapred.input.dir.recursive=true;
widziałem innych stanowisk ustawić te właściwości na poziomie tabeli (np Issue creating Hive External table using tblproperties):
TBLPROPERTIES ("hive.input.dir.recursive" = "TRUE",
"hive.mapred.supports.subdirectories" = "TRUE",
"hive.supports.subdirectories" = "TRUE",
"mapred.input.dir.recursive" = "TRUE");
Niestety, nie zadziałało to dla mnie: tabela nie zwraca żadnych rekordów, gdy go odpytuję. Rozumiem, że możliwe jest ustawienie tych właściwości w pliku hive-site.xml, ale wolę nie wprowadzać żadnych zmian, które mogłyby wpłynąć na innych użytkowników, jeśli nie będę tego potrzebować.
Q) Czy istnieje sposób utworzenia tabeli, która zstępuje do podkatalogów bez używania partycji, wprowadzania zmian w całym serwisie lub uruchamiania tych 4 poleceń za każdym razem?
można umieścić te polecenia 4 w .hiverc CLI przy wywołaniu bez opcji -i będzie próbował załadować HIVE_HOME/bin/.hiverc i $ HOME /. hiverc jako pliki inicjujące. – user3484461