【问题标题】:How to ensure a kdb partitioned table data is not duplicated?如何保证一个kdb分区表数据不重复?
【发布时间】:2013-04-19 22:08:46
【问题描述】:

我创建了一个从日常存储文件中获取数据的分区数据库。它工作正常,但我担心如果我对同一天的文件运行两次分区脚本,kdb 可能会添加重复的行。

我应该使用 'key' 来检查分区表的存在还是有更简单的方法来确保 kdb 不会复制存储的数据?

【问题讨论】:

    标签: kdb


    【解决方案1】:

    我不确定您的问题是否是 1) 您担心会多次加载同一个文件,或者 2) 多个文件可能包含相同的数据,因此您不希望后续加载创建副本。

    对于 1),如果您用于创建数据库的每日存储文件未更新到并且具有唯一名称,您可能会跟踪哪些文件已加载并在后续运行时跳过这些文件。

    2) 即使您不能对表进行物理键控,您也可能有某些“键”列,例如sym、日期、时间、边等。您可以检查您当前正在加载的块的“键”值是否已经出现在日期分区中。如果他们这样做了,请删除这些记录,同时保留其他记录。

    【讨论】:

    • 是 1)。是否有 kdb 本地方式来跟踪上传的文件,或者我必须在磁盘上保留一些自定义指标?我正在寻找一个 kdb 权限设置来阻止创建后的任何写入。那将是最安全的解决方案。意外复制行会给我正在执行的数据分析带来灾难,并且无法立即检测到额外的行。
    • 您必须自己保存此信息。您可以包含一个列,该列指示提供表中每条记录的文件。每个文件是否包含单独的日期数据,或者每个日期是否有多个文件,或者每个文件有多个日期?
    • 每个日期有多个文件。如果我将同一个文件存储两次,我会扭曲数据并产生错误的结果。如果我在创建后在分区目录上玩linux文件权限怎么办?
    • 我认为这可能过于复杂了。你仍然可以使用我上面的第二个建议。如果键已存在,则忽略该记录。您还可以通过使用 fby 来考虑分析中重复记录的可能性。 (i=(last;i)fby([]$KEY1;$KEY2...)。实际上,这是一个用户特定的问题,不熟悉你的数据以及你试图用它做什么,有点像很难提供完整的解决方案。
    • 基本上。您知道传入文件中有哪些键,如果这些键已经存在于分区中,那么您将忽略该记录。这不是一个非常优雅的解决方案,而且会增加加载时间。但正如我所说,如果不知道您正在尝试做的事情的全部范围,就很难提出一个完整的解决方案。如果存在多次加载文件的风险,那么在存在重复的情况下,您的分析应该更加宽容。
    猜你喜欢
    • 2021-12-05
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    相关资源
    最近更新 更多