cassandra - 为从 CSV 文件导入的每一行添加 UUID

标签 cassandra nosql

我们想将 10 万行从 .csv 文件导入到 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

最佳答案

无法直接从 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选择您需要的那个(可能是 uuid1uuid4)。

关于cassandra - 为从 CSV 文件导入的每一行添加 UUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25799756/

相关文章:

string - 查询 CQL 中的子字符串

apache-spark - Spark Cassandra : join table with condition on the query based on attribute from the primary RDD ("where tableA.myValue > tableB.myOtherValue")

apache-spark - 如何使用 QueryCassandra 和 ExecutePySpark Nifi 处理器将我的 cassandra 数据传输到 pyspark?

mongodb - 与单线程客户端相比,为什么 MongoDB 使用多线程客户端性能更好?

c++ - 寻找合适的数据存储和搜索引擎

MongoDB 聚合 $or 与 $elemMatch、$expr 在 $lookup 管道内

node.js - 如何使用 Cassandra 一致性定义类型?

ruby - MongoDB:无法从 BSON 类型 EOO 转换为 Date

c# - Azure DocumentDB .JSON 反序列化为实体时有多个级别

Cassandra Gossip 正在增加未决任务