我们希望将.csv文件中的10万行导入Cassandra表。
每行没有唯一值,因此我们要将UUID添加到每个导入的行,我们如何在从CSV文件导入数据时自动执行此操作。
来自.CSV文件的示例行(第一行是列名)
DateTime,Latitude,Longitude,Depth,Magnitude,MagType,NbStations,Gap,Distance,RMS,Source,EventID,Version
2014-09-11T12:36:11.000+00:00,67.689,-162.763,14.6,3.9,ml,,,,0.79,ak,ak11387003,1410441826879
想要将UUID添加到每行,如下所示
UID, DateTime,Latitude,Longitude,Depth,Magnitude,MagType,NbStations,Gap,Distance,RMS,Source,EventID,Version
c37d661d-7e61-49ea-96a5-68c34e83db3a,2014-09-11T12:36:11.000+00:00,67.689,-162.763,14.6,3.9,ml,,,,0.79,ak,ak11387003,1410441826879
答案 0 :(得分:4)
没有办法直接从CQL的COPY command那样做,但你可以先在Cassandra之外处理CSV文件。
例如,这是一个Python脚本,它将从文件in.csv读入,将UUID列附加到每一行,并写出out.csv:
#!/usr/bin/python
# read in.csv adding one column for UUID
import csv
import uuid
fin = open('in.csv', 'rb')
fout = open('out.csv', 'w')
reader = csv.reader(fin, delimiter=',', quotechar='"')
writer = csv.writer(fout, delimiter=',', quotechar='"')
firstrow = True
for row in reader:
if firstrow:
row.append('UUID')
firstrow = False
else:
row.append(uuid.uuid4())
writer.writerow(row)
可以使用CQL COPY导入生成的文件(相应地创建了架构之后)。如果您使用此示例,请务必阅读Python's uuid functions以选择您需要的那个(可能是uuid1
或uuid4
)。