Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change SHOW COLUMNS query to display MySQL types in MySQL Compatibility mode #49577

Merged
merged 25 commits into from Jun 21, 2023

Conversation

tpanetti
Copy link
Contributor

@tpanetti tpanetti commented May 5, 2023

This updates the SHOW COLUMN SQL query to display MySQL types when this query is issued by a client connected via MySQL Compatibility port

Changelog category (leave one):

  • New Feature

Changelog entry (a user-readable short description of the changes that goes to CHANGELOG.md):

Add a new setting named use_mysql_types_in_show_columns to alter the SHOW COLUMNS SQL statement to display MySQL equivalent types when a client is connected via the MySQL compatibility port.

Documentation entry for user-facing changes

  • Documentation is written (mandatory for new features)

Motivation: This functionality is useful for ClickHouse users as it allows tools that use standard MySQL connectors to read and parse ClickHouse data as if it were MySQL. This is particularly useful for data analytics tools such as QuickSights and Looker Studio.
Parameters: No arguments or parameters are needed, this type conversion is done when a client is connected via the MySQL port. Specifically, the implementation happens when the client is connected to whatever port the configuration has set for MySQL compatibility.
Example use:
SHOW FULL COLUMNS

I've attached an image of Amazon QuickSight parsing a ClickHouse database with example cell_towers data with this code change.

Information about CI checks: https://clickhouse.com/docs/en/development/continuous-integration/

Screenshot 2023-05-05 at 12 13 27 PM

Closes #49168

…ty mode

This updates the SHOW COLUMN SQL query to display MySQL types when this
query is issued by a client connected via MySQL Compatibility port
@CLAassistant
Copy link

CLAassistant commented May 5, 2023

CLA assistant check
All committers have signed the CLA.

@robot-ch-test-poll robot-ch-test-poll added the pr-backward-incompatible Pull request with backwards incompatible changes label May 5, 2023
@robot-ch-test-poll
Copy link
Contributor

robot-ch-test-poll commented May 5, 2023

This is an automated comment for commit dbdf77c with description of existing statuses. It's updated for the latest CI running
The full report is available here
The overall status of the commit is 🔴 failure

Check nameDescriptionStatus
AST fuzzerRuns randomly generated queries to catch program errors. The build type is optionally given in parenthesis. If it fails, ask a maintainer for help🟢 success
CI runningA meta-check that indicates the running CI. Normally, it's in success or pending state. The failed status indicates some problems with the PR🟢 success
ClickHouse build checkBuilds ClickHouse in various configurations for use in further steps. You have to fix the builds that fail. Build logs often has enough information to fix the error, but you might have to reproduce the failure locally. The cmake options can be found in the build log, grepping for cmake. Use these options and follow the general build process🟢 success
Compatibility checkChecks that clickhouse binary runs on distributions with old libc versions. If it fails, ask a maintainer for help🟢 success
Docker image for serversThe check to build and optionally push the mentioned image to docker hub🟢 success
Fast testNormally this is the first check that is ran for a PR. It builds ClickHouse and runs most of stateless functional tests, omitting some. If it fails, further checks are not started until it is fixed. Look at the report to see which tests fail, then reproduce the failure locally as described here🟢 success
Flaky testsChecks if new added or modified tests are flaky by running them repeatedly, in parallel, with more randomization. Functional tests are run 100 times with address sanitizer, and additional randomization of thread scheduling. Integrational tests are run up to 10 times. If at least once a new test has failed, or was too long, this check will be red. We don't allow flaky tests, read the doc🟢 success
Install packagesChecks that the built packages are installable in a clear environment🟢 success
Integration testsThe integration tests report. In parenthesis the package type is given, and in square brackets are the optional part/total tests🔴 failure
Mergeable CheckChecks if all other necessary checks are successful🟢 success
Performance ComparisonMeasure changes in query performance. The performance test report is described in detail here. In square brackets are the optional part/total tests🟢 success
Push to DockerhubThe check for building and pushing the CI related docker images to docker hub🟢 success
SQLancerFuzzing tests that detect logical bugs with SQLancer tool🟢 success
SqllogicRun clickhouse on the sqllogic test set against sqlite and checks that all statements are passed🟢 success
Stateful testsRuns stateful functional tests for ClickHouse binaries built in various configurations -- release, debug, with sanitizers, etc🟢 success
Stateless testsRuns stateless functional tests for ClickHouse binaries built in various configurations -- release, debug, with sanitizers, etc🔴 failure
Stress testRuns stateless functional tests concurrently from several clients to detect concurrency-related errors🟢 success
Style CheckRuns a set of checks to keep the code style clean. If some of tests failed, see the related log from the report🟢 success
Unit testsRuns the unit tests for different release types🟢 success
Upgrade checkRuns stress tests on server version from last release and then tries to upgrade it to the version from the PR. It checks if the new server can successfully startup without any errors, crashes or sanitizer asserts🟢 success

@alexey-milovidov alexey-milovidov added the can be tested Allows running workflows for external contributors label May 5, 2023
@alexey-milovidov alexey-milovidov marked this pull request as draft May 5, 2023 22:26
@alexey-milovidov alexey-milovidov self-assigned this May 5, 2023
…ty mode

This updates the SHOW COLUMN SQL query to display MySQL types when this
query is issued by a client connected via MySQL Compatibility port
This changes MySQL compatibility mode to display MySQL compatible types
This adjusts specific incompatible ClickHouse types to a format that can
be read and interpreted by MySQL (Ex: Int128 -> text)
@tpanetti
Copy link
Contributor Author

Refactored to a more scalable method of implementation via the IDataType interface. Added @rschu1ze as an additional reviewer after discussions with him about this change. For incompatible types (eg int64, int128) I chose to default to text for compatibility with BI tools, this may warrant further discussion though.

@tpanetti tpanetti marked this pull request as ready for review May 31, 2023 22:59
@alexey-milovidov
Copy link
Member

Ok. Need to fix the test. Copy-paste the initialization header from similar .sh tests.

@alexey-milovidov
Copy link
Member

Let's rename getMySQLName to getSQLCompatibleName, and change the returned value to ALL CAPS (TEXT, etc).

This changes the function name for MySQL Compatible types from getMySQLName to getSQLCompatibleName and changes the casing of the types to upper
This renames the setting for MySQL compatible types from output_format_mysql_types to use_mysql_types_in_show_columns
Copy link
Member

@rschu1ze rschu1ze left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lgtm (thanks) but the tests still fail in a weird way.

E.g. here: https://s3.amazonaws.com/clickhouse-test-reports/49577/cb8c20722b8976fe0bc402498667b02c2585cc02/stateless_tests_flaky_check__asan_.html

I did not check deeper but there can be a race on database name database_123456789abcde when the test runs in parallel. You could use tag "no-parallel" at the top of the test file to suppress parallel execution.

@tavplubix tavplubix added the do not test disable testing on pull request label Jun 14, 2023

echo "Drop tables if they exist"
${CLICKHOUSE_LOCAL} --query "DROP TABLE IF EXISTS tab"
${CLICKHOUSE_LOCAL} --query "DROP TABLE IF EXISTS database_123456789abcde"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
${CLICKHOUSE_LOCAL} --query "DROP TABLE IF EXISTS database_123456789abcde"
${CLICKHOUSE_LOCAL} --query "DROP DATABASE IF EXISTS database_123456789abcde"

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed

@tpanetti tpanetti removed the do not test disable testing on pull request label Jun 14, 2023
@rschu1ze
Copy link
Member

ClickHouse Integration Tests (asan) [6/6]:

ClickHouse Stateless Tests (debug) [2/5]

@rschu1ze rschu1ze merged commit 9b959eb into ClickHouse:master Jun 21, 2023
255 of 257 checks passed

echo "Drop tables if they exist"
${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS tab"
${CLICKHOUSE_CLIENT} --query "DROP DATABASE IF EXISTS database_123456789abcdef"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no-parallel can be removed and ${CLICKHOUSE_DATABASE} can be used to get the unique generated database for this test.

@antonio2368
Copy link
Member

@tpanetti good job on the first merged PR!

Can you modify the Changelog category in the description because of the setting it's not Backward Incompatible Change anymore.
Also, you can mention the setting in the changelog description so it's easier for people to find how to use it.

@alexey-milovidov alexey-milovidov removed the pr-backward-incompatible Pull request with backwards incompatible changes label Jun 23, 2023
@alexey-milovidov
Copy link
Member

Documentation is written (mandatory for new features)

Checked as it is written in the code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
can be tested Allows running workflows for external contributors pr-backports-created-cloud pr-must-backport-cloud
Projects
None yet
Development

Successfully merging this pull request may close these issues.

MySQL compatibility: native type aliases
10 participants