我想用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')"