首页 > 解决方案 > 使用 Python 3.8 将时间戳插入雪花

问题描述

我在雪花中定义了一个空表;

CREATE OR REPLACE TABLE db1.schema1.table(
ACCOUNT_ID NUMBER NOT NULL PRIMARY KEY,
PREDICTED_PROBABILITY FLOAT,
TIME_PREDICTED TIMESTAMP
);

它会创建正确的表,该表已使用descsql 中的命令进行检查。然后使用雪花 python 连接器,我们尝试执行以下查询;

insert_query =  f'INSERT INTO DATA_LAKE.CUSTOMER.ACT_PREDICTED_PROBABILITIES(ACCOUNT_ID, PREDICTED_PROBABILITY, TIME_PREDICTED) VALUES ({accountId}, {risk_score},{ct});'
ctx.cursor().execute(insert_query)

就在此查询之前定义变量,主要挑战是将当前时间戳写入雪花。这里的值ct定义为;

import datetime
ct = datetime.datetime.now()
print(ct)

2021-04-30 21:54:41.676406

但是当我们尝试执行这个INSERT查询时,我们会收到以下错误消息;


ProgrammingError: 001003 (42000): SQL compilation error:
syntax error line 1 at position 157 unexpected '21'.

我可以就 ow 在这里格式化日期时间值获得一些帮助吗?帮助表示赞赏。

标签: python-3.xsnowflake-cloud-data-platform

解决方案


除了@Lukasz 提供的答案之外,您还可以考虑将 current_timestamp() 定义为 TIME_PREDICTED 列的默认值:

CREATE OR REPLACE TABLE db1.schema1.table(
ACCOUNT_ID NUMBER NOT NULL PRIMARY KEY,
PREDICTED_PROBABILITY FLOAT,
TIME_PREDICTED TIMESTAMP DEFAULT current_timestamp
);

然后只需插入 ACCOUNT_ID 和 PREDICTED_PROBABILITY:

insert_query =  f'INSERT INTO DATA_LAKE.CUSTOMER.ACT_PREDICTED_PROBABILITIES(ACCOUNT_ID, PREDICTED_PROBABILITY) VALUES ({accountId}, {risk_score});'
ctx.cursor().execute(insert_query)

它会自动将插入时间分配给 TIME_PREDICTED


推荐阅读