2015-02-21 28 views
6

Konfiguruję krajobraz demonstracyjny dla Cassandry, Apache Spark i Flume na moim Macu (Mac OS X Yosemite z Oracle jdk1.7.0_55). Krajobraz będzie działał jako dowód koncepcji nowej platformy analitycznej i dlatego potrzebuję pewnych danych testowych w mojej bazie danych Kasandra. Używam kassandra 2.0.8.Skopiuj tabelę kelnera z pliku CSV

Utworzyłem kilka danych demonstracyjnych w programie Excel i wyeksportowałem je jako plik CSV. Konstrukcja jest tak:

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 

Potem stworzył KEYSPACE i rodzinę kolumny w cqlsh używając:

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

Nazwa rodziny kolumnę i wszystkie kolumny w nim są tworzone ze wszystkimi małymi literami - będzie Muszę to również zbadać pewnego dnia, ale w tej chwili nie jest to tak istotne.

Teraz biorę mój plik CSV, który ma około 1600 wpisów i chcesz importować, że w moim stole nazwie process takiego:

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; 

To daje następujący błąd:

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

Która jest zasadniczo prawdziwe, ponieważ NIE mam pól timeUUID w moim eksporcie cvs.

Gdy próbuję polecenie Kopiuj bez wyraźnych kolumn nazw jak to (biorąc pod uwagę fakt, że faktycznie brakuje dwóch pól):

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

I skończyć z innego błędu:

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. Trochę dziwne, ale w porządku. Może polecenie COPY nie podoba się brakowi dwóch pól. Nadal uważam to za dziwne, ponieważ brakujące pola są oczywiście (z punktu widzenia struktury), ale puste.

mam jeszcze kolejną szansę: Usunąłem brakujące kolumny w Excelu, eksportowany plik ponownie jako CVS i próby importowania BEZ wierszu nagłówka w moim csv BUT jednoznacznych nazw kolumn, tak:

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 Otrzymaj ten błąd:

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

Czy ktokolwiek może mi powiedzieć, co robię źle? Zgodnie z documentation of copy-command sposób, w jaki konfiguruję moje polecenia, powinien działać dla co najmniej dwóch z nich. Tak przynajmniej sądzę.

Ale nah, oczywiście brakuje mi czegoś ważnego tutaj.

+0

W swojej ostatniej próbie wspominasz, że nie zawarłeś wiersza nagłówka w pliku .csv, ale wyraźnie widzę "AND HEADER = TRUE" w twoim poleceniu "COPY". – Aaron

+0

To prawda. Zmieniłem plik (teraz nie ma nagłówka) i zobacz, co się stanie: "Złe żądanie: długość wpisu = 1 Przerwanie importu z rekordu # 0 (wiersz 1). Wcześniej wstawione wartości nadal obecne. " – siliconchris

Odpowiedz

13

Komenda cqlsh's COPY może być drażliwa.Jednak w COPY documentation jest ta linia:

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

Mając to na-uwadze, że udało się uzyskać dane do importu z COPY FROM, nazywając puste pola (processstarttimeuuid i processendtimeuuid, odpowiednio):

[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

Cześć Bryce, dzięki za podpowiedź. Udało mi się zaimportować moje dane. Wielkie dzięki. – siliconchris

+0

Jeśli komuś pomaga, pamiętaj, że musisz użyć pojedynczych cudzysłowów. Jeśli użyjesz podwójnego cudzysłowu wokół pliku csv, otrzymasz nieprawidłowy błąd polecenia kopiowania. – morpheus

0

Ładowanie pliku CSV do tabeli Cassandra

etap 1) zainstalować loader Cassandra za pomocą tego adresu URL
sudo wget https://github.com/brianmhess/cassandra-loader/releases/download/v0.0.23/cassandra-loader

Etap 2) sudo chmod + x Cassandro-ładowarki

a) nazwa pliku CSV "pt_bms_tkt_success_record_details_new_2016_12_082017-01-0312-30-01.csv"

b) Nazwa KEYSPACE jest "bms_test"

C) Nazwa tabeli jest "pt_bms_tkt_success_record_details_new"

D) kolumny są "trx_id ...... trx_day"

Etap 3) locati CSV na i Cassandra-ładowarka jest "cassandra3.7/bin /"

krok $) [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 ja 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, kampania, źródło, słowo kluczowe, medium, venue_multiplex, venue_state, mobile_type, transaction_range, life_cyclestate_from, transaction_after_offer, is_premium_transaction, city_type, holiday_season, week_type, event_popularity, transactionrange_after_discount, showminusbooking, input_source_name, kanał, 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) ";