2015-02-21 11 views
6

Sono la creazione di un paesaggio demo per Cassandra, Apache Spark e Flume sul mio Mac (Mac OS X Yosemite con Oracle jdk1.7.0_55). Il panorama deve funzionare come prova di concetto per una nuova piattaforma di analisi e quindi ho bisogno di alcuni dati di test nel mio cassandra db. Sto usando la cassandra 2.0.8.COPIA tavolo cassandra da file CSV

ho creato alcuni dati demo in Excel ed esportato che come file CSV. La struttura è come questo:

ProcessUUID;ProcessID;ProcessNumber;ProcessName;ProcessStartTime;ProcessStartTimeUUID;ProcessEndTime;ProcessEndTimeUUID;ProcessStatus;Orderer;VorgangsNummer;VehicleID;FIN;Reference;ReferenceType 
0F0D1498-D149-4FCC-87C9-F12783FDF769;AbmeldungKl‰rfall;1;Abmeldung Kl‰rfall;2011-02-03 04:05+0000;;2011-02-17 04:05+0000;;Finished;SIXT;4278;A-XA 1;WAU2345CX67890876;KLA-BR4278;internal 

Ho quindi creato uno spazio delle chiavi e una famiglia colonna cqlsh utilizzando:

CREATE KEYSPACE dadcargate 
WITH REPLICATAION = { 'class' : 'SimpleStrategy', 'replication_factor' : '1' }; 

use dadcargate; 

CREATE COLUMNFAMILY Process (
    ProcessUUID uuid, ProcessID varchar, ProcessNumber bigint, ProcessName varchar, 
    ProcessStartTime timestamp, ProcessStartTimeUUID timeuuid, ProcessEndTime timestamp, 
    ProcessEndTimeUUID timeuuid, ProcessStatus varchar, Orderer varchar, 
    VorgangsNummer varchar, VehicleID varchar, FIN varchar, Reference varchar, 
    ReferenceType varchar, 
PRIMARY KEY (ProcessUUID)) 
WITH COMMENT='A process is like a bracket around multiple process steps'; 

Il nome della famiglia della colonna e tutte le colonne in esso vengono creati con tutto in minuscolo - sarà devo indagare su questo anche un giorno, ma non è così rilevante al momento.

ora prendo il mio file CSV, che ha circa 1600 voci e da importare che nella mia tabella denominata process come questo:

cqlsh:dadcargate> COPY process (processuuid, processid, processnumber, processname, 
processstarttime, processendtime, processstatus, orderer, vorgangsnummer, vehicleid, 
fin, reference, referencetype) 
FROM 'Process_BulkData.csv' WITH DELIMITER = ';' AND HEADER = TRUE; 

Si dà il seguente errore:

Record #0 (line 1) has the wrong number of fields (15 instead of 13). 
0 rows imported in 0.050 seconds. 

Quale è essenzialmente vero, poiché NON ho i campi timeUUID nel mio cvs-export.

Se provo il comando copia senza colonne-nomi espliciti come questo (dato il fatto, che io in realtà faccio mancare due campi):

cqlsh:dadcargate> COPY process from 'Process_BulkData.csv' 
WITH DELIMITER = ';' AND HEADER = TRUE; 

io alla fine con un altro errore:

Bad Request: Input length = 1 
Aborting import at record #0 (line 1). Previously-inserted values still present. 
0 rows imported in 0.009 seconds. 

Hm. È strano, ma va bene. Forse al comando COPY non piace il fatto che mancano due campi. Penso ancora che questo sia strano, dato che i campi mancanti sono ovviamente lì (da un punto di vista strutturale) ma solo vuoti.

Ho ancora un altro colpo: ho cancellato le colonne mancanti in Excel, esportati di nuovo il file come CVS e tenta di importare SENZA riga di intestazione nel mio csv MA nomi di colonna espliciti, come questo:

cqlsh:dadcargate> COPY process (processuuid, processid, processnumber, processname, 
processstarttime, processendtime, processstatus, orderer, vorgangsnummer, vehicleid, 
fin, reference, referencetype) 
FROM 'Process_BulkData-2.csv' WITH DELIMITER = ';' AND HEADER = TRUE; 

I ottenere questo errore:

Bad Request: Input length = 1 
Aborting import at record #0 (line 1). Previously-inserted values still present. 
0 rows imported in 0.034 seconds. 

Qualcuno può dirmi cosa sto facendo male qui? Secondo lo documentation of copy-command, il modo in cui imposto i miei comandi dovrebbe funzionare per almeno due di essi. O così penserei.

Ma nah, ovviamente mi manca qualcosa di importante qui.

+0

Nel tuo ultimo tentativo, hai detto che non hai incluso una riga di intestazione nel tuo file .csv, ma vedo chiaramente 'AND HEADER = TRUE' nel comando' COPY'. – Aaron

+0

Questo è corretto. Ho cambiato il file (senza intestazione ora) e guardo cosa succede: 'Bad Request: Input length = 1 Importazione annullata al record # 0 (riga 1). Valori precedentemente inseriti ancora presenti. – siliconchris

risposta

13

comando di cqlsh COPY può essere permaloso.Tuttavia, nel COPY documentation è questa linea:

The number of columns in the CSV input is the same as the number of columns in the Cassandra table metadata.

Tenendo questo in mente, sono riuscito a ottenere i dati da importare con un COPY FROM, nominando i campi vuoti (processstarttimeuuid e processendtimeuuid, rispettivamente):

csv
[email protected]:stackoverflow> COPY process (processuuid, processid, processnumber, 
processname, processstarttime, processstarttimeuuid, processendtime, 
processendtimeuuid, processstatus, orderer, vorgangsnummer, vehicleid, fin, reference, 
referencetype) FROM 'Process_BulkData.csv' WITH DELIMITER = ';' AND HEADER = TRUE; 

1 rows imported in 0.018 seconds. 
[email protected]:stackoverflow> SELECT * FROM process ; 

processuuid       | fin    | orderer | processendtime   | processendtimeuuid | processid   | processname  | processnumber | processstarttime   | processstarttimeuuid | processstatus | reference | referencetype | vehicleid | vorgangsnummer 
--------------------------------------+-------------------+---------+---------------------------+--------------------+-------------------+--------------------+---------------+---------------------------+----------------------+---------------+------------+---------------+-----------+---------------- 
0f0d1498-d149-4fcc-87c9-f12783fdf769 | WAU2345CX67890876 | SIXT | 2011-02-16 22:05:00+-0600 |    null | AbmeldungKl‰rfall | Abmeldung Kl‰rfall |    1 | 2011-02-02 22:05:00+-0600 |     null |  Finished | KLA-BR4278 |  internal | A-XA 1 |   4278 

(1 rows) 
+0

Ciao Bryce, grazie per il suggerimento. Sono riuscito a importare i miei dati. Molte grazie. – siliconchris

+0

Nel caso in cui aiuti qualcuno, nota che devi usare le virgolette singole. Se si utilizzano doppi apici attorno al file csv si otterrà un errore di comando di copia improprio. – morpheus

0

Caricamento in tabella cassandra

step1) installare Cassandra loader utilizzando questo URL
sudo wget https://github.com/brianmhess/cassandra-loader/releases/download/v0.0.23/cassandra-loader

Step2) sudo chmod + x cassandra-loader

a) il nome del file CSV è "pt_bms_tkt_success_record_details_new_2016_12_082017-01-0312-30-01.csv"

b) nome spazio delle chiavi è "bms_test"

c) nome della tabella è "pt_bms_tkt_success_record_details_new"

d) colonne sono "trx_id ...... trx_day"

step3) file CSV Locati on e cassandra-loader è "cassandra3.7/bin /"

passo $) [stp @ ril-SRV-sp3 bin] $ ./cassandra-loader -f pt_bms_tkt_success_record_details_new_2016_12_082017-01-0312-30-01.csv -host 192.168.1.29 -schema "bms_test.pt_bms_tkt_success_record_details_new (trx_id, MAX_SEQ, trx_type, trx_record_type, trx_date, trx_show_date, cinema_str_id, session_id, ttype_code, item_id, item_var_sequence, trx_booking_id, venue_name, screen_by_tnum, price_group_code, area_cat_str_code, area_by_tnum, venue_capacity, amount_currentprice, venue_class, trx_booking_status_committed, booking_status, amount_paymentstatus, event_application, venue_cinema_companyname, venue_cinema_name, venue_cinema_type, venue_cinema_application, region_str_code, venue_city_name, sub_region_str_code, sub_region_str_name, EVENT_CODE, event_type, event_name, event_language, event_genre, event_censor_rating, event_release_date, event_producer_code, event_item_na me, event_itemvariable_name, event_quantity, amount_amount, amount_bookingfee, amount_deliveryfee, amount_additionalcharges, amount_final, amount_tax, offer_isapplied, offer_type, OFFER_NAME, offer_amount, payment_lastmode, payment_lastamount, payment_reference1, payment_reference2, payment_bank, customer_loginid, customer_loginstring, offer_referral, customer_mailid, customer_mobile, trans_str_sales_status_at_venue, trans_mny_trans_value_at_venue, payment_ismypayment, click_recordsource, campagna, fonte, parola chiave, medio, venue_multiplex, venue_state, mobile_type, transaction_range, life_cyclestate_from, transactions_after_offer, is_premium_transaction, city_type, holiday_season, week_type, event_popularity, transactionrange_after_discount, showminusbooking, input_source_name, canale, time_stamp, life_cyclestate_to, record_status, week_name, number_of_active_customers, event_genre1, event_genre2, event_genre3, event_genre4, event_language1, event_language2, event_language3, event_language4, event_release_date_range, showminusbooking_range, res erve1, reserve2, reserve3, reserve4, reserve5, payment_mode, payment_type, date_of_first_transaction, transaction_time_in_hours, showtime_in_hours, trx_day) ";