sql - splitByChar 可空
问题描述
我有下一个查询:
SELECT DISTINCT col_name, toTypeName(col_name)
FROM remote('host_name', 'db.table', 'user', 'password')
结果是 6 条记录 ( WITHOUT NULL
)。例子:
some_prefix-1, Nullable(String)
...
some_prefix-6, Nullable(String)
现在我尝试splitByChar,但我得到:
代码:43,e.displayText() = DB::Exception: 嵌套类型Array(String) 不能在Nullable 类型内(版本20.1.2.4(官方构建))
我尝试使用not null condition
和转换类型,但问题仍然存在。像那样:
SELECT DISTINCT toString(col_name) AS col_name_str,
splitByChar('-', col_name_str)
FROM remote('host_name', 'db.table', 'user', 'password')
WHERE col_name IS NOT NULL
这是预期的行为吗?如何解决这个问题?
解决方案
splitByChar 缺乏 Nullable 支持(https://github.com/ClickHouse/ClickHouse/issues/6517)
你使用了错误的演员表toString
SELECT DISTINCT
cast(col_name, 'String') AS col_name_str,
splitByChar('-', col_name_str)
FROM
(
SELECT cast('aaaaa-vvvv', 'Nullable(String)') AS col_name
)
WHERE isNotNull(col_name)
┌─col_name_str─┬─splitByChar('-', cast(col_name, 'String'))─┐
│ aaaaa-vvvv │ ['aaaaa','vvvv'] │
└──────────────┴────────────────────────────────────────────┘
或者assumeNotNull
SELECT DISTINCT
assumeNotNull(col_name) AS col_name_str,
splitByChar('-', col_name_str)
FROM
(
SELECT cast('aaaaa-vvvv', 'Nullable(String)') AS col_name
)
WHERE isNotNull(col_name)
┌─col_name_str─┬─splitByChar('-', assumeNotNull(col_name))─┐
│ aaaaa-vvvv │ ['aaaaa','vvvv'] │
└──────────────┴───────────────────────────────────────────┘
推荐阅读
- android - 在云功能 FCM 中向特定用户发送推送通知
- flutter - 应为“int”类型的值,但在尝试将新键、值添加到地图时得到“字符串”类型之一
- android - 如何从 EditText 获取相同的 html 字符串,我把它放在那里
- python - Python(def)函数参数谁切换 IF NOT 或只是 IF 关键字
- python - 从 Spotify API 的 track 的 preview_url 获取 30 秒是如何定义的?
- python - 平滑线图:修复 interpolator1D y_axis 的 TypeError
- reactjs - 如何在 React 中渲染不稳定的父属性
- python-3.x - 使Integrate.quad 函数只返回解析值
- python - 如何使用python从一组点中选择等距离点
- javascript - 作为 React 组件的 Mapbox 示例