clickhouse-java
clickhouse-java copied to clipboard
The same column names in different letters in the clockhouse leads to errors in various other products that are connected to the clickhouse via jdbc
Describe the unexpected behaviour
The same column names in different letters in the clockhouse leads to errors in various other products that are connected to the clickhouse via jdbc
For example we can have two columns with same name like "name" and "Name" in same table.
How to reproduce
https://fiddle.clickhouse.com/
CREATE TABLE users (uid Int16, name String, age Int16, Name String) ENGINE=Memory;
INSERT INTO users VALUES (1231, 'John', 33, 'John');
INSERT INTO users VALUES (6666, 'Ksenia', 48, 'John');
INSERT INTO users VALUES (8888, 'Alice', 50, 'John');
SELECT * FROM users;
- Which ClickHouse server version to use: lattest
Expected behavior Avoid using same name in tables. Add exeption to the jdbc driver to rename same name columns with some index on the fly. UPD: Or to make smart shielding same name columns to avoid getting crazy query tools. Error message and/or stacktrace For example Dremio can't work with same column names and shows this error:
Error while applying rule CLICKHOUSELogicalScanConverter, args [rel#752887705:ScanCrel.NONE.ANY([]).[](table="TR EVENTS".app_events.events_v2,columns=
sv_unq_id,
event_date,
event_timestamp,
event_time,
event_name,
event_previous_timestamp,
event_value_in_usd,
event_bundle_sequence_id,
event_server_timestamp_offset,
user_id,
user_pseudo_id,
user_first_touch_timestamp,
stream_id,
privacy_info_analytics_storage,
privacy_info_ads_storage,
privacy_info_uses_transient_token,
user_ltv_revenue,
user_ltv_currency,
device_category,
device_mobile_brand_name,
device_mobile_model_name,
device_mobile_marketing_name,
device_mobile_os_hardware_model,
device_operating_system,
device_operating_system_version,
device_vendor_id,
device_advertising_id,
device_language,
device_is_limited_ad_tracking,
device_time_zone_offset_seconds,
device_browser,
device_browser_version,
device_web_info_browser,
device_web_info_browser_version,
device_web_info_hostname,
geo_continent,
geo_country,
geo_region,
geo_city,
geo_sub_continent,
geo_metro,
app_info_id,
app_info_version,
app_info_install_store,
app_info_firebase_app_id,
app_info_install_source,
traffic_source_name,
traffic_source_medium,
traffic_source_source,
event_dimensions_hostname,
ecommerce_total_item_quantity,
ecommerce_purchase_revenue_in_usd,
ecommerce_purchase_revenue,
ecommerce_refund_value_in_usd,
ecommerce_refund_value,
ecommerce_shipping_value_in_usd,
ecommerce_shipping_value,
ecommerce_tax_value_in_usd,
ecommerce_tax_value,
ecommerce_unique_items,
ecommerce_transaction_id,
platform,
items_item_id,
items_item_name,
items_item_brand,
items_item_variant,
items_item_category,
items_item_category2,
items_item_category3,
items_item_category4,
items_item_category5,
items_price_in_usd,
items_price,
items_quantity,
items_item_revenue_in_usd,
items_item_revenue,
items_item_refund_in_usd,
items_item_refund,
items_coupon,
items_affiliation,
items_location_id,
items_item_list_id,
items_item_list_name,
items_item_list_index,
items_promotion_id,
items_promotion_name,
items_creative_name,
items_creative_slot,
event_params_ADL,
event_params_adt,
event_params_af_currency,
event_params_af_order_id,
event_params_affiliation,
event_params_AIRLINE,
event_params_AIRPORT,
event_params_AnotherCity,
event_params_AnotherDate,
event_params_application,
event_params_arrival,
event_params_arrivalTime,
event_params_backToSearch,
event_params_BAG,
event_params_BAG_REVENUE,
event_params_banner_name,
event_params_build_type,
event_params_campaign,
event_params_campaign_id,
event_params_campaign_info_source,
event_params_categoryCode,
event_params_chd,
event_params_Checked_in,
event_params_Checkin,
event_params_CHECKINED,
event_params_CITY,
event_params_CLASS,
event_params_click_timestamp,
event_params_client,
event_params_Client_ID,
event_params_CLOSEABLE,
event_params_code,
event_params_codeshare,
event_params_CONTENT,
event_params_conversation_id,
event_params_COUNT,
event_params_COUNTRY,
event_params_CRTF,
event_params_currency,
event_params_CurrentScreen,
event_params_DATE,
event_params_DATES,
event_params_dclid,
event_params_DDATE,
event_params_debug_event,
event_params_debug_mode,
event_params_DEEPLINK,
event_params_departure,
event_params_departure_date,
event_params_departureTime,
event_params_depature,
event_params_depatureTime,
event_params_destination,
event_params_DETAIL,
event_params_discount,
event_params_DOCUMENT,
event_params_DTIME,
event_params_dynamic_link_accept_time,
event_params_dynamic_link_link_id,
event_params_dynamic_link_link_name,
event_params_element_id,
event_params_engaged_session_event,
event_params_engagement_time_msec,
event_params_entrances,
event_params_Error,
event_params_error_value,
event_params_event_type,
event_params_EventAction,
event_params_EventCategory,
event_params_EventLabel,
event_params_EventLabel1,
event_params_EventLabel10,
event_params_EventLabel11,
event_params_EventLabel12,
event_params_EventLabel2,
event_params_EventLabel3,
event_params_EventLabel4,
event_params_EventLabel5,
event_params_EventLabel6,
event_params_EventLabel7,
event_params_EventLabel8,
event_params_EventLabel9,
event_params_EventValue,
event_params_fare,
event_params_FAREFAMILY,
event_params_faremix,
event_params_fatal,
event_params_FFP,
event_params_file_extension,
event_params_file_name,
event_params_firebase_conversion,
event_params_firebase_error,
event_params_firebase_event_origin,
event_params_firebase_previous_class,
event_params_firebase_previous_id,
event_params_firebase_screen_class,
event_params_firebase_screen_id,
event_params_FLIGHT,
event_params_flight_duration,
event_params_flights,
event_params_FLOW,
event_params_FROM,
event_params_FWAY,
event_params_ga_session_id,
event_params_ga_session_number,
event_params_gclid,
event_params_HEALTH_PROMO_CODE,
event_params_hit_timestamp,
event_params_id,
event_params_ignore_referrer,
event_params_index,
event_params_inf,
event_params_INSURANCE,
event_params_insurance_count,
event_params_insurance_type,
event_params_item_category,
event_params_item_category2,
event_params_item_category3,
event_params_item_id,
event_params_item_name,
event_params_item_variant,
event_params_ITINERARY,
event_params_IWAYID,
event_params_lastKnown_ADL,
event_params_lastKnown_affiliation,
event_params_lastKnown_AIRLINE,
event_params_lastKnown_application,
event_params_lastKnown_arrival,
event_params_lastKnown_arrivalTime,
event_params_lastKnown_BAG,
event_params_lastKnown_BAG_REVENUE,
event_params_lastKnown_campaign,
event_params_lastKnown_categoryCode,
event_params_lastKnown_CHD,
event_params_lastKnown_CHECKINED,
event_params_lastKnown_CLASS,
event_params_lastKnown_client,
event_params_lastKnown_CLOSEABLE,
event_params_lastKnown_code,
event_params_lastKnown_codeshare,
event_params_lastKnown_CONTENT,
event_params_lastKnown_CRTF,
event_params_lastKnown_CurrentScreen,
event_params_lastKnown_DATES,
event_params_lastKnown_DDATE,
event_params_lastKnown_DEEPLINK,
event_params_lastKnown_departure_date,
event_params_lastKnown_depature,
event_params_lastKnown_depatureTime,
event_params_lastKnown_destination,
event_params_lastKnown_DETAIL,
event_params_lastKnown_DOCUMENT,
event_params_lastKnown_DTIME,
event_params_lastKnown_element_id,
event_params_lastKnown_error,
event_params_lastKnown_event_type,
event_params_lastKnown_EventAction,
event_params_lastKnown_EventCategory,
event_params_lastKnown_EventLabel,
event_params_lastKnown_EventLabel1,
event_params_lastKnown_EventLabel2,
event_params_lastKnown_EventLabel3,
event_params_lastKnown_EventLabel4,
event_params_lastKnown_EventValue,
event_params_lastKnown_fare,
event_params_lastKnown_FAREFAMILY,
event_params_lastKnown_faremix,
event_params_lastKnown_FLIGHT,
event_params_lastKnown_flights,
event_params_lastKnown_flow,
event_params_lastKnown_FROM,
event_params_lastKnown_FWAY,
event_params_lastKnown_id,
event_params_lastKnown_index,
event_params_lastKnown_INF,
event_params_lastKnown_INSURANCE,
event_params_lastKnown_insurance_count,
event_params_lastKnown_insurance_type,
event_params_lastKnown_item_category2,
event_params_lastKnown_item_category3,
event_params_lastKnown_item_id,
event_params_lastKnown_item_name,
event_params_lastKnown_item_variant,
event_params_lastKnown_ITINERARY,
event_params_lastKnown_LINE,
event_params_lastKnown_location,
event_params_lastKnown_location_id,
event_params_lastKnown_login,
event_params_lastKnown_marketing,
event_params_lastKnown_MEAL,
event_params_lastKnown_MEAL_REVENUE,
event_params_lastKnown_medium,
event_params_lastKnown_MILES,
event_params_lastKnown_NAME,
event_params_lastKnown_operatimg,
event_params_lastKnown_ORDER_ID,
event_params_lastKnown_ORDERID,
event_params_lastKnown_origin,
event_params_lastKnown_OW_ADT,
event_params_lastKnown_OW_CHD,
event_params_lastKnown_parameter,
event_params_lastKnown_partner,
event_params_lastKnown_PERSONAL,
event_params_lastKnown_pnr,
event_params_lastKnown_POS,
event_params_lastKnown_price,
event_params_lastKnown_PROMOCODE,
event_params_lastKnown_promotion_id,
event_params_lastKnown_promotion_name,
event_params_lastKnown_QTY,
event_params_lastKnown_quantity,
event_params_lastKnown_RDATE,
event_params_lastKnown_RDMPTN,
event_params_lastKnown_result,
event_params_lastKnown_REVENUE,
event_params_lastKnown_RT_ADT,
event_params_lastKnown_RT_CHD,
event_params_lastKnown_SCREEN,
event_params_lastKnown_SEAT,
event_params_lastKnown_SEAT_REVENUE,
event_params_lastKnown_SESSION_ID,
event_params_lastKnown_slice,
event_params_lastKnown_source,
event_params_lastKnown_STATUS,
event_params_lastKnown_step,
event_params_lastKnown_SUB,
event_params_lastKnown_SWITCH,
event_params_lastKnown_THEME,
event_params_lastKnown_TICKETSTYPE,
event_params_lastKnown_title,
event_params_lastKnown_TO,
event_params_lastKnown_transaction_id,
event_params_lastKnown_trueEventCategory,
event_params_lastKnown_type,
event_params_lastKnown_ui,
event_params_lastKnown_UX,
event_params_lastKnown_ux_ui,
event_params_lastKnown_way,
event_params_lastKnown_WEIGHT,
event_params_LINE,
event_params_link_classes,
event_params_link_domain,
event_params_link_id,
event_params_link_text,
event_params_link_url,
event_params_LOCATION,
event_params_location_id,
event_params_login,
event_params_marketing,
event_params_MEAL,
event_params_MEAL_REVENUE,
event_params_medium,
event_params_MILES,
event_params_MODEL,
event_params_NAME,
event_params_NEW,
event_params_NONE,
event_params_notification_id,
event_params_offer_id,
event_params_OFFERS,
event_params_operatimg,
event_params_operating,
event_params_ORDER,
event_params_ORDER_ID,
event_params_ORDERID,
event_params_origin,
event_params_other_value_coupon_value,
event_params_other_value_miles_value,
event_params_other_value_sertificate_value,
event_params_outbound,
event_params_OW_ADT,
event_params_OW_CHD,
event_params_page_location,
event_params_page_referrer,
event_params_page_title,
event_params_pagePath,
event_params_parameter,
event_params_partner,
event_params_passenger_id,
event_params_payment_type,
event_params_percent_scrolled,
event_params_PERSONAL,
event_params_PLACE,
event_params_pnr,
event_params_POS,
event_params_PREVIOUS,
event_params_previous_app_version,
event_params_previous_first_open_count,
event_params_previous_os_version,
event_params_PRICE,
event_params_product_id,
event_params_PROMOCODE,
event_params_promotion_id,
event_params_promotion_name,
event_params_QTY,
event_params_quantity,
event_params_RDATE,
event_params_RDMPTN,
event_params_result,
event_params_REVENUE,
event_params_ROUTE,
event_params_RT_ADT,
event_params_RT_CHD,
event_params_S7_FLIGHT,
event_params_S7_NSP,
event_params_S7_SPORT,
event_params_S7_TRAVEL,
event_params_S7_VZR,
event_params_SCREEN,
event_params_search_term,
event_params_SEAT,
event_params_SEAT_REVENUE,
event_params_segment,
event_params_session_engaged,
event_params_SESSION_ID,
event_params_slice,
event_params_slices,
event_params_SOCIAL,
event_params_source,
event_params_spa,
event_params_SPNR,
event_params_STATUS,
event_params_step,
event_params_stops,
event_params_stops_duration,
event_params_SUB,
event_params_SUB_WAY,
event_params_subCategoryCode,
event_params_subsidized,
event_params_SWITCH,
event_params_system_app,
event_params_system_app_update,
event_params_TAGID,
event_params_term,
event_params_THEME,
event_params_TICKETSTYPE,
event_params_TIME,
event_params_timestamp,
event_params_title,
event_params_TO,
event_params_transaction_id,
event_params_trueEventAction,
event_params_trueEventCategory,
event_params_tyapplicationpe,
event_params_TYPE,
event_params_UI,
event_params_unique_search_term,
event_params_update_with_analytics,
event_params_UPGRADE,
event_params_UPGRADE_REVENUE,
event_params_url,
event_params_User_ID,
event_params_ux,
event_params_ux_ui,
event_params_value,
event_params_version_code,
event_params_version_name,
event_params_video_current_time,
event_params_video_duration,
event_params_video_percent,
event_params_video_provider,
event_params_video_title,
event_params_video_url,
event_params_visible,
event_params_way,
event_params_wci_info_checkin,
event_params_wci_info_checked_in,
event_params_wci_info_bp_allowed,
event_params_wci_info_mbp_allowed,
event_params_WEIGHT,
event_params_arrival_date,
event_params_company_id,
event_params_finish_date,
event_params_ond,
event_params_products,
event_params_search_id,
event_params_search_payload,
event_params_start_date,
user_properties_Apple,
user_properties_Checkined,
user_properties_Facebook,
user_properties_Google,
user_properties_Instagram,
user_properties_Play_Services,
user_properties_Purchased,
user_properties_SavedCard,
user_properties_SavedCompanion,
user_properties_SavedDocument,
user_properties_SavedVisa,
user_properties_Settings_Currency,
user_properties_Settings_Settings_Push,
user_properties_Stats_Airport,
user_properties_Stats_City,
user_properties_Stats_Country,
user_properties_Tinkoff,
user_properties_User_Active_Flights,
user_properties_User_FFP_number,
user_properties_User_FFP_status,
user_properties_User_Profile_type,
user_properties_VK,
user_properties__ltv_RUB,
user_properties_active_flights,
user_properties_activeflights,
user_properties_build_type,
user_properties_device_id,
user_properties_firebase_exp_36,
user_properties_firebase_last_notification,
user_properties_first_open_time,
user_properties_ga_session_id,
user_properties_ga_session_number,
user_properties_idfa_consent,
user_properties_last_advertising_id_reset,
user_properties_last_gclid,
user_properties_profile_type,
user_properties_profiletype,
user_properties_user_id,
event_params_other_value,
event_params_wci_info,
user_first_date,
user_first_time,
event_params_exp,
event_params_coupon,
user_properties_profile_ab_group,
user_properties_user_pseudo_id,
event_params_part_cash_part_miles_flag,
event_params_item_list_name,
collected_traffic_source_manual_campaign_id,
collected_traffic_source_manual_campaign_name,
collected_traffic_source_manual_source,
collected_traffic_source_manual_medium,
collected_traffic_source_manual_term,
collected_traffic_source_manual_content,
collected_traffic_source_gclid,
collected_traffic_source_dclid,
collected_traffic_source_srsltid,
session_params_utm_source,
session_params_utm_medium,
session_params_utm_campaign,
session_params_utm_content,
session_params_utm_term,splits=1,tableDigest=-1068618140|TR EVENTS|3e58860e-0ce5-43f9-a83d-ee57dec1e1b1)].
There is also Trino can't work with it.
Additional context it seams there is no problem at all in clickhouse due to it "can" work with different spelling column names but it is a huge annoing to others and gives reason to hate clickhouse.
@YuriyGavrilov trying to understand is the issue on select/insert with JDBC driver
Hi @mzitnik, on select. Right after on clicking “preview” in Dremio.
@mzitnik I also make some short discussion with @alexey-milovidov about it. He suggest to plan features in server. To use search in case-insensitive namespace. Maybe better close this issue and open like a future feature in server tree.
Why this issue is Clickhouse specific? Other databases allows the same
postgresql:
select 1 result, 2 "RESULT", 3 "ReSuLt";
result | RESULT | ReSuLt
--------+--------+--------
1 | 2 | 3
mysql
MariaDB [dw]> select 1 result, 2 "RESULT", 3 "ReSuLt";
+--------+--------+--------+
| result | RESULT | ReSuLt |
+--------+--------+--------+
| 1 | 2 | 3 |
+--------+--------+--------+
duckdb
D select 1 result, 2 "RESULT", 3 "ReSuLt";
┌────────┬────────┬────────┐
│ result │ RESULT │ ReSuLt │
│ int32 │ int32 │ int32 │
├────────┼────────┼────────┤
│ 1 │ 2 │ 3 │
└────────┴────────┴────────┘
moreover, pg allows the same names
select 1 a, 2 a, 3 a;;
a | a | a
---+---+---
1 | 2 | 3
(1 row)
@den-crane right. but I think only clickhouse jdbc driver can't explain db how to work with the query results. So it make crazy query tools like Dremio, Trino, DBeaver ... etc.