2015-05-29 16 views
5

Używam HDInsight i muszę usunąć moje klastry po zakończeniu kwerend. Jednak potrzebuję zebranych danych, aby przetrwać kolejny dzień. Pracuję nad zapytaniami, które tworzyłyby kolumny obliczeniowe z tabeli1 i wstawiały je do tabeli2. Najpierw chciałem prosty test, aby skopiować wiersze. Czy możesz utworzyć zewnętrzną tabelę za pomocą instrukcji select?Utwórz zewnętrzną tabelę z wyborem z innej tabeli

drop table if exists table2; 

create external table table2 as 
select * 
from table1 
STORED AS TEXTFILE LOCATION 'wasb://{container name}@{storage name}.blob.core.windows.net/'; 

Odpowiedz

4

tak, ale musisz oddzielić go na dwa polecenia. Najpierw utwórz zewnętrzny stół, a następnie wypełnij go.

create external table table2(attribute STRING) 
STORED AS TEXTFILE 
LOCATION 'table2'; 

INSERT OVERWRITE TABLE table2 Select * from table1; 

Schemat Table2 musi być taka sama jak kwerendy wybierającej, w tym przypadku składa się tylko z jednego atrybutu strun.

+0

Zarzuca z RMR: Nie można przenieść "wasb: // {nazwa pojemnik} @ {nazwa} .blob.core.windows.net pamięci /" do kosza, ponieważ zawiera śmieci. Rozważ użycie opcji -skipTrash – Roger

+0

gdzie ustawiasz -skipTrash? – Roger

+0

To był [błąd] (https://issues.apache.org/jira/browse/HIVE-6469), ale teraz należy go naprawić za pomocą polecenia PURGE, ponieważ ul 0.14 [WYPEŁNIJ] (https: // cwiki .apache.org/confluence/display/Hive/LanguageManual + DDL # LanguageManualDDL-DropTable) – FtoTheZ

0

Wiem, że to zbyt stare pytanie, ale tutaj jest rozwiązanie.

CREATE EXTERNAL TABLE table2 
STORED AS textfile 
LOCATION wasb://.... 
AS SELECT * FROM table1 
Powiązane problemy