跳到主要内容
跳到主要内容

SQL 控制台

SQL 控制台是在 ClickHouse Cloud 中探索和查询数据库的最快、最便捷方式。可以使用 SQL 控制台:

  • 连接到 ClickHouse Cloud 服务
  • 查看、过滤和排序表数据
  • 执行查询,并只需几次点击即可将结果数据可视化
  • 与团队成员共享查询,更高效地协作

浏览表

查看表列表和表结构信息

可以在左侧边栏区域查看 ClickHouse 实例中包含的表的概览。使用左侧边栏顶部的数据库选择器来查看特定数据库中的表。

表列表和表结构视图,在左侧侧边栏中显示数据库表

列表中的表也可以展开,以查看列及其数据类型。

展开的表视图,显示列名和数据类型

浏览表数据

在列表中点击某个表,会在新标签页中打开它。在表视图(Table View)中,可以轻松查看、选择和复制数据。请注意,将数据复制粘贴到 Microsoft Excel、Google Sheets 等电子表格应用程序时,表的结构和格式都会被保留。你可以使用页脚中的导航在各页表数据之间切换(每页 30 行)。

显示可选择和复制数据的表视图

检查单元格数据

可以使用 Cell Inspector 工具查看单个单元格中包含的大量数据。要打开该工具,在某个单元格上单击鼠标右键并选择“Inspect Cell”。要复制单元格检查器中的内容,单击检查器内容区域右上角的复制图标即可。

单元格检查器对话框,显示所选单元格的内容

筛选和排序数据表

对表进行排序

要在 SQL 控制台中对表进行排序,打开一个表并在工具栏中选择“Sort”按钮。此按钮会打开一个菜单,你可以在其中配置排序。你可以选择要用于排序的列,并配置排序顺序(升序或降序)。选择“Apply”或按 Enter 键即可对表进行排序。

排序对话框显示了在某列上配置降序排序

SQL 控制台还允许你为一个表添加多个排序条件。再次单击“Sort”按钮即可添加另一个排序。注意:排序会按照它们在排序面板中出现的顺序(从上到下)依次应用。要删除某个排序,只需单击该排序旁边的“x”按钮即可。

筛选表格

要在 SQL 控制台中筛选表数据,打开一个表并选择 “Filter” 按钮。与排序类似,该按钮会打开一个菜单,用于配置筛选条件。可以选择要作为筛选依据的列,并设置相应条件。SQL 控制台会智能显示与该列数据类型相匹配的筛选选项。

过滤对话框显示了将 radio 列筛选为等于 GSM 的配置

在对筛选条件满意后,选择 “Apply” 即可应用筛选。也可以按照下图所示添加其他筛选条件。

对话框显示了如何添加一个范围大于 2000 的额外筛选条件

与排序功能类似,点击筛选条件旁边的 “x” 按钮即可将其移除。

同时进行筛选和排序

SQL 控制台允许你同时对表进行筛选和排序。要实现这一点,请按照上文所述步骤添加所有需要的筛选条件和排序规则,然后点击 “Apply” 按钮。

界面显示同时应用了筛选和排序

通过筛选和排序创建查询

SQL 控制台可以一键将当前的排序和筛选条件直接转换为查询。只需在工具栏中设置好所需的排序和筛选条件,然后点击 “Create Query” 按钮。点击 “Create Query” 后,会打开一个新的查询选项卡,并预先填充与当前表视图中数据对应的 SQL 命令。

界面显示了 Create Query 按钮,可根据筛选和排序生成 SQL
注意

使用 “Create Query” 功能时,并不必须设置任何筛选或排序条件。

你可以通过阅读 (link) 查询文档,进一步了解如何在 SQL 控制台中进行查询。

编写并运行查询

创建查询

在 SQL 控制台中有两种方式可以创建新查询。

  • 点击标签栏中的 “+” 按钮
  • 在左侧边栏的查询列表中选择 “New Query” 按钮
界面展示如何通过 “+” 按钮或 “New Query” 按钮创建新查询

运行查询

要运行查询,在 SQL 编辑器中输入 SQL 命令,然后点击 “Run” 按钮或使用快捷键 cmd / ctrl + enter。要按顺序编写并运行多个命令,请确保在每个命令后添加分号。

查询执行选项
默认情况下,点击 “Run” 按钮会运行 SQL 编辑器中包含的所有命令。SQL 控制台还支持另外两种查询执行选项:

  • 运行选中的命令
  • 运行光标所在处的命令

要运行选中的命令,先选中所需的命令或命令序列,然后点击 “Run” 按钮(或使用快捷键 cmd / ctrl + enter)。当存在选中内容时,你也可以在 SQL 编辑器的上下文菜单中(在编辑器任意位置右键打开)选择 “Run selected”。

展示如何运行选中部分 SQL 查询的界面

在当前光标位置运行命令可以通过两种方式完成:

  • 在扩展运行选项菜单中选择 “At Cursor”(或使用对应的快捷键 cmd / ctrl + shift + enter
扩展运行选项菜单中的 Run at cursor 选项
  • 在 SQL 编辑器的上下文菜单中选择 “Run at cursor”
SQL Editor 上下文菜单中的 Run at cursor 选项
注意

执行时,光标位置处的命令会短暂以黄色闪烁。

取消查询

当查询正在执行时,查询编辑器工具栏中的“Run”按钮会被替换为“Cancel”按钮。只需单击此按钮或按下 Esc 键即可取消该查询。注意:在取消之前已经返回的任何结果在取消后仍将保留。

查询执行期间显示的取消按钮

保存查询

如果尚未命名,你的查询会被称为“Untitled Query”。单击查询名称即可修改。重命名查询时会自动保存该查询。

展示如何将查询从 Untitled Query 重命名的界面

你也可以使用保存按钮或 cmd / ctrl + s 快捷键来保存查询。

查询编辑器工具栏中的保存按钮

使用 GenAI 管理查询

此功能允许你以自然语言问句的形式编写查询,由查询控制台根据可用表的上下文生成相应的 SQL 查询。GenAI 也可以帮助你调试查询。

有关 GenAI 的更多信息,请参阅 Announcing GenAI powered query suggestions in ClickHouse Cloud blog post

表设置

我们先导入英国房产成交价格示例数据集,并基于该数据集创建一些 GenAI 查询。

  1. 打开一个 ClickHouse Cloud 服务。

  2. 点击 + 图标创建一个新查询。

  3. 粘贴并运行以下代码:

    CREATE TABLE uk_price_paid
    (
        price UInt32,
        date Date,
        postcode1 LowCardinality(String),
        postcode2 LowCardinality(String),
        type Enum8('terraced' = 1, 'semi-detached' = 2, 'detached' = 3, 'flat' = 4, 'other' = 0),
        is_new UInt8,
        duration Enum8('freehold' = 1, 'leasehold' = 2, 'unknown' = 0),
        addr1 String,
        addr2 String,
        street LowCardinality(String),
        locality LowCardinality(String),
        town LowCardinality(String),
        district LowCardinality(String),
        county LowCardinality(String)
    )
    ENGINE = MergeTree
    ORDER BY (postcode1, postcode2, addr1, addr2);
    

    此查询大约需要 1 秒钟完成。完成后,您将得到一个名为 uk_price_paid 的空表。

  4. 创建一个新查询并粘贴以下查询:

    INSERT INTO uk_price_paid
    WITH
       splitByChar(' ', postcode) AS p
    SELECT
        toUInt32(price_string) AS price,
        parseDateTimeBestEffortUS(time) AS date,
        p[1] AS postcode1,
        p[2] AS postcode2,
        transform(a, ['T', 'S', 'D', 'F', 'O'], ['terraced', 'semi-detached', 'detached', 'flat', 'other']) AS type,
        b = 'Y' AS is_new,
        transform(c, ['F', 'L', 'U'], ['freehold', 'leasehold', 'unknown']) AS duration,
        addr1,
        addr2,
        street,
        locality,
        town,
        district,
        county
    FROM url(
        'http://prod.publicdata.landregistry.gov.uk.s3-website-eu-west-1.amazonaws.com/pp-complete.csv',
        'CSV',
        'uuid_string String,
        price_string String,
        time String,
        postcode String,
        a String,
        b String,
        c String,
        addr1 String,
        addr2 String,
        street String,
        locality String,
        town String,
        district String,
        county String,
        d String,
        e String'
    ) SETTINGS max_http_get_redirects=10;
    

此查询会从 gov.uk 网站获取数据集。该文件大小约为 4GB,因此此查询将需要几分钟才能完成。ClickHouse 处理完查询后,您将在 uk_price_paid 表中获得完整的数据集。

创建查询

让我们使用自然语言来创建一个查询。

  1. 选择 uk_price_paid 表,然后点击 Create Query

  2. 点击 Generate SQL。系统可能会要求您同意将您的查询发送到 Chat-GPT。您必须选择 I agree 才能继续。

  3. 现在您可以在提示中输入自然语言查询,由 ChatGPT 将其转换为 SQL 查询。本示例中,我们将输入:

    Show me the total price and total number of all uk_price_paid transactions by year.

  4. 控制台会生成我们需要的查询,并在新选项卡中显示。在我们的示例中,GenAI 创建了如下查询:

    -- Show me the total price and total number of all uk_price_paid transactions by year.
    SELECT year(date), sum(price) as total_price, Count(*) as total_transactions
    FROM uk_price_paid
    GROUP BY year(date)
    
  5. 在您确认查询无误之后,点击 Run 运行它。

调试

现在,让我们测试一下 GenAI 的查询调试功能。

  1. 点击 + 图标创建一个新查询,并粘贴以下代码:

    -- Show me the total price and total number of all uk_price_paid transactions by year.
    SELECT year(date), sum(pricee) as total_price, Count(*) as total_transactions
    FROM uk_price_paid
    GROUP BY year(date)
    
  2. 点击 Run。查询失败,是因为我们尝试从 pricee 而不是 price 获取值。

  3. 点击 Fix Query

  4. GenAI 会尝试修复查询。在这个例子中,它将 pricee 改成了 price,并且判断在这种场景下使用 toYear 是更合适的函数。

  5. 选择 Apply 将推荐的更改应用到查询中,然后点击 Run

请注意,GenAI 是一项实验性功能。在针对任何数据集运行由 GenAI 生成的查询时,请谨慎操作。

高级查询功能

搜索查询结果

在查询执行完成后,你可以使用结果面板中的搜索输入框快速搜索返回的结果集。此功能有助于预览额外 WHERE 子句的结果,或简单检查结果集中是否包含特定数据。在搜索输入框中输入一个值后,结果面板会更新并返回所有包含与该输入值匹配条目的记录。在本示例中,我们在 hackernews 表中查询出评论内容中(不区分大小写)包含 ClickHouse 的记录,然后在结果中查找所有出现 breakfast 的实例:

Search Hacker News Data

注意:任何字段只要匹配输入的值都会被返回。例如,在上面的截图中,第三条记录在 by 字段中并不匹配 “breakfast”,但在 text 字段中匹配到了:

Match in body

调整分页设置

默认情况下,查询结果窗格会在单个页面上显示所有结果记录。对于较大的结果集,为了更便于查看,可以对结果进行分页。可以使用结果窗格右下角的分页选择器来完成此操作:

分页选项

选择页面大小后,会立即对结果集应用分页,并且导航选项会显示在结果窗格底部中间位置。

分页导航

导出查询结果数据

在 SQL 控制台中,你可以直接将查询结果集导出为 CSV 格式。具体操作是在结果窗格工具栏右侧点击 ••• 菜单,然后选择“Download as CSV”。

Download as CSV

可视化查询数据

有些数据以图表形式展示更便于理解。你可以在 SQL 控制台中直接基于查询结果数据,通过几次点击就快速创建可视化图表。下面以一个示例查询为例,该查询用于计算纽约市出租车行程的每周统计数据:

SELECT
   toStartOfWeek(pickup_datetime) AS week,
   sum(total_amount) AS fare_total,
   sum(trip_distance) AS distance_total,
   count(*) AS trip_total
FROM
   nyc_taxi
GROUP BY
   1
ORDER BY
   1 ASC
表格查询结果

如果没有可视化,这些结果不易解读。让我们把它们转换成图表。

创建图表

要开始构建可视化,从查询结果面板的工具栏中选择 “Chart” 选项。此时会出现一个图表配置面板:

从查询切换到图表

我们先创建一个简单的条形图,用于按 week 跟踪 trip_total。为此,将 week 字段拖到 x 轴,将 trip_total 字段拖到 y 轴:

按周统计行程总额

大多数图表类型都支持在数值坐标轴上放置多个字段。作为示例,我们将 fare_total 字段拖到 y 轴上:

条形图

自定义图表

SQL 控制台支持十种图表类型,可以在图表配置面板中的图表类型选择器中进行选择。比如,我们可以轻松地将前一个图表的类型从柱状图(Bar)更改为面积图(Area):

从柱状图更改为面积图

图表标题与提供数据的查询名称保持一致。更新查询名称时,图表标题也会随之更新:

更新查询名称

还可以在图表配置面板的“高级”部分调整更多图表的高级属性。首先,我们将调整以下设置:

  • 副标题
  • 坐标轴标题
  • x 轴标签方向

图表会相应更新:

更新副标题等

在某些情况下,可能需要分别调整每个字段的坐标轴刻度。这也可以通过在图表配置面板的“高级”部分为坐标轴范围指定最小值和最大值来完成。举例来说,上面的图表整体效果不错,但为了展示 trip_totalfare_total 字段之间的相关性,需要对坐标轴范围进行一些调整:

调整坐标轴刻度

共享查询

SQL 控制台允许您与团队共享查询。查询共享后,团队中的所有成员都可以查看和编辑该查询。共享查询是与团队协作的有效方式。

要共享查询,请单击查询工具栏中的“Share”按钮。

查询工具栏中的 Share 按钮

此时会弹出一个对话框,您可以将查询共享给某个团队的所有成员。如果您有多个团队,可以选择要将查询共享到哪个团队。

用于编辑共享查询访问权�限的对话框
用于向共享查询添加团队的界面
用于编辑成员对共享查询访问权限的界面

在某些场景下,可能需要分别调整每个字段的坐标轴范围。这也可以在图表配置面板的“Advanced”部分中,通过为坐标轴范围指定最小值和最大值来完成。比如,上面的图表整体效果不错,但如果要更好地展示 trip_totalfare_total 字段之间的相关性,则需要对坐标轴范围进行一些调整:

查询列表中的 Shared with me 区域