获取与 Snowflake 中的 MongoDB ObjectId 关联的时间戳

Get the timestamp associated with a MongoDB ObjectId in Snowflake

基本上我和这个问题一样 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 table 中添加一个包含与 ID 关联的时间戳的新字段?

不好意思,我没明白 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 个字节是随机计数器值

上面的列表(暗示了大约一半的答案)取自


我的旧错误答案:

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

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