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
Author: mrsrinivas, 2013-07-23

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ć.

 54
Author: Charles Menguy,
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

 78
Author: ashtonium,
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:

  1. główna tabela jest podzielona przez jakiś klucz.
  2. załaduj dane przyrostowe (dane do aktualizacji) do tabeli przejściowej podzielonej tymi samymi kluczami co tabela główna.
  3. 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ż.

 15
Author: Sudeesh Kumar,
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.

 5
Author: user11788,
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

 3
Author: Apaachee,
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.

 2
Author: Devopam Mittra,
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
 2
Author: Kaushik Lele,
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.

 1
Author: zeekvfu,
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;

 1
Author: dilshad,
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

 0
Author: Abid,
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

 0
Author: Rushikesh Garadade,
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

 0
Author: Mufaddal Kamdar,
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