将python字节传递给Presto查询(并检索和解码这些字节)的正确方法



我想用Presto存储numpy字节。我有以下

import numpy as np
array = np.array([1.0,3.4,5.1])
these_bytes = array.tobytes()

然后我想使用类似的查询将它们存储在presto中

query = f"INSERT INTO some_table VALUES ({these_bytes},'2021-03-11')"

其中{these_bytes}条目是VARBINARY列。当然,presto给出了未被识别为"b"的错误;这些字节";实际上是一个字节对象,而不是字符串,所以它看起来像b'…'。看来我应该解码这个对象并存储解码。。。用presto存储python二进制字节的正确方法是什么?检索时是否需要任何转换?假设我的python presto客户端只传递查询,而不进行额外的转换。

扩展的fstring看起来像

INSERT INTO imu_test_table_1000 VALUES (b'x00x00x00x00x00x00xf0?333333x0b@ffffffx14@','2021-03-11')

这是不对的。

我想你需要这些_bytes.decode(((不过,如果你有不可打印的字符,这可能会成为一个问题,并且会失败(。你还需要知道你的客户端希望字符使用什么编码(utf8、utf16等(。如果你不知道,那么我会困惑你的客户端如何解释发送的字符,或者为什么要接收字符而不是字节。

一般来说,大多数数据传输都是以字节为单位完成的(我不知道您的特定客户端(。这将包括子处理、套接字、请求等。所有这些都使用字节(因为这是计算机所使用的(。字节字符串可以包含任何字节值,并且只是准备传输的数据。字符串是一组字符(每个字符可以由内存中的几个字节组成(,代表某种人类书写/文本。特别是,并不是每个字节字符串都可以编码成字符,因此str.decode((将不起作用,除非您为utf8代码集指定了字节。

如果你想组合任意字节(不代表任何特定的格式或字符(,那么你不能使用字符串;use必须将数据保留在字节数组中。像

query = b"INSERT INTO some_table VALUES (" + these_bytes + b",'2021-03-11')"

相关内容

  • 没有找到相关文章

最新更新