python-3.x - 使用 Python 3.8 将时间戳插入雪花
问题描述
我在雪花中定义了一个空表;
CREATE OR REPLACE TABLE db1.schema1.table(
ACCOUNT_ID NUMBER NOT NULL PRIMARY KEY,
PREDICTED_PROBABILITY FLOAT,
TIME_PREDICTED TIMESTAMP
);
它会创建正确的表,该表已使用desc
sql 中的命令进行检查。然后使用雪花 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 在这里格式化日期时间值获得一些帮助吗?帮助表示赞赏。
解决方案
除了@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
推荐阅读
- json - Flutter 应用 API POST 响应未返回
- azure - 如果多个规模集在负载均衡器下运行,是否可以将 IP 地址定向到特定的 Azure VM 规模集?
- java - 从 onclick 响应内部传递的变量的空值
- flask - 如何使用烧瓶引用随机生成的文件名
- bash - 通过(*)星号将文件添加到for循环中的变量
- ubuntu - 如何在 ubuntu 中查看 apache-parquet(cpp) 的路径(我安装了它)?
- javascript - 从 Javascript 获取价值到 url 到 Iframe
- bash - 根据特定列的最小值提取文本文件行
- react-native - 我在 react-native 的 Stack Navigator 中遇到了问题
- android - Android应用程序崩溃okhttp3 HTTP FAILED:javax.net.ssl.SSLException:读取错误:系统调用期间I/O错误,软件导致连接中止