【问题标题】:use cql copy for map data使用 cql 复制地图数据
【发布时间】:2015-03-02 22:43:11
【问题描述】:

有一篇文章用于将列表和集合等多值数据从 csv 复制到 cassandra 表,

Import CSV with multi-valued (collection) attributes to Cassandra

有人为地图类型数据做过这个吗?

【问题讨论】:

    标签: csv cassandra cql


    【解决方案1】:

    当然,我会给你一个简单的例子,它同时使用了maplist。考虑下表旨在保存星舰数据以及船员和乘客列表:

    CREATE TABLE shipregistry (
      name text,
      class text,
      hullnumber text,
      crew map<text,text>,
      passengers list<text>,
      PRIMARY KEY ((name))
    );
    

    我将从以下文本文件 (/home/aploetz/shipregistry_20150302.csv) 加载此表的数据,该文件有一个标题和一行以竖线分隔的数据:

    name|class|crew|hullnumber|passengers
    Serenity|03-K64-Firefly|{'1st Officer': 'Zoey Washburne', 'captain': 'Malcolm Reynolds', 'engineer': 'Kaylee Frye', 'pilot': 'Hoban Washburne'}|G-82659|['Simon Tam', 'River Tam', 'Derial Book', 'Inara Serra']
    

    然后我将使用 cqlsh COPY 命令导入它:

    aploetz@cqlsh:presentation> COPY shipregistry FROM
    '/home/aploetz/shipregistry_20150302.csv' WITH HEADER=true and DELIMITER='|';
    
    1 rows imported in 0.017 seconds.
    

    需要注意的是,passengers 列的 list 数据以逗号分隔并括在括号中:

    ['Simon Tam', 'River Tam', 'Derial Book', 'Inara Serra']
    

    同样,crew 列的 map 数据是一个以逗号分隔的键值对列表并用大括号括起来:

    {'1st Officer': 'Zoey Washburne', 'captain': 'Malcolm Reynolds', 'engineer': 'Kaylee Frye', 'pilot': 'Hoban Washburne'}
    

    我选择了一个竖线作为分隔符,以使我自己更容易做到这一点,并避免与集合类型中的逗号发生潜在冲突。

    【讨论】:

    • 太棒了。我会试试看。可以在文档中搜索到吗?
    • @user1058511 不,我只知道这一点,因为我上周必须这样做。不幸的是,有些文档需要用一些更详细的例子来刷新。
    • @Aaron -- 如果映射的字段缺少数据怎么办? IE:来自出口{'factor': '1', 'rep': } - 其中rep 缺少价值? CQL 吐回了一个不错的No viable alternative at input...
    • @tymeJV 我很想知道地图中的数据在 cqlsh 中的样子。但你是对的,COPY 可能应该导出一组空引号(在 TEXT 的情况下)或其他可以直接导入的东西。
    • @Aaron -- 是的,我就是这么想的。最终删除列并重新导出 - 解决所有问题的解决方案!
    猜你喜欢
    • 1970-01-01
    • 2012-02-21
    • 2019-01-25
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    相关资源
    最近更新 更多