如何使用解析列作为时间戳将csv上载到QuestDb?

2024-04-29 05:15:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用指定的时间戳列将csv文件导入QuestDb表。我必须指定其中一个列不是字符串,而是一个时间戳,我称之为

import requests
schema = '[{"name":"date", "type": "Timestamp", "pattern":"yyyy-MM-dd"}]'

with open('..\HavCases.csv', 'rb') as f:
    r = requests.post(r'http://localhost:9000/imp?name=table3&overwrite=true&timestamp=date',
        files={'schema': schema,'data': f})
    print(r.text)

但date列一直以字符串形式返回,响应是

not a timestamp 'date'

当我从URL中删除&timestamp时,我看到列被解析为字符串,而不是时间戳

+-----------------------------------------------------------------------------------------------------------------+
|      Location:  |                                            table3  |        Pattern  | Locale  |      Errors  |
|   Partition by  |                                              NONE  |                 |         |              |
|      Timestamp  |                                              NONE  |                 |         |              |
+-----------------------------------------------------------------------------------------------------------------+
|   Rows handled  |                                               780  |                 |         |              |
|  Rows imported  |                                               780  |                 |         |              |
+-----------------------------------------------------------------------------------------------------------------+
...
|              9  |                                              date  |                   STRING  |           0  |

Tags: 文件csv字符串nameimportnonedateschema
1条回答
网友
1楼 · 发布于 2024-04-29 05:15:21

我发现了一个aswer,这不是一个小问题,我必须查看QuestDb源代码,所以将它发布在这里供其他人使用

显然,当QuestDb解析导入请求时,它希望“schema”文件位于csv“data”之前。当Python请求从文件字典发布数据时,它似乎按照键的字母顺序发布数据,因此files={'schema': schema,'data': f}files={'data': f, 'schema': schema}是等效的,首先发送数据,然后发送模式

为了解决这个问题,我必须以元组列表而不是字典的形式提供files参数:

with open(r'..\HavCases.csv', 'rb') as f:
    r = requests.post(r'http://localhost:9000/imp?name=table3&overwrite=true&timestamp=date', 
    files=[('schema', schema), ('data', f)])
    print(r.text)

相关问题 更多 >