HIVE INSERT VAL MET SQL

Ik ben nieuw voor bijenkorf en wil weten of er hoe dan ook gegevens in de hive-tabel in te voegen, zoals wij in SQL. Ik wil mijn gegevens invoegen in korf zoals

INSERT INTO tablename VALUES (value1,value2..)

Ik heb gelezen dat u de gegevens van een bestand naar de hive-tabel kunt laden of u kunt gegevens van de ene tabel naar een hive-tabel importeren, maar is er een manier om de gegevens toe te voegen als in SQL?


Antwoord 1, Autoriteit 100%

Enkele antwoorden hier zijn verouderd vanaf de datum vanaf de bijenkorf 0.14

https://cwiki.apache.org/confluence/display/hive/languagemanual + DML # LanguageManualDML-InsertingValuesintotablesFRomsQL

Het is nu mogelijk om te invoegen met behulp van syntaxis zoals:

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);

Antwoord 2, Autoriteit 18%

U kunt de functie Tabel genereren stackom letterlijke waarden in een tabel in te voegen.

Eerst heb je een dummy tafel nodig die slechts één regel bevat. U kunt het genereren met de hulp van de limiet.

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

Nu kunt u een nieuwe tabel maken met letterlijke waarden zoals deze:

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

Het eerste argument van stackis het aantal rijen dat u genereert.

U kunt ook waarden toevoegen aan een bestaande tabel:

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

Antwoord 3, autoriteit 14%

Een iets betere versie van de unique2-suggestie staat hieronder:

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;

Wat de hack niet vereist bij het gebruik van een reeds bestaande tafel.


Antwoord 4, autoriteit 7%

U kunt de onderstaande aanpak gebruiken. Hiermee hoeft u geen tijdelijke tabel OF txt/csv-bestand te maken om respectievelijk verder te selecteren en te laden.

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

Waar tempTable_with_atleast_one_recordseen tabel is met ten minste één record.

Maar het probleem met deze aanpak is dat If je een INSERT-instructie hebt die meerdere rijen invoegt, zoals hieronder.

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

Vervolgens moet u voor elke rij een afzonderlijke INSERT-componentverklaring hebben. Zie hieronder.

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;

Antwoord 5, autoriteit 5%

Nee. Deze syntaxis van INSERT INTO tablename VALUES (x,y,z)wordt momenteel niet ondersteund in Hive.


Antwoord 6, autoriteit 5%

Je zou zeker gegevens aan een bestaande tabel kunnen toevoegen. (Maar het is eigenlijk geen append op HDFS-niveau). Het is alleen zo dat wanneer u een LOAD- of INSERT-bewerking uitvoert op een bestaande Hive-tabel zonder OVERWRITE-clausule, de nieuwe gegevens worden geplaatst zonder de oude gegevens te vervangen. Er wordt een nieuw bestand gemaakt voor deze nieuw ingevoegde gegevens in de map die overeenkomt met die tabel. Bijvoorbeeld:

Ik heb een bestand met de naam demo.txt met 2 regels:

ABC
XYZ

Maak een tabel en laad dit bestand erin

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

Als ik nu een SELECT doe op deze tafel, krijg ik :

hive> select * from demo;                        
OK    
ABC    
XYZ

Stel dat ik nog een bestand heb met de naam demo2.txt met:

PQR

En ik doe opnieuw een LOAD op deze tafel zonder overschrijven te gebruiken,

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

Als ik nu een SELECT doe, krijg ik,

hive> select * from demo;                       
OK
ABC
XYZ
PQR

HTH


Antwoord 7, autoriteit 3%

Manieren om gegevens in de bijenkorftabel in te voegen:
voor demonstratie gebruik ik de tabelnaam als table1en table2

1) create table table2 as select * from table1 where 1=1;
of
create table table2 as select * from table1;

2) insert overwrite table table2 select * from table1;
–het zal gegevens van de ene naar de andere invoegen. Opmerking: het zal het doel verversen.

3) insert into table table2 select * from table1;
–het zal gegevens van de ene naar de andere invoegen. Opmerking: het wordt toegevoegd aan het doel.

4) load data local inpath 'local_path' overwrite into table table1;
–het laadt gegevens van lokaal in de doeltabel en ververst ook de doeltabel.

5) load data inpath 'hdfs_path' overwrite into table table1;
–het laadt gegevens van de hdfs-locatie en ververst ook de doeltabel.
of

create table table2(
    col1 string,
    col2 string,
    col3 string)
    row format delimited fields terminated by ','
    location 'hdfs_location'; 

6) load data local inpath 'local_path' into table table1;
–het zal gegevens van lokaal laden en ook toevoegen aan de doeltabel.

7) load data inpath 'hdfs_path' into table table1;
–het laadt gegevens van de hdfs-locatie en voegt ze ook toe aan de doeltabel.

8) insert into table2 values('aa','bb','cc');
–Laten we zeggen dat tabel2 slechts 3 kolommen heeft.

9) Meerdere invoegingen in de bijenkorftabel


Antwoord 8, autoriteit 3%

Ja, u kunt invoegen, maar niet zo vergelijkbaar met SQL.

In SQL kunnen we gegevens op rijniveau invoegen, maar hier kunt u velden (kolommen) invoegen.

Tijdens dit moet u ervoor zorgen dat de doeltabel en de query hetzelfde gegevenstype en hetzelfde aantal kolommen hebben.

bijvoorbeeld:

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;

Antwoord 9, autoriteit 3%

Om volledige gegevens van table2in te voegen in table1. Hieronder is een vraag:

INSERT INTO TABLE table1 SELECT * FROM table2; 

Antwoord 10, autoriteit 2%

Het is niet mogelijk om in te voegen in om één record in te voegen. Het wordt niet ondersteund door Hive. U kunt alle nieuwe records die u in een bestand wilt invoegen, plaatsen en dat bestand in een tijdelijke tabel in Hive laden. Gebruik vervolgens de opdracht insert overwrite..select om die rijen in een nieuwe partitie van uw hoofd Hive-tabel in te voegen. De beperking hier is dat uw hoofdtabel vooraf moet worden gepartitioneerd. Als u geen partitie gebruikt, wordt uw hele tabel vervangen door deze nieuwe records.


Antwoord 11, autoriteit 2%

Voer de volgende opdracht in om gegevens in de testlogtabel in te voegen met een bepaalde voorwaarde:

INSERT INTO TABLE testlog SELECT * FROM table1 WHERE some condition;

Antwoord 12

Ik denk in dergelijke scenario’s die u moet gebruiken HBase die zo’n insertie vergemakkelijkt, maar het biedt geen SQL-soort querytaal. U hoeft u JAVA API van HBase te gebruiken zoals de PACT-methode om zo’n insertie te doen. Bovendien is HBase kolomgerichte NO-SQL-database.


Antwoord 13

U kunt nog steeds in het complexe type in bijenkorven invoegen – het werkt
(ID is int, collega’s array)

Invoegen in EMP (ID, collega’s) Selecteer 11, array (‘Alex’, ‘JIAN’) van (selecteer ‘1’)


Antwoord 14

U kunt ook waarden toevoegen aan specifieke kolommen, geef gewoon de kolomnamen op waarin u overeenkomstige waarden wilt toevoegen:

Insert into Table (Col1, Col2, Col4,col5,Col7) Values ('Va11','Va2','Val4','Val5','Val7');

Controleer of de kolommen die u overslaat niet geen null-waarde-type.


Antwoord 15

Ja, we kunnen invoegmodel in bijenkorven gebruiken.

hive> create table test (id int, name string);

Insert : Insert … Waarden zijn beschikbaar vanaf versie 0.14.

hive> insert into table test values (1,'mytest');

Hiermee gaat u werken voor insert. We moeten valuestrefwoord gebruiken.

Opmerking: Gebruiker kan geen gegevens invoegen in een complexe datatype-kolom (array, kaart, struct, union) met behulp van de INSERT INTO...VALUESClausule.


Antwoord 16

Er zijn weinig eigenschappen om in te stellen om een ​​hive-tabel ondersteuningszuur-eigenschappen te maken en om de waarden in tabellen in te voegen, zoals in SQL.

Voorwaarden om een ​​zure tafel in bijenkorven te maken.

  1. De tabel moet worden opgeslagen als ORC-bestand. Voorlopig kan alleen het ORC-formaat ACID-eigenschappen ondersteunen.
  2. De tabel moet een bucket zijn

Eigenschappen die moeten worden ingesteld om de ACID-tabel te maken:

set hive.support.concurrency =true;
set hive.enforce.bucketing =true;
set hive.exec.dynamic.partition.mode =nonstrict
set hive.compactor.initiator.on = true;
set hive.compactor.worker.threads= 1;
set hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;

stel de eigenschap hive.in.test in op true in hive.site.xml

Na het instellen van al deze eigenschappen moet de tabel worden gemaakt met tblproperty ‘transactional’ =’true’. De tabel moet worden gebucket en opgeslagen als orc

CREATE TABLE table_name (col1 int,col2 string, col3 int) CLUSTERED BY col1 INTO 4 
BUCKETS STORED AS orc tblproperties('transactional' ='true');

Het is nu mogelijk om waarden in de tabel in te voegen, zoals een SQL-query.

INSERT INTO TABLE table_name VALUES (1,'a',100),(2,'b',200),(3,'c',300);

Other episodes