此方法对于类型的用法并不明显。我已阅读
sqlalchemy
文档,其中据说该方法用于直接从文字值呈现查询部分。但我不明白什么时候可能会调用类型。
例如,让我们以
clickhouse_sqlalchemy.types.Array
为例。它的方法看起来是这样的:
def literal_processor(self, dialect):
item_processor = self.item_type_impl.literal_processor(dialect)
def process(value):
processed_value = []
for x in value:
if item_processor:
x = item_processor(x)
processed_value.append(x)
return '[' + ', '.join(processed_value) + ']'
return process
可以明显看出,该方法返回一个渲染通常的 ClickHouse 数组的函数,如
[1, 2, 3]
。但是我怎样才能在查询中实现这一点呢?我仅使用 Array
作为转换类型,例如 sa.cast(sa.func.array(1, 2, 3), Array(String))
,并且无法以任何其他方式使用它来在查询渲染中创建本机 ClickHouse 数组。
我不确定我是否理解这个问题,但你总是可以将一个“看起来像”数组的字符串转换为 ClickHouse 的数组,如下所示:
clickhouse-cloud :) select '[1, 2, 3]'::String as col_str, toTypeName(col_str) as col_str_type, col_str::Array(UInt32) as col_str_cast_array_uint32, toTypeName(col_str_cast_array_uint32) as col_array_type
SELECT
CAST('[1, 2, 3]', 'String') AS col_str,
toTypeName(col_str) AS col_str_type,
CAST(col_str, 'Array(UInt32)') AS col_str_cast_array_uint32,
toTypeName(col_str_cast_array_uint32) AS col_array_type
Query id: 200abba4-2fd1-4cc3-9efe-529765c26a09
┌─col_str───┬─col_str_type─┬─col_str_cast_array_uint32─┬─col_array_type─┐
│ [1, 2, 3] │ String │ [1,2,3] │ Array(UInt32) │
└───────────┴──────────────┴───────────────────────────┴────────────────┘
1 row in set. Elapsed: 0.001 sec.