从csv文件复制cassandra表

从csv文件复制cassandra表,csv,cassandra,copy,cqlsh,Csv,Cassandra,Copy,Cqlsh,我正在我的Mac上为Cassandra、ApacheSpark和Flume(Mac OS X Yosemite和Oracle jdk1.7.055)建立一个演示环境。该景观将作为一个新的分析平台的概念证明,因此我需要一些测试数据在我的卡桑德拉数据库。我使用的是卡桑德拉2.0.8 我在excel中创建了一些演示数据,并将其导出为CSV文件。结构如下: ProcessUUID;ProcessID;ProcessNumber;ProcessName;ProcessStartTime;ProcessSt

我正在我的Mac上为Cassandra、ApacheSpark和Flume(Mac OS X Yosemite和Oracle jdk1.7.055)建立一个演示环境。该景观将作为一个新的分析平台的概念证明,因此我需要一些测试数据在我的卡桑德拉数据库。我使用的是卡桑德拉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: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;
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;
然后,我使用以下命令在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';
列family name和其中的所有列都是用小写字母创建的-有朝一日也必须对此进行调查,但目前还不太相关

现在,我使用我的CSV文件,它有大约1600个条目,并希望将其导入名为
process
的表中,如下所示:

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: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;
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;
它给出了以下错误:

Record #0 (line 1) has the wrong number of fields (15 instead of 13).
0 rows imported in 0.050 seconds.
这基本上是正确的,因为我的cvs导出中没有timeUUID字段

如果我在没有明确列名的情况下尝试COPY命令,如下图所示(鉴于事实,我确实遗漏了两个字段):

我最后遇到了另一个错误:

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中没有标题行但显式的列名,如下所示:

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: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;
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.
有人能告诉我我做错了什么吗?根据,我设置命令的方式应该至少适用于其中两个命令。或者我会这么想


但是,不,我显然遗漏了一些重要的东西。

cqlsh的
COPY
命令可能很敏感。然而,在这一行中:

CSV输入中的列数与Cassandra表元数据中的列数相同

记住这一点,我确实通过命名空字段(
processstarttimeuuid
processendtimeuuid
)从
获得了导入数据的
副本:


将csv文件加载到cassandra表中

步骤1)使用此url安装cassandra loader
sudo wget

步骤2)sudo chmod+x卡桑德拉装载机

a) csv文件名为“pt_bms_tkt_成功_记录_详情_新_2016_12_082017-01-0312-30-01.csv”

b) 键空间名称为“bms_测试”

c) 表名为“pt\U bms\U tkt\U成功记录\U详细信息\U新”

d) 列为“trx\U id……trx\U日”

步骤3)csv文件位置和cassandra加载程序为“cassandra3.7/bin/”


步骤$)[stp@ril-srv-sp3 bin]$。/cassandra loader-f pt_bms_tkt_success_record_details_new_2016_12_082017-01-0312-30-01.csv-主机192.168.1.29-模式“bms_test.pt_bms_tkt_success_record_details_new”(trx_id、max_seq、trx_type、trx_record_type、trx_date、trx_show_date、电影院stru id、session_id、ttype_code、item_id、item_var_sequence、trx_booking_id、场馆名称、屏幕名称、价格组代码、区域类别代码、区域代码、区域编号、区域编号、区域编号、场馆容量、金额、当前价格、场馆等级、trx_预订状态、预订金额、活动状态、付款状态电子影院公司名称、场馆影院名称、场馆影院类型、场馆影院应用、地区影院代码、场馆城市名称、子地区影院代码、子地区影院名称、事件代码、事件类型、事件名称、事件语言、事件类型、事件类型、事件类型、事件审查员评分、事件发布日期、事件制作人代码、事件项目名称、事件项目变量名称、事件数量、金额、金额_预订费、金额交付费、金额附加费、金额最终版、金额税、优惠申请、优惠类型、优惠名称、优惠金额、付款方式、付款方式最后金额、付款参考1、付款参考2、付款银行、客户登录、优惠转介、客户邮箱、客户手机、交易地点销售状态_场馆价值、付款即付款、点击记录来源、活动、来源、关键字、媒体、场馆多元化、场馆状态、移动类型、交易范围、生命周期地产来源、交易后报价、是优质交易、城市类型、假日季节、周型、活动流行度、折扣后交易范围、showminusbooking、输入来源名称、渠道、时间p、 生命周期状态、记录状态、周名称、活跃客户数量、事件类型1、事件类型2、事件类型3、事件类型4、事件语言1、事件语言2、事件语言2、事件语言3、事件语言4、事件语言4、事件发布日期范围、ShowMinsBooking范围、reserve1、reserve2、reserve3、reserve4、reserve5、支付模式、付款类型、首次交易日期、交易时间_在上次尝试中,您提到您的.csv文件中没有包含标题行,但我在您的
COPY
命令中清楚地看到了
和header=TRUE
。这是正确的。我更改了文件(现在没有标题)看看,会发生什么:
错误请求:输入长度=1在记录#0处中止导入(第1行)。以前插入的值仍然存在。
Hi Bryce,感谢您的提示。我确实成功导入了数据。非常感谢。如果这对某人有帮助,请注意,您必须使用单引号。如果在csv文件周围使用双引号,您将收到不正确的复制命令错误。