微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Clickhouse 无法解析输入:预期 \t 之前

如何解决Clickhouse 无法解析输入:预期 \t 之前

我正在尝试使用 yandex logs api (https://github.com/yndx-metrika/logs_api_integration) 将数据插入 clickhouse 它使用 requests 作为库来发送请求。

我的错误是:

Code: 27,e.displayText() = DB::Exception: Cannot parse input: expected \t before: \n33\t55\t2017-05-05\n33\t55\t2017-05-05\n33\t55\t2017-05-05\n33\t55\t2017-05-05 (version 19.16.4.12)

当我发送请求时,我的查询参数是:

{u'query': u'INSERT INTO db.table FORMAT TabSeparatedWithNames ',u'input_format_allow_errors_num': 99999,u'input_format_tsv_empty_as_default': 1,u'input_format_allow_errors_ratio': 1}

引擎是 MergeTree()

列不可为空

我的数据是

ClientID  CounterID  Date
55  33  2017-05-05
55  33  2017-05-05
55  33  2017-05-05
55  33  2017-05-05
55  33  2017-05-05
55  33  2017-05-05
55  33  2017-05-05
55  33  2017-05-05

解决方法

使用 TabSeparatedWithNames 时需要传递标题(列名):

import requests

CH_USER = 'default'
CH_PASSWORD = ''
SSL_VERIFY = False

host = 'http://localhost:8123'
db = 'db'
table = 'table'

content = 'ClientID\tCounterID\tDate' \
          '\n33\t55\t2017-05-05' \
          '\n33\t55\t2017-05-05' \
          '\n33\t55\t2017-05-05' \
          '\n33\t55\t2017-05-05' \
          '\n33\t55\t2017-05-05'
content = content.encode('utf-8')
query_dict = {
    'query': 'INSERT INTO ' + db + '.' + table + ' FORMAT TabSeparatedWithNames '
}

r = requests.post(host,data=content,params=query_dict,auth=(CH_USER,CH_PASSWORD),verify=SSL_VERIFY)

print(r.text)

测试表架构:

CREATE TABLE table
(
    `ClientID` Int32,`CounterID` Int32,`Date` date
)
ENGINE = MergeTree
ORDER BY Date
,

确保您尝试插入的列数(以及列名/类型本身)在目标表中相同

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。