【问题标题】:Get the timestamp associated with a MongoDB ObjectId in Snowflake获取与 Snowflake 中的 MongoDB ObjectId 关联的时间戳
【发布时间】:2019-11-20 04:57:35
【问题描述】:

基本上我和这个问题一样 How to retrieve the date from a MongoDB ObjectId using SQL

也就是说,我知道如何使用pymongo检索与 ObjectId 关联的时间戳,例如,

ObjectId('5d8dc6e0a26870000101c53d').generation_time
# datetime.datetime(2019, 9, 27, 8, 22, 56, tzinfo=<bson.tz_util.FixedOffset object at 0x000001C2A7F4F1C8>)

但我不知道如何使用 Snowflake 执行此操作。我有一个名为 _id 的列,其中包含 MongoDB ObjectId。

如何在我的 Snowflake 表中添加一个包含与 ID 关联的时间戳的新字段?

【问题讨论】:

    标签: mongodb snowflake-cloud-data-platform


    【解决方案1】:

    我的错,我没有知道 MongoDB ObjectId 的 ID 中嵌入了创建时间戳。

    你可以用这个解码时间戳:

    SELECT TO_TIMESTAMP_NTZ(TO_NUMBER(SUBSTR(ObjectId, 1, 8), 'XXXXXXXX'))
    FROM (SELECT '5d8dc6e0a26870000101c53d' ObjectId)
    
    => 2019-09-27 08:22:56.000
    

    id由以下部分组成:

    1. 前 4 个字节表示自 unix 纪元以来的秒数
    2. 接下来的 3 个字节是机器标识符
    3. 接下来的 2 个字节由进程 ID 组成
    4. 最后 3 个字节是随机计数器值

    上面的列表(暗示了大约一半的答案)取自"How to convert from Timestamp to Mongo ObjectID"


    我以前的错误答案:

    您无法从对象 ID 中检索日期。你的 Python 代码示例有效的原因是你有一个完整的 object,它有一个 id 和其他属性,包括 generation_time

    如果您只是从 MongoDB 中提取 id 属性,那么您没有其他属性。

    【讨论】:

    • 那么你怎么能用 SQL Server 来做这个答案呢? stackoverflow.com/a/32822921/3301113
    • 我得到的 MongoDB ObjectIds 完全错误。我已经用实际的解决方案更新了我的答案
    猜你喜欢
    • 2020-06-25
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 2021-04-26
    相关资源
    最近更新 更多