Копировать таблицу cassandra из файла CSV

Я устанавливаю демонстрационный ландшафт для Cassandra, Apache Spark и Flume на моем Mac (Mac OS X Yosemite с Oracle jdk1.7.0_55). Ландшафт должен служить доказательством концепции для новой аналитической платформы, и поэтому мне нужны некоторые тестовые данные в моей базе данных cassandra. Я использую кассандру 2.0.8.

Я создал некоторые демонстрационные данные в Excel и экспортировал их в виде файла CSV. Структура выглядит так:

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

Затем я создал пространство ключей и семейство столбцов в cqlsh, используя:

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

Фамильное имя столбца и все столбцы в нем создаются со всеми строчными буквами - когда-нибудь придется это выяснить, но в данный момент это не так важно.

Теперь я беру свой CSV-файл, который содержит около 1600 записей и хочу импортировать его в мою таблицу с именемprocess как это:

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;

Это дает следующую ошибку:

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

Что по существу верно, поскольку у меня нет полей timeUUID в моем cvs-export.

Если я попробую команду COPY без явных имен столбцов, как это (учитывая тот факт, что я действительно пропускаю два поля):

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

Я заканчиваю с другой ошибкой:

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

Гектометр Вроде странно, но ладно. Возможно, команде COPY не нравится тот факт, что пропущены два поля. Я все еще думаю, что это странно, поскольку отсутствующие поля, конечно, есть (со структурной точки зрения), но только пустые.

У меня все еще есть еще один снимок: я удалил отсутствующие столбцы в Excel, снова экспортировал файл в виде cvs и попытался импортировать БЕЗ строки заголовка в мои явные имена столбцов csv НО, например:

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;

Я получаю эту ошибку:

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

Кто-нибудь может сказать мне, что я здесь делаю неправильно? Согласнодокументация команды копированияТо, как я настраиваю свои команды, должно работать как минимум для двух из них. Или я бы так подумал.

Но нет, я явно упускаю что-то важное здесь.

Ответы на вопрос(2)

Ваш ответ на вопрос