【问题标题】:Import bulk data in to Keen.io, where one column is stringified JSON将批量数据导入 Keen.io,其中一列是字符串化 JSON
【发布时间】:2017-06-10 12:41:36
【问题描述】:

我有大约 400 万行数据要导入 Keen.io。非规范化的 CSV 结构看起来像附加的 here ...“维度”列是一个字符串化的 JSON 对象。我看到 Keen.io 有一个用于 CSV 的批量导入器。进口商如何处理“尺寸”栏?它会把它变成一个物体吗?你对我应该如何处理这个问题有什么建议?谢谢!

【问题讨论】:

    标签: csv data-modeling keen-io


    【解决方案1】:

    首先让您以event data 的形式构建您的数据,然后准备将其加载到Keen。

    您共享的链接看起来像您有一个关于鱼的数据表(每条鱼一行)和另一个关于法规的数据表。我假设如果您只是想将这些表存储在某个地方,您会使用 SQL 数据库或类似 Firebase 的东西。由于您有兴趣将它们加载到 Keen IO 中,我假设您有一些与您有兴趣分析的数据相关的操作,这就是 400 万行的意思数据。

    加载数据的第一步是确定哪些操作与您有兴趣记录的这些事件相关。

    对于此示例,假设您在每次查看或保存鱼或法规时进行跟踪。我们的事件集合是:

    • 观鱼
    • 救鱼
    • 查看法规
    • 保存规则

    每次发生这些事件时,我们都会以这样的格式将其发布到 Keen。我们基本上创建了一个对象,其中包含关于鱼、规则、用户等的各种相关属性:

    // Create an event data object with the properties you want to send
    // This is an example of sending an event using the Keen IO JavaScript SDK, but you could post the event from iOS, Android, or from the backend.
    // This example is an event that happens when someone views details about a fish
    
    var event = {
      gid: "be68ea99-8f3b-9s9f",
      fish: { // details about the fish
        id: "168",
        species_name: "Amberjack, Lesser"
      },
      user: { // details about the user
        id: "029aomsldsf9aadfm"
      },
      app_type: "web", // "iOS", "Android"
      keen: {  // time the event happened
        timestamp: new Date().toISOString()
      }
    };
    
    // Send it to the "view_fish" collection
    client.addEvent("view_fish", event);

    理想情况下,您的应用程序经过检测,以便这些事件在发生时发布到 Keen IO。

    在这种情况下,您还需要加载一些历史数据。查看Keen IO bulk loading guide。为此,您需要为每个历史事件创建 CSV。第一行必须是列名。之后,每个事件都有一行:

    keen.timestamp, gid, fish.id, fish.species_name
    2017-06-13T19:11:05Z, ae68ea99-2f3b-9s9z, "168", "Amberjack, Lesser"
    2017-05-13T19:11:05Z, be88ea99-8f4b-3s9x, "44", "Scallop, Bay"
    2017-04-13T19:11:05Z, ce33ea99-5f3b-9s9b, "223", "Scallop, Calico"
    

    您的每个事件集合都有一个 CSV,例如“view_fish”、“save_fish”等

    然后您可以使用Keen CLI 加载它们中的每一个:

    $ keen events:add --collection view_fish --file view_fish_events.csv --csv
    $ keen events:add --collection save_fish --file save_fish_events.csv --csv
    $ keen events:add --collection view_regulation --file view_regulation_events.csv --csv
    $ keen events:add --collection save_regulation --file save_regulation_events.csv --csv
    

    【讨论】:

    • 感谢您的回复。根据 csv 列标题,Keen.io 中的数据最终会是什么样子?我已经开始以您在上面建议的类似格式将数据传输到 Keen.io。我想将历史数据放入这些相同的集合中,但我担心导入工具不会以正确的格式导入它。
    • 我会先在“import_test”之类的集合中运行一些测试,以确保事情看起来像您期望的那样。您需要先将字符串化的 json 转换为列标题和值。一旦你这样做并导入了 csv,它应该会像我上面展示的示例一样以 JSON 对象的形式结束。您可以将存储在 Keen 中的每个事件视为一个嵌套的 JSON 对象。
    • 好的,我明白了。所以像fish.name 这样的列标题最终会像:{fish:{name:''}}很酷,谢谢!
    • 是的,没错!我注意到您的数据中有逗号(例如“Amberjack, Lesser”)。您必须弄清楚如何使用引号才能正确解释 CSV。神速!
    猜你喜欢
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 2021-02-19
    • 1970-01-01
    • 2018-11-12
    • 2011-03-07
    • 1970-01-01
    相关资源
    最近更新 更多