Soru SQL gibi kovan ekleme sorgusu


Kovan için yeni ve SQL'de yaptığımız gibi kovan tablosuna veri eklemek için herhangi bir şey olup olmadığını bilmek istiyorum. Verilerimi kovanıza eklemek istiyorum.

INSERT INTO tablename VALUES (value1,value2..)

Verileri bir dosyadan kovan tabloya yükleyebileceğinizi ya da bir tablodan kovan tablosuna veri aktaracağınızı okudum, ancak verileri SQL'de olduğu gibi eklemenin bir yolu var mı?


44
2017-07-02 12:20


Menşei




Cevaplar:


Buradaki cevapların bir kısmı, 0.15 tarihli Hive ile çıkmış durumda.

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-InsertingvaluesintotablesfromSQL

Aşağıdaki gibi sözdizimi kullanarak eklemek mümkün:

CREATE TABLE students (name VARCHAR(64), age INT, gpa DECIMAL(3, 2));

INSERT INTO TABLE students
  VALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32);

78
2017-07-27 14:55



Bu gerçekten (kabul edilen) cevap olmalıdır. - xenocyon
@mattinbits: Bir sütun için bir dizi oluşturulmuş bir sayı ve bir başka sütun için bir zaman damgası eklemek çalışıyorum. Zaman damgası için, insert ifadesinde "from_unixtime (unix_timestamp ())" ifadesini denedim. "SemanticException [ERROR 10293] var: insert / değerlerde desteklenmeyen TOK_FUNCTION türü ekleme ifadesi için geçici dosya oluşturulamıyor". Sıra numarası üretimini nasıl başarabileceğime dair net bir fikre kapılmıyorum. Her ikisine de nasıl ulaşabileceğime dair bazı bilgiler verebilir misiniz? Hive 1.1.0 kullanıyorum. Teşekkürler. - Marco99
@ Marco99 bunu yeni bir soruyla sormalısın - mattinbits
Zaman ayırdığın için teşekkürler. Birkaç gün önce bir soru sordum. Bağlantıyı şu şekilde bulabilirsiniz: stackoverflow.com/questions/39121524/... - Marco99


Bir tabloya değişmez değerleri eklemek için tablo oluşturma işlevi yığınını kullanabilirsiniz.

İlk önce sadece bir satır içeren bir kukla masasına ihtiyacınız var. Limit yardımı ile üretebilirsiniz.

CREATE TABLE one AS
SELECT 1 AS one
FROM any_table_in_your_database
LIMIT 1;

Artık, şu gibi basit değerler içeren yeni bir tablo oluşturabilirsiniz:

CREATE TABLE my_table AS
SELECT stack(3
  , "row1", 1
  , "row2", 2
  , "row3", 3
) AS (column1, column2)
FROM one
;

Yığın ilk argümanı, oluşturduğunuz satırların sayısıdır.

Mevcut bir tabloya değerler de ekleyebilirsiniz:

INSERT INTO TABLE my_table
SELECT stack(2
  , "row4", 1
  , "row5", 2
) AS (column1, column2)
FROM one
;

16
2017-09-20 08:55





Unique2 önerinin biraz daha iyi bir sürümü aşağıdadır:

insert overwrite table target_table
select * from 
(
select stack(
    3,                 # generating new table with 3 records
    'John', 80,        # record_1
    'Bill', 61         # record_2
    'Martha', 101      # record_3
    ) 
) s;

Önceden çıkmakta olan bir tabloyu kullanarak kesmeyi gerektirmez.


11
2018-03-04 15:34



Seçme yığınının dışına neden bir seçim ifadesi eklemeniz gerekiyor, bu gerekli mi? - ryan


Verileri mevcut bir tabloya kesinlikle ekleyebilirsiniz. (Ama aslında HDFS seviyesinde bir ek değildir). Sadece mevcut bir Hive tablosunda bir LOAD veya INSERT işlemi yaptığınızda OVERWRITE Yeni verileri eski verileri değiştirmeden koyacaktır. Bu tabloya karşılık gelen dizindeki yeni eklenen veriler için yeni bir dosya oluşturulacaktır. Örneğin :

2 satırı olan demo.txt adlı bir dosyam var:

ABC
XYZ

Bir tablo oluşturun ve bu dosyayı içine yükleyin

hive> create table demo(foo string);
hive> load data inpath '/demo.txt' into table demo;

Şimdi, bu tabloda SELECT yaparsam bana verir:

hive> select * from demo;                        
OK    
ABC    
XYZ

Farz edelim, sahip olduğum demo2.txt adlı bir dosyam daha var:

PQR

Ve üzerine yazmadan, bu tabloda tekrar bir LOAD yaparım

hive> load data inpath '/demo2.txt' into table demo;

Şimdi, şimdi bir SELECT yaparsam, bana verir.

hive> select * from demo;                       
OK
ABC
XYZ
PQR

HTH


5
2017-07-03 14:52





Aşağıdaki yaklaşımı kullanabilirsiniz. Bununla birlikte, sırasıyla seçmek ve yüklemek için geçici tablo VEYA txt / csv dosyası oluşturmanız gerekmez.

INSERT INTO TABLE tablename SELECT value1,value2 FROM tempTable_with_atleast_one_records LIMIT 1.

Nerede tempTable_with_atleast_one_records en az bir rekoru olan herhangi bir tablo.

Ancak bu yaklaşımla ilgili problem, aşağıdaki gibi birden fazla satır ekleyen INSERT ifadeniz varsa.

INSERT INTO yourTable values (1 , 'value1') , (2 , 'value2') , (3 , 'value3') ;

Ardından, her satır için ayrı INSERT kovan ifadesine sahip olmanız gerekir. Aşağıya bakınız.

INSERT INTO TABLE yourTable SELECT 1 , 'value1' FROM tempTable_with_atleast_one_records LIMIT 1;
INSERT INTO TABLE yourTable SELECT 2 , 'value2' FROM tempTable_with_atleast_one_records LIMIT 1;
INSERT INTO TABLE yourTable SELECT 3 , 'value3' FROM tempTable_with_atleast_one_records LIMIT 1;

5
2017-11-11 07:09





Hayır bu INSERT INTO tablename VALUES (x,y,z) sözdizimi şu anda Hive'de desteklenmiyor.


3
2017-07-02 12:48



SQL'de yaptığımız gibi tablodaki verileri ekleyebilmem için bir yol var. - Y0gesh Gupta
INSERT INTO tablename SELECT ... desteklenir, böylece yeni verileri geçici bir tabloya koyabilir ve ardından oradan seçerek ekleyebilirsiniz. - Lukas Vermeer
Java istemcisi aracılığıyla kovanda veri eklemek istiyorum, java'da geçici bir veri tablosu oluşturup bir yazmayı ve java istemcimde sorguyu seçmeme çalışır mıyım? - Y0gesh Gupta
Java kullanıyorsanız, neden doğrudan HDFS'ye dosya eklemiyorsunuz? Kovan bu tür şeyler için gerçekten uygun değil. - Lukas Vermeer


Evet, SQL'e benzer bir şekilde ekleyebilirsiniz.

SQL'de satır seviyesi verilerini ekleyebiliriz, ancak burada alanlara (sütunlara) ekleyebilirsiniz.

Bu sırada hedef tablonun ve sorgunun aynı veri türü ve aynı sayıda sütun içermesi gerekir.

Örneğin:

CREATE TABLE test(stu_name STRING,stu_id INT,stu_marks INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

INSERT OVERWRITE TABLE test SELECT lang_name, lang_id, lang_legacy_id FROM export_table;

2
2018-03-04 11:07





Tüm verileri eklemek için table2 içinde table1. Aşağıda bir sorgu var:

INSERT INTO TABLE table1 SELECT * FROM table2; 

2
2017-07-12 09:40





Tek kayıt eklemek için giremezsiniz. Hive tarafından desteklenmiyor. Bir dosyaya eklemek istediğiniz tüm yeni kayıtları yerleştirebilir ve bu dosyayı Hive'daki bir geçici tabloya yükleyebilirsiniz. Sonra üzerine yazmayı kullanın..select komutu bu satırları ana Hive tablonuzun yeni bir bölümüne ekleyin. Buradaki kısıtlama, ana tablonuzun önceden bölümlenmiş olması gerektiğidir. Eğer bölüm kullanmıyorsanız, tüm tablonuz bu yeni kayıtlarla değiştirilecektir.


1
2017-07-03 06:11



Tamamen doğru değil. "INSERT INTO, varolan verileri yerinde tutmak için tabloya veya bölüme ekleyecektir. (Not: INSERT INTO sözdizimi yalnızca 0.8 sürümünden itibaren kullanılabilir." cwiki.apache.org/confluence/display/Hive/... - Lukas Vermeer