Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

使用 ClickHouse 的 azureBlobStorage 表函数

这是将数据从 Azure Blob 存储或 Azure Data Lake Storage 复制到 ClickHouse 的最高效、最直接的方法之一。使用此表函数,您可以让 ClickHouse 直接连接到 Azure 存储,并按需读取数据。

它提供了类似表的接口,使您能够直接从源中选择、插入和过滤数据。该函数经过高度优化,支持许多常用文件格式,包括 CSVJSONParquetArrowTSVORCAvro 等。完整列表请参见 "数据格式"

在本节中,我们将通过一个简单的入门指南,介绍如何将数据从 Azure Blob 存储传输到 ClickHouse,以及有效使用此函数时需要注意的重要事项。有关更多详细信息和高级选项,请参阅官方文档: azureBlobStorage 表函数文档页面

获取 Azure Blob 存储访问密钥

要让 ClickHouse 访问你的 Azure Blob 存储,你需要一个包含访问密钥的连接字符串。

  1. 在 Azure 门户中,进入你的 存储帐户

  2. 在左侧菜单中,选择 安全 + 网络 部分下的 访问密钥

    Azure 数据存储设置
  3. 选择 key1key2,然后点击 连接字符串 字段旁边的 显示 按钮。

    Azure 数据存储访问密钥
  4. 复制该连接字符串——你将在 azureBlobStorage 表函数中将其用作参数。

从 Azure Blob 存储查询数据

打开您常用的 ClickHouse 查询控制台——可以是 ClickHouse Cloud Web 界面、ClickHouse 命令行客户端,或任何其他用于运行 查询的工具。准备好连接字符串和 ClickHouse 查询 控制台后,您就可以开始直接从 Azure Blob 存储查询数据。

在下面的示例中,我们将查询位于名为 data-container 的 容器中的 JSON 文件里存储的全部数据:

SELECT * FROM azureBlobStorage(
    '<YOUR CONNECTION STRING>',
    'data-container',
    '*.json',
    'JSONEachRow');

如果你想把这些数据复制到本地 ClickHouse 表中 (例如 my&#95;table) , 可以使用 INSERT INTO ... SELECT 语句:

INSERT INTO my_table
SELECT * FROM azureBlobStorage(
    '<YOUR CONNECTION STRING>',
    'data-container',
    '*.json',
    'JSONEachRow');

这样你就能高效地将外部数据导入 ClickHouse,而无需 经过中间的 ETL 步骤。

使用 Environmental Sensors 数据集的简单示例

作为示例,我们将从 Environmental Sensors 数据集中下载一个文件。

  1. Environmental Sensors 数据集 下载一个样本文件

  2. 在 Azure 门户中,如果你还没有存储帐户,请新建一个存储帐户。

  1. 在你的存储帐户中创建一个新容器。在本示例中,我们将其命名为 sensors。 如果你使用的是现有容器,则可以跳过此步骤。

  2. 将之前下载的 2019-06_bmp180.csv.zst 文件上传到该 容器。

  3. 按照前文所述的步骤,获取 Azure Blob 存储 连接字符串。

完成以上设置后,你就可以直接从 Azure Blob 存储查询数据:

    SELECT *
    FROM azureBlobStorage(
        '<YOUR CONNECTION STRING>', 
        'sensors',
        '2019-06_bmp180.csv.zst', 
        'CSVWithNames')
    LIMIT 10
    SETTINGS format_csv_delimiter = ';'
  1. 要将数据加载到表中,请创建原始数据集中所用 schema 的简化版本:
    CREATE TABLE sensors
    (
        sensor_id UInt16,
        lat Float32,
        lon Float32,
        timestamp DateTime,
        temperature Float32
    )
    ENGINE = MergeTree
    ORDER BY (timestamp, sensor_id);
  1. 现在将 Azure Blob 存储中的数据插入 sensors 表:
    INSERT INTO sensors
    SELECT sensor_id, lat, lon, timestamp, temperature
    FROM azureBlobStorage(
        '<YOUR CONNECTION STRING>', 
        'sensors',
        '2019-06_bmp180.csv.zst', 
        'CSVWithNames')
    SETTINGS format_csv_delimiter = ';'

现在,sensors 表中已包含存储在 Azure Blob 存储中的 2019-06_bmp180.csv.zst 文件数据。

其他资源

这只是对如何使用 azureBlobStorage 函数的基础介绍。有关 更多高级选项和配置细节,请参阅官方 文档:

Navigation