Saya baru ke sarang, dan ingin tahu apakah ada pula untuk menyisipkan data ke dalam sarang tabel seperti yang kami lakukan di SQL. Saya ingin memasukkan data saya ke dalam sarang seperti
INSERT INTO tablename VALUES (value1,value2..)
Saya telah membaca bahwa anda dapat memuat data dari file ke sarang meja atau anda dapat mengimpor data dari satu tabel ke sarang meja tapi apakah ada cara untuk menambahkan data di SQL?
Beberapa jawaban berikut ini adalah out of date seperti Sarang 0.14
Sekarang mungkin untuk menyisipkan menggunakan sintaks seperti:
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);
Anda dapat menggunakan tabel fungsi pembangkit stack untuk menyisipkan nilai literal ke dalam tabel.
Pertama, anda perlu dummy tabel yang hanya berisi satu baris. Anda dapat menghasilkan dengan bantuan batas.
CREATE TABLE one AS
SELECT 1 AS one
FROM any_table_in_your_database
LIMIT 1;
Sekarang anda dapat membuat tabel baru dengan nilai literal seperti ini:
CREATE TABLE my_table AS
SELECT stack(3
, "row1", 1
, "row2", 2
, "row3", 3
) AS (column1, column2)
FROM one
;
Argumen pertama dari stack adalah jumlah baris anda menghasilkan.
Anda juga dapat menambahkan nilai ke tabel yang ada:
INSERT INTO TABLE my_table
SELECT stack(2
, "row4", 1
, "row5", 2
) AS (column1, column2)
FROM one
;
Sedikit lebih baik dari versi unique2 saran di bawah ini:
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;
Yang tidak memerlukan hack dengan menggunakan aplikasi yang sudah keluar dari meja.
Anda dapat menggunakan di bawah ini pendekatan. Dengan ini, Anda don't perlu membuat tabel temp ATAU txt/csv file untuk memilih dan beban masing-masing.
INSERT INTO TABLE tablename SELECT value1,value2 FROM tempTable_with_atleast_one_records LIMIT 1.
Dimana tempTable_with_atleast_one_records adalah setiap meja dengan minimal satu record.
Tetapi masalah dengan pendekatan ini adalah bahwa Jika anda memiliki MENYISIPKAN pernyataan yang menyisipkan beberapa baris seperti di bawah satu.
INSERT INTO yourTable values (1 , 'value1') , (2 , 'value2') , (3 , 'value3') ;
Kemudian, Anda perlu untuk memisahkan MENYISIPKAN sarang pernyataan untuk masing-masing baris. Lihat di bawah ini.
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;
Anda pasti bisa menambahkan data ke tabel yang ada. (Tapi hal ini sebenarnya tidak append di HDFS tingkat). It's hanya bahwa setiap kali anda melakukan LOAD atau operasi INSERT pada Sarang yang ada meja tanpa MENIMPA
klausul baru data akan dimasukkan tanpa mengganti data lama. File baru akan dibuat untuk ini baru dimasukkan data dalam direktori yang sesuai dengan tabel tersebut. Misalnya :
Saya memiliki sebuah file yang bernama demo.txt yang memiliki 2 baris :
ABC
XYZ
Membuat tabel dan memuat file ini ke dalamnya
hive> create table demo(foo string);
hive> load data inpath '/demo.txt' into table demo;
Sekarang,jika saya melakukan SELECT pada tabel ini itu'll berikan :
hive> select * from demo;
OK
ABC
XYZ
Misalkan, saya punya satu file bernama demo2.txt yang memiliki :
PQR
Dan saya melakukan LOAD lagi pada tabel ini tanpa menggunakan menimpa,
hive> load data inpath '/demo2.txt' into table demo;
Sekarang, jika saya PILIH sekarang, it'll give me,
hive> select * from demo;
OK
ABC
XYZ
PQR
HTH
Untuk menyisipkan seluruh data table2
di table1
. Berikut adalah query:
INSERT INTO TABLE table1 SELECT * FROM table2;
Ya, anda dapat menyisipkan tapi tidak mirip dengan SQL.
Di SQL kita dapat menyisipkan baris data tingkat, tapi di sini anda dapat menyisipkan oleh bidang (kolom).
Selama ini, anda harus memastikan target tabel dan query harus memiliki datatype sama dan nomor yang sama dari kolom.
misalnya:
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;
Anda dapat't melakukan insert ke dalam untuk menyisipkan record tunggal. It's tidak didukung oleh Sarang. Anda dapat menempatkan semua rekor baru yang ingin anda masukkan dalam file dan memuat file itu ke temp table di Sarang. Kemudian dengan menggunakan insert menimpa..pilih perintah menyisipkan baris ke partisi baru anda Sarang utama tabel. Kendala di sini adalah tabel utama akan harus pra dipartisi. Jika anda don't menggunakan partisi maka seluruh tabel akan diganti dengan data baru.
Cara untuk memasukkan data ke dalam sarang tabel: untuk demonstrasi, saya menggunakan nama tabel sebagai table1 dan table2
membuat tabel table2 seperti select * from table1 where 1=1;
atau
membuat tabel table2 seperti select * from table1;
dengan memasukkan menimpa meja table2 select * from table1;
--itu akan memasukkan data dari satu ke yang lain. Catatan: Hal ini akan menyegarkan target.
insert ke tabel table2 select * from table1;
--itu akan memasukkan data dari satu ke yang lain. Catatan: Hal ini akan menambahkan ke target.
load data local inpath 'local_path' menimpa ke tabel table1;
--itu akan memuat data dari lokal ke dalam tabel target dan juga me-refresh tabel target.
load data inpath 'hdfs_path' menimpa ke tabel table1;
--itu akan memuat data dari hdfs lokasi iand juga me-refresh tabel target.
atau
create table table2(
col1 string,
col2 string,
col3 string)
row format delimited fields terminated by ','
location 'hdfs_location';
load data local inpath 'local_path' ke tabel table1;
--itu akan memuat data dari lokal dan juga menambahkan ke dalam tabel target.
load data inpath 'hdfs_path' ke tabel table1;
--itu akan memuat data dari hdfs lokasi dan juga menambahkan ke dalam tabel target.
insert into table2 values('aa','bb','cc');
--Katakanlah table2 memiliki 3 kolom saja.
Beberapa penyisipan ke sarang meja
Saya pikir dalam skenario seperti ini, anda harus menggunakan HBASE yang memfasilitasi semacam penyisipan tapi itu tidak memberikan SQL jenis query language. Anda perlu menggunakan Java API dari HBASE seperti menempatkan metode untuk melakukan semacam penyisipan. Selain itu HBASE adalah kolom yang berorientasi no-sql database.
Ya kita dapat menggunakan Insert query di sarang.
sarang> create table test (id int, string nama);
INSERT : MASUKKAN...nilai-NILAI ini mulai tersedia dalam versi :Sarang 0.14.
sarang> masukkan ke tabel nilai tes (1,'mytest');
Ini akan bekerja untuk menyisipkan. kita harus menggunakan *nilai *** kata kunci.
Catatan: Pengguna tidak dapat memasukkan data ke dalam kompleks datatype kolom (array, peta, struct, union) menggunakan MASUKKAN KE dalam...nilai-NILAI klausa.**