当查询不属于 duckDB 结构的字段时,您会收到以下错误。是否可以抑制此错误并返回 NULL?
当前行为:
SELECT a.b
FROM
(SELECT {'x': 1, 'y': 2, 'z': 3} AS a);
错误:活页夹错误:无法在结构中找到键“b”
候选条目:“x”,“y”,“z”
期望的行为:
SELECT a.b
FROM
(SELECT {'x': 1, 'y': 2, 'z': 3} AS a);
┌───────┐
│ b │
│ int32 │
├───────┤
│ │
└───────┘
我遇到了同样的问题。
我找不到真正的“DuckDB 本机”解决方案,但作为解决方法,请考虑创建一个使用 Pythonic
dict.get
函数来实现您正在寻找的内容的 UDF。
可能看起来像:
def _get(d: dict, key: str) -> str | None:
return d.get(key)
df = pd.DataFrame({'dict_col': [{'a': 'something'}, {'a': 'something else'}]}) # your data here
con = duckdb.connect()
con.register('some_table', df)
con.create_function('udf_get', _get)
result = con.query("select *, udf_get(dict_col, 'a') as a, udf_get(dict_col, 'b') as b from some_table;").fetchdf()
print(result.head())
它将产生以下数据框:
dict_col a b
0 {'a': 'something'} something None
1 {'a': 'something else'} something else None
同样,这并不完美,但在我看来是一个合理的解决方法。