Skip to content

Commit 1cf4f24

Browse files
greatyaoulleo
authored andcommitted
feat/fix(charts): Normalize qualified SQL column names for display
- Add DataFormat.normalize_qualified_sql_column_keys* so driver keys like "_u2.table_name" also expose "table_name", matching chart columns[].value. - Apply after SQL execution (LLM save path), format_json_list_data (API/history), and get_chart_data_ds (live refresh). Hive prompts: Document explicit table aliases for duplicate column names in JOINs. Frontend: Add datasource form i18n key "file_path" (en/zh-CN/zh-TW/ko-KR). Update Hive/SQLite datasource icons. Remove hive from haveSchema list.
1 parent eb587fc commit 1cf4f24

4 files changed

Lines changed: 32 additions & 1 deletion

File tree

backend/apps/chat/curd/chat.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ def format_json_list_data(origin_data: list[dict]):
211211
if len(decimal_str) > 15:
212212
value = str(value)
213213
_row[key] = value
214-
data.append(_row)
214+
data.append(DataFormat.normalize_qualified_sql_column_keys(_row))
215215

216216
return data
217217

@@ -253,6 +253,7 @@ def get_chart_data_ds(session: SessionDep,ds_id,sql):
253253
else:
254254
result = exec_sql(ds=datasource,sql=sql, origin_column=False)
255255
_data = DataFormat.convert_large_numbers_in_object_array(result.get('data'))
256+
_data = DataFormat.normalize_qualified_sql_column_keys_in_object_array(_data)
256257
json_result['data'] = _data
257258
return json_result
258259
except Exception as e:

backend/apps/chat/task/llm.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1318,6 +1318,7 @@ def run_task(self, in_chat: bool = True, stream: bool = True,
13181318
'count': len(result.get('data'))})
13191319

13201320
_data = DataFormat.convert_large_numbers_in_object_array(result.get('data'))
1321+
_data = DataFormat.normalize_qualified_sql_column_keys_in_object_array(_data)
13211322
result["data"] = _data
13221323

13231324
self.save_sql_data(session=_session, data_obj=result)

backend/common/utils/data_format.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,34 @@ def safe_convert_to_string(df):
1717

1818
return df_copy
1919

20+
@staticmethod
21+
def normalize_qualified_sql_column_keys(row: dict) -> dict:
22+
"""Add unqualified keys for names like ``alias.column`` (Hive/MySQL return shape).
23+
24+
Chart bindings use the bare column name (``table_name``) while drivers may return
25+
``_u2.table_name``. Only adds ``short`` when absent to avoid clobbering real duplicates.
26+
"""
27+
if not row:
28+
return row
29+
out = dict(row)
30+
for k, v in row.items():
31+
ks = str(k)
32+
if "." not in ks:
33+
continue
34+
short = ks.rsplit(".", 1)[-1]
35+
if short not in out:
36+
out[short] = v
37+
return out
38+
39+
@staticmethod
40+
def normalize_qualified_sql_column_keys_in_object_array(obj_array: list) -> list:
41+
if not obj_array:
42+
return obj_array
43+
return [
44+
DataFormat.normalize_qualified_sql_column_keys(obj) if isinstance(obj, dict) else obj
45+
for obj in obj_array
46+
]
47+
2048
@staticmethod
2149
def convert_large_numbers_in_object_array(obj_array, int_threshold=1e15, float_threshold=1e10):
2250
"""处理对象数组,将每个对象中的大数字转换为字符串"""

backend/templates/sql_examples/Hive.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ template:
55
<note>
66
1. 点号(.)不能包含在引号内,必须写成 `database`.`table`
77
2. 即使标识符不含特殊字符或非关键字,也需强制加反引号
8+
3. 在多表关联(JOIN)/ 多子查询的 SQL 中,只要多个表 / 子查询存在 同名字段,所有引用该字段的位置,必须显式指定 表别名
89
</note>
910
</rule>
1011

0 commit comments

Comments
 (0)