Jak usunąć i zaktualizować rekord w ulu
Zainstalowałem Hadoop, Hive, Hive JD BC. które mi pasują. Ale nadal mam problem. Jak usunąć lub zaktualizować pojedynczy rekord używając Hive ponieważ polecenie delete lub update MySQL nie działa w hive.
Thanks
hive> delete from student where id=1;
Usage: delete [FILE|JAR|ARCHIVE] <value> [<value>]*
Query returned non-zero code: 1, cause: null
12 answers
Nie powinieneś myśleć o Hive jako o zwykłym RDBMS, Hive lepiej nadaje się do przetwarzania wsadowego na bardzo dużych zestawach niezmiennych danych.
Poniższe odnosi się do wersji sprzed Hive 0.14, zobacz odpowiedź @ashtonium dla późniejszych wersji.
Nie ma obsługiwanej operacji usuwania lub aktualizacji określonego rekordu lub określonego zestawu rekordów, a dla mnie jest to raczej oznaka słabego schematu.
Oto co znajdziecie w oficjalnym dokumentacja :
Hadoop is a batch processing system and Hadoop jobs tend to have high latency and
incur substantial overheads in job submission and scheduling. As a result -
latency for Hive queries is generally very high (minutes) even when data sets
involved are very small (say a few hundred megabytes). As a result it cannot be
compared with systems such as Oracle where analyses are conducted on a
significantly smaller amount of data but the analyses proceed much more
iteratively with the response times between iterations being less than a few
minutes. Hive aims to provide acceptable (but not optimal) latency for
interactive data browsing, queries over small data sets or test queries.
Hive is not designed for online transaction processing and does not offer
real-time queries and row level updates. It is best used for batch jobs over
large sets of immutable data (like web logs).
Sposobem obejścia tego ograniczenia jest użycie partycji: Nie wiem, co odpowiada ci id , ale jeśli dostajesz różne partie identyfikatorów osobno, możesz przeprojektować tabelę tak, aby była podzielona na partycje id, a następnie będziesz mógł łatwo upuścić partycje dla identyfikatorów, których chcesz się pozbyć.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-08 11:43:07
Od wersji Hive 0.14.0: INSERT...Wartości, aktualizacja i usuwanie są teraz dostępne z pełną obsługą ACID.
INSERT ... Składnia wartości:
INSERT INTO TABLE tablename [PARTITION (partcol1[=val1], partcol2[=val2] ...)] VALUES values_row [, values_row ...]
Gdzie values_row jest: (wartość [, wartość ...] ) gdzie wartość jest albo null lub dowolny poprawny literał SQL
Składnia aktualizacji:
UPDATE tablename SET column = value [, column = value ...] [WHERE expression]
Usuń składnię:
DELETE FROM tablename [WHERE expression]
Dodatkowo, z transakcji Ula doc:
Jeśli tabela ma być używana w Acid writes (insert, update, delete) to tabela właściwość "transactional" musi być ustawiona na tej tabeli, począwszy od Hive 0.14.0. Bez tej wartości wstawianie będzie wykonywane w starym stylu; aktualizacje i usuwanie będą zabronione.
Ul DML reference:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML
odniesienie do transakcji Hive:
https://cwiki.apache.org/confluence/display/Hive/Hive + transakcje
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-03 13:58:20
Tak, słusznie powiedziane. Hive nie obsługuje opcji aktualizacji. Można jednak użyć następującej alternatywy, aby osiągnąć wynik:
Update records in a partitioned Hive table
:
- główna tabela jest podzielona przez jakiś klucz.
- załaduj dane przyrostowe (dane do aktualizacji) do tabeli przejściowej podzielonej tymi samymi kluczami co tabela główna.
- połącz dwie tabele (main & staging tables ) używając operacji LEFT OUTER JOIN jako poniżej:
Insert overwrite table main_table partition (c, d) wybierz t2.a, t2.b, t2.c, t2.d od staging_table t2 lewy zewnętrzny join main_table t1 na t1.a = t2.a;
W powyższym przykładzie, tabela main_table i tabela staging_table są podzielone za pomocą klawiszy (c, d). Tabele są łączone za pomocą lewego zewnętrznego łącznika, a wynik jest używany do nadpisania partycji w tabeli głównej.
Podobne podejście można by zastosować w przypadkuun-partitioned Hive table
Aktualizacja szef też.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-10 06:03:40
Możesz usunąć wiersze z tabeli za pomocą obejścia, w którym zastępujesz tabelę przez zbiór danych, który chcesz pozostawić w tabeli w wyniku operacji.
insert overwrite table your_table
select * from your_table
where id <> 1
;
Obejście jest przydatne głównie w przypadku masowego usuwania łatwo rozpoznawalnych wierszy. Ponadto, oczywiście robi to może zepsuć swoje dane, więc kopia zapasowa tabeli jest doradzane i opieki przy planowaniu reguły "usunięcia" również doradzane.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-30 10:08:34
CLI powiedział ci, gdzie jest twój błąd: delete WHAT? from student
...
Delete: Jak usunąć/obcinać tabele z Hadoop-Hive?
Update: Update, ustaw opcję w ulu
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:18
Nadchodząca wersja Hive pozwoli na obsługę aktualizacji/usuwania w oparciu o Zestaw, co jest niezwykle ważne podczas próby wykonywania operacji CRUD na' grupce ' wierszy zamiast wykonywania jednego wiersza na raz.
W międzyczasie wypróbowałem dynamiczne podejście oparte na partycji udokumentowane tutaj http://linkd.in/1Fq3wdb .
Sprawdź, czy pasuje do Twoich potrzeb.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-09 03:59:34
Jeśli chcesz usunąć wszystkie rekordy, to jako obejście załaduj pusty plik do tabeli w trybie nadpisania
hive> LOAD DATA LOCAL INPATH '/root/hadoop/textfiles/empty.txt' OVERWRITE INTO TABLE employee;
Loading data to table default.employee
Table default.employee stats: [numFiles=1, numRows=0, totalSize=0, rawDataSize=0]
OK
Time taken: 0.19 seconds
hive> SELECT * FROM employee;
OK
Time taken: 0.052 seconds
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-25 12:53:40
UPDATE
LUB DELETE
zapis nie jest dozwolony w ulu, ale INSERT INTO
jest akceptowalny.
Fragment z Hadoop: the Definitive Guide (3rd edition):
Aktualizacje, transakcje i indeksy są podstawą tradycyjnych baz danych. Jeszcze do niedawna te funkcje nie były uważane za część zestawu funkcji Hive. Dzieje się tak dlatego, że Hive został zbudowany do pracy nad danymi HDFS przy użyciu MapReduce, gdzie skanowanie pełnej tabeli jest normą, a aktualizacja tabeli jest osiągana przez przekształcenie dane do nowej tabeli. W przypadku aplikacji do hurtowni danych, która działa na dużych porcjach zbioru danych, działa to dobrze.Hive nie obsługuje aktualizacji (lub usuwa), ale obsługuje wstawianie do, więc możliwe jest dodawanie nowych wierszy do istniejącej tabeli.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-12 09:35:41
Wartości konfiguracyjne do Ustawienia dla INSERT, UPDATE, DELETE Oprócz nowych parametrów wymienionych powyżej, niektóre istniejące parametry muszą być ustawione na support INSERT ... Wartości, Aktualizuj i usuwaj.
Klucz konfiguracji Musi być ustawione na
hive.support.concurrency true (default is false)
hive.enforce.bucketing true (default is false) (Not required as of Hive 2.0)
hive.exec.dynamic.partition.mode nonstrict (default is strict)
Wartości konfiguracyjne do Ustawienia dla zagęszczania
Jeśli dane w Twoim systemie nie są własnością użytkownika Hive (tzn. użytkownika, jako którego działa Hive metastore), Hive będzie potrzebował uprawnień do uruchomienia jako użytkownik, który jest właścicielem danych w celu wykonywania zwarć. Jeśli już skonfigurowałeś HiveServer2 do podszywania się pod użytkowników, to jedyną dodatkową pracą do zrobienia jest upewnienie się, że Hive ma prawo podszywać się pod użytkowników z hosta uruchamiającego przerzut Hive ' a. Odbywa się to poprzez dodanie nazwy hosta do hadoop.proxyuser.hive.hosty w bazie Hadoop.plik xml. Jeśli jeszcze tego nie zrobiłeś, musisz skonfigurować Hive, aby działał jako użytkownik proxy. Wymaga to skonfigurowania tabel kluczy dla użytkownika uruchamiam Ul metastore i dodaję hadoop.proxyuser.hive.gospodarze i hadoop.proxyuser.hive.grupy do bazy Hadoop.plik xml. Zobacz dokumentację Hadoop dotyczącą trybu bezpiecznego dla twojej wersji Hadoop (np. dla Hadoop 2.5.1 jest to Hadoop w trybie bezpiecznym).
Instrukcja UPDATE ma następujące ograniczenia:
Wyrażenie w klauzuli WHERE musi być wyrażeniem obsługiwanym przez klauzulę Hive SELECT.
Przegrody i kolumny kubełkowe nie mogą być aktualizacja.
Wektoryzacja zapytania jest automatycznie wyłączana dla instrukcji aktualizacji. Jednak zaktualizowane tabele nadal można odpytywać za pomocą wektoryzacji.
Zapytania podrzędne nie są dozwolone po prawej stronie instrukcji SET.
Poniższy przykład pokazuje poprawne użycie tego wyrażenia:
UPDATE students SET name = null WHERE gpa <= 1.0;
DELETE Statement
Użyj polecenia DELETE, aby usunąć dane już zapisane do ula Apache.
DELETE FROM tablename [WHERE expression];
Usuń oświadczenie ma następujące ograniczenie: wektoryzacja zapytań jest automatycznie wyłączana dla operacji usuwania. Jednak tabele z usuniętymi danymi mogą być nadal odpytywane za pomocą wektoryzacji.
Poniższy przykład pokazuje poprawne użycie tego wyrażenia:
DELETE FROM students WHERE gpa <= 1,0;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-28 09:54:33
Delete został ostatnio dodany w Hive w wersji 0.14 Usuwanie może być wykonywane tylko na tabelach obsługujących kwas Poniżej link z Apache .
Https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-Delete
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-29 06:23:35
Aby osiągnąć aktualną potrzebę, musisz odpalić poniżej zapytania
> insert overwrite table student
> select *from student
> where id <> 1;
Spowoduje usunięcie bieżącej tabeli i utworzenie nowej tabeli o tej samej nazwie ze wszystkimi wierszami z wyjątkiem wierszy, które chcesz wykluczyć / usunąć
Próbowałem tego na Hive 1.2.1
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-25 06:40:16
Dobra wiadomość, Wstawianie aktualizacji i usuwania są teraz możliwe na Hive / Impala przy użyciu Kudu.
Musisz użyć IMPALA / kudu, aby utrzymać tabele i wykonać insert/update/delete records. Szczegóły wraz z przykładami można znaleźć tutaj: insert-update-delete-on-hadoop
Proszę podzielić się wiadomością, jeśli jesteś podekscytowany.
- MIK
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-08 09:21:34