当前位置: 首页 > news >正文

Clickhouse 外部存储引擎

文章目录

  • 外部存储引擎分类
    • MySQL引擎
    • PostgreSQL引擎
    • MongoDB引擎
    • JDBC引擎
    • ODBC引擎
    • Kafka引擎
    • RabbitMQ引擎
    • File引擎
    • URL引擎
    • HDFS引擎


外部存储引擎分类

引擎类型描述特点
MySQL从 MySQL 数据库中读取数据用于与 MySQL 数据库共享数据,支持读取 MySQL 表中的数据
支持 SQL 语法,适合进行联合查询
PostgreSQL从 PostgreSQL 数据库中读取数据用于与 PostgreSQL 数据库共享数据,支持读取 PostgreSQL 表中的数据
支持 SQL 语法,适合进行联合查询
MongoDB从 MongoDB 数据库中读取数据用于与MongoDB数据库共享数据,支持读取MongoDB表中的数据
支持 SQL 语法,适合进行联合查询
JDBC通过 JDBC 接口连接到外部数据库(如Oracle、MySQL、PostgreSQL等)允许通过 JDBC 连接多种数据库
适合与各种关系型数据库系统集成
ODBC通过 ODBC 接口连接到外部数据库(如Oracle、MySQL、PostgreSQL等)允许通过 ODBC 连接多种数据库
适合与各种关系型数据库系统集成
Kafka从Apache Kafka 消息队列系统读取实时流数据用于实时数据流分析,支持高吞吐量
适合处理大规模、实时的消息流数据
RabbitMQ从RabbitMQ 消息队列系统读取数据支持从 RabbitMQ 队列中实时读取消息数据
用于流式数据处理和消息队列集成
File从本地或远程文件系统读取数据适用于读取写入文件数据,如 CSV、TSV、JSON 等格式
URL通过 URL 从外部 Web 资源获取数据支持通过 HTTP 或 HTTPS 协议从指定 URL 获取数据,适用于从外部网页、API 或文件中读取数据
支持不同的格式(如 JSON、XML、HTML 等),可以通过 GET 或 POST 请求获取数据,适合与外部 Web 服务、RESTful API 集成
HDFS从 Hadoop 分布式文件系统(HDFS)读取数据用于大数据存储和处理,适合与 Hadoop 生态系统集成。
支持读取大规模文件(如 Parquet、ORC、Avro)

MySQL引擎

MySQL 引擎允许从 MySQL 数据库中读取数据。它提供了一种与 MySQL 数据库进行集成的方式,尤其在需要从 MySQL 中实时获取数据时非常有用。该引擎通过在 ClickHouse 中创建外部表来实现与 MySQL 数据库的交互。

使用场景:

  • 与现有 MySQL 系统集成:如果你已经在使用 MySQL 作为业务数据库,可以通过 ClickHouse 的 MySQL 引擎来进行高效的数据分析,而不必将数据迁移到 ClickHouse。
  • 跨平台数据共享:适用于跨平台或跨数据库系统的数据共享,例如在 MySQL 和 ClickHouse 之间同步数据,进行联合查询分析。
  • 报表与实时分析:MySQL 数据库可能用于存储事务数据,而 ClickHouse 可以对这些数据进行实时分析,生成报表或进行 OLAP 查询。

支持功能:

  • 读取数据:通过 MySQL 引擎,ClickHouse 可以从 MySQL 数据库中读取数据进行分析。
  • 简单的查询操作:支持常规的 SQL 查询语法,如 SELECT, WHERE, JOIN 等。
  • 实时数据访问:ClickHouse 与 MySQL 的连接是实时的,查询会直接访问 MySQL 数据库中的数据,而不是通过静态导入。
  • 不支持写入:通过 MySQL 引擎创建的表仅支持从 MySQL 读取数据,无法向 MySQL 表中写入数据。如果需要写入操作,可以使用其他工具或方法进行数据迁移。

注意事项:

  • 延迟和吞吐量:由于 ClickHouse 是面向 OLAP(联机分析处理)设计的,而 MySQL 更适合 OLTP(联机事务处理)场景,使用 MySQL 引擎读取数据时可能会受到 MySQL 性能的限制,尤其是当查询涉及大量数据时。
  • 网络延迟:如果 MySQL 数据库与 ClickHouse 部署在不同的网络环境中,网络延迟可能会影响查询性能。

基本语法:

CREATE TABLE mysql_table
(column1 DataType,	-- 列名需要与mysql的列名保持一致column2 DataType,...
)
ENGINE = MySQL('mysql_host:port', 'database_name', 'table_name', 'user', 'password')

使用示例:

create table test_MySQL
(id       Int64,name     String,log      Decimal(10, 6),lat      Decimal(10, 6),crt_time DateTime
)engine = MySQL('127.0.0.1:3306', 'xxok', 'region_log_lat', 'root', '111111');

PostgreSQL引擎

PostgreSQL 引擎允许 ClickHouse 直接读取 PostgreSQL 数据库中的数据。通过这个引擎,可以在 ClickHouse 中使用类似 SQL 查询的方式访问 PostgreSQL 中存储的数据,尤其适用于需要从 PostgreSQL 数据库中获取数据并进行 OLAP(联机分析处理)操作的场景。

使用场景:

  • 与现有 PostgreSQL 系统集成:如果你的系统已经在使用 PostgreSQL 作为主要数据库,可以利用 ClickHouse 的 PostgreSQL 引擎进行大规模的分析,而无需迁移数据。
  • 跨系统数据共享:适用于在 ClickHouse 和 PostgreSQL 之间进行数据共享和联合查询。例如,你可以在 ClickHouse 中创建外部表,查询 PostgreSQL 数据库中的数据,同时利用 ClickHouse 的 OLAP 特性进行高效分析。
  • 报表与实时分析:PostgreSQL 通常用于存储事务性数据,而 ClickHouse 适合进行高效的实时数据分析。可以利用 ClickHouse 进行报表生成、数据分析等任务。

支持功能:

  • 读取数据:通过 PostgreSQL 引擎,ClickHouse 可以从 PostgreSQL 数据库中读取数据进行分析。
  • 常规查询:支持标准 SQL 查询语法,包括 SELECT、WHERE、JOIN 等。
  • 实时数据访问:ClickHouse 与 PostgreSQL 的连接是实时的,查询会直接访问 PostgreSQL 数据库中的最新数据。
  • 不支持写入:通过 PostgreSQL 引擎创建的表只能用于读取数据,无法向 PostgreSQL 表中写入数据。如果需要写入操作,可以使用其他工具进行数据迁移或同步。

注意事项:

  • 延迟和吞吐量:ClickHouse 是为 OLAP 场景优化的,而 PostgreSQL 更适合 OLTP(联机事务处理)场景。因此,使用 PostgreSQL 引擎- 时可能会受到 PostgreSQL 数据库性能的限制,尤其是在查询大数据量时。
  • 网络延迟:如果 ClickHouse 和 PostgreSQL 部署在不同的网络环境中,网络延迟可能会影响查询性能,尤其是在大数据量查询时。
  • 数据同步问题:由于查询数据是通过实时连接获取的,可能会受到 PostgreSQL 负载的影响,导致查询延迟。

基本语法:

CREATE TABLE mysql_table
(column1 DataType,	-- 列名需要与PostgreSQL的列名保持一致column2 DataType,...
)
ENGINE = PostgreSQL('PostgreSQL_host:port', 'database_name', 'table_name', 'user', 'password')

使用示例:

create table test_PostgreSQL
(id       Int64,name     String,log      Decimal(10, 6),lat      Decimal(10, 6),crt_time DateTime
)engine = PostgreSQL('127.0.0.1:5432', 'npm', 'region_log_lat', 'postgres', '111111');

MongoDB引擎

MongoDB 引擎(Mongo 引擎)允许用户直接从 MongoDB 数据库读取数据,并将其作为外部数据源在 ClickHouse 中执行查询和分析。MongoDB 是一个文档数据库,通常用于存储半结构化的 JSON 数据,而 ClickHouse 是一个列式数据库,擅长大规模的数据分析任务。通过 MongoDB 引擎,ClickHouse 可以高效地从 MongoDB 中读取数据,并结合 ClickHouse 的 OLAP(联机分析处理)能力进行快速查询和分析。

使用场景:

  • 与现有 MongoDB 系统集成: 如果你的系统已经使用 MongoDB 存储数据,可以利用 ClickHouse 的 MongoDB 引擎直接查询 MongoDB 数据库中的数据,进行高效的分析,而无需将数据迁移到 ClickHouse。
  • 跨系统数据共享: MongoDB 和 ClickHouse 是不同类型的数据库,它们各自有独特的优势。使用 MongoDB 引擎,可以方便地在两者之间共享数据,例如,在 ClickHouse 中创建外部表,通过 SQL 查询 MongoDB 中的数据,同时利用 ClickHouse 的列式存储和聚合性能来提高查询效率。
  • 实时数据分析: MongoDB 通常存储业务应用的实时数据,而 ClickHouse 擅长 OLAP 查询。通过 MongoDB 引擎,可以在 ClickHouse 中对 MongoDB 中存储的实时数据进行快速查询和分析,支持业务报表和实时分析。

支持功能:

  • 读取数据: MongoDB 引擎允许 ClickHouse 直接读取 MongoDB 中的数据,可以执行 SQL 查询语句从 MongoDB 中提取数据进行分析。
  • 常规查询: 支持标准 SQL 查询,包括 SELECT、WHERE、JOIN、GROUP BY 等常用操作,允许用户对 MongoDB 中的数据进行灵活分析。
  • 实时数据访问: ClickHouse 会实时连接到 MongoDB 数据库进行查询,确保查询到的数据是最新的。
  • 不支持写入: 目前,MongoDB 引擎仅支持从 MongoDB 中读取数据,不能向 MongoDB 表中写入数据。如果需要将数据写入 MongoDB,可以使用其他工具进行数据迁移或同步。

注意事项:

  • 查询延迟和吞吐量: 由于 ClickHouse 是为 OLAP 场景优化的,而 MongoDB 更适合存储非结构化的、频繁更新的文档数据,使用 MongoDB 引擎时可能会面临查询性能上的限制,尤其是在数据量较大时。
  • 网络延迟: 如果 ClickHouse 和 MongoDB 部署在不同的网络环境中,网络延迟可能会影响查询性能,尤其是在大数据量查询时。
  • MongoDB 数据模型: MongoDB 使用文档模型存储数据,数据通常是嵌套的或包含数组类型,这要求用户在创建 ClickHouse 表时根据 MongoDB 数据结构进行适配,尤其是在处理嵌套文档或数组时。
  • 数据同步问题: 由于 MongoDB 引擎是实时连接到 MongoDB 的,这意味着如果 MongoDB 负载较高或存在写入操作,可能会影响 ClickHouse 查询的响应速度。

基本语法:

CREATE TABLE mongo_table
(column1 DataType,      -- 列名需要与 MongoDB 的列名保持一致column2 DataType,...
)
ENGINE = Mongo('mongodb_host:port', 'database_name', 'collection_name', 'user', 'password')
  • mongodb_host:port:MongoDB 实例的主机地址和端口。
  • database_name:MongoDB 数据库名称。
  • collection_name:MongoDB 中的集合名称(类似关系型数据库中的表)。
  • user:MongoDB 的用户名(如需要认证)。
  • password:MongoDB 的密码(如需要认证)。

使用示例:

create table test_MongoDB
(id       Int64,name     String,log      Decimal(10, 6),lat      Decimal(10, 6),crt_time DateTime
)engine = MongoDB('127.0.0.1:27017', 'user', 'region_log_lat', 'admin', 'abc11111');

JDBC引擎

JDBC 引擎 允许通过 Java Database Connectivity (JDBC) 连接到外部的关系型数据库(如 MySQL、PostgreSQL、Oracle、SQL Server 等)。通过这个引擎,ClickHouse 可以访问和查询其他数据库中的数据。JDBC 引擎是为了解决跨数据库查询和数据集成问题,使得 ClickHouse 用户能够在不将数据迁移到 ClickHouse 本地的情况下,直接查询外部数据库中的数据。

需要注意: JDBC 引擎依赖外部程序clickhouse-jdbc-bridge ,clickhouse-jdbc-bridge 是用于在 ClickHouse 和外部数据库(如 MySQL)之间进行数据交互的桥接服务,如果该服务没有启动,你将无法使用 JDBC 引擎连接到 MySQL 数据库。

使用场景:

  • 跨数据库查询:在多数据源环境中,ClickHouse 可以通过 JDBC 引擎读取不同数据库(如 MySQL、Oracle 等)中的数据,进行联合查询和分析。适合需要跨多个系统汇总数据的场景。
  • 与现有关系型数据库集成:如果你的业务已经依赖某些传统的关系型数据库(如 MySQL、PostgreSQL 等),但又需要使用 ClickHouse 进行大规模的数据分析,JDBC 引擎可以帮助你在不迁移数据的情况下,利用 ClickHouse 的 OLAP 特性进行高效分析。
  • 报表与实时分析:对于需要生成实时报表或进行即时数据分析的场景,JDBC 引擎提供了一种无缝集成的方式,可以直接从关系型数据库中读取数据并进行分析。

支持功能:

  • 读取数据:JDBC 引擎允许 ClickHouse 从其他关系型数据库读取数据,进行 OLAP 查询。
  • 支持常规 SQL 查询:ClickHouse 通过 JDBC 引擎支持标准的 SQL 查询语法,包括 SELECT、WHERE、JOIN、GROUP BY 等操作,可以对外部数据库的数据进行查询、过滤和聚合。
  • 实时数据访问:ClickHouse 与外部数据库的连接是实时的,查询结果会直接从外部数据库中获取最新的数据。
  • 不支持写入:与 PostgreSQL 引擎类似,JDBC 引擎只能用于读取数据,不能直接向外部数据库中写入数据。如果需要数据写入,可能需要借助其他工具进行数据同步或迁移。

注意事项:

  • 网络延迟:由于 JDBC 引擎是通过网络访问外部数据库,网络延迟可能会影响查询性能,尤其是在数据量大或跨地域部署的情况下。
  • 外部数据库性能:ClickHouse 是为 OLAP 场景优化的,而许多传统关系型数据库(如 MySQL、PostgreSQL)主要优化 OLTP 场景。因此,在高并发、大数据量的情况下,外部数据库的性能瓶颈可能会影响查询速度。
  • 数据传输和吞吐量:JDBC 查询通常需要跨网络传输数据,可能会受到带宽和网络条件的限制,从而影响查询性能。
    连接池管理:为了提高 JDBC 查询的效率,通常需要在 ClickHouse 配置适当的连接池管理,避免每次查询都重新建立连接。

基本语法:

CREATE TABLE external_table_name
(column1 DataType,-- 列名需要与支持jdbc的数据库表的列名保持一致column2 DataType,...
)
ENGINE = JDBC('uri', 'external_database', 'external_table')
  • uri:外部数据库的的URI
    URI格式::jdbc:<driver_name>://<host_name>:/?user=&password=
    MySQL示例:jdbc:mysql://localhost:3306/?user=root&password=root
  • external_database:外部数据库的数据库名
  • external_table:外部表名或类似select * from table1 where column1=1的查询语句

使用示例:

create table test_JDBC_MySQL
(id       Int64,name     String,log      Decimal(10, 6),lat      Decimal(10, 6),crt_time DateTime
)engine = JDBC('jdbc:mysql://127.0.0.1:3306/?user=root&password=abc111111', 'xxok', 'region_log_lat');

ODBC引擎

ODBC 引擎使得 ClickHouse 能够通过 ODBC 协议与外部数据库建立连接,从而进行数据查询和集成。主要的区别在于,ODBC 和 JDBC 提供的是不同的数据库连接标准,ODBC 通常用于与 Windows 环境中的传统数据库系统(如 SQL Server、Oracle、MySQL 等)连接,而 JDBC 则是 Java 专用的。

Kafka引擎

Kafka 引擎 允许 ClickHouse 从 Apache Kafka 中实时消费消息流,并将这些消息存储到 ClickHouse 数据表中。Kafka 是一个分布式流处理平台,广泛应用于实时数据处理和消息传递系统。通过 Kafka 引擎,ClickHouse 能够直接从 Kafka 消费数据流,并实时进行数据分析和查询。

Kafka 引擎提供了一个高效且灵活的方式,用于将 Kafka 中的数据实时加载到 ClickHouse 中进行 OLAP(在线分析处理)查询。适用于需要实时流数据分析的场景,如日志分析、实时监控、金融数据分析等。

使用场景:

  • 实时数据流分析:Kafka 引擎使 ClickHouse 能够实时从 Kafka 中读取数据流进行分析。例如,实时处理传感器数据、点击流数据、日志数据等。
  • 事件驱动架构:在事件驱动架构中,Kafka 扮演消息队列的角色,ClickHouse 通过 Kafka 引擎消费事件流并进行实时处理,适用于金融、广告、日志等业务领域。
  • 日志聚合和监控:将来自不同服务的日志流通过 Kafka 发送到 ClickHouse,进行日志分析和监控。

支持功能:

  • 实时消费:ClickHouse 可以实时从 Kafka 消费数据,适用于需要低延迟处理的应用场景。
  • 数据批量写入:Kafka 引擎支持批量消费数据,并定期将数据写入 ClickHouse 表中。
  • 支持多主题:Kafka 引擎支持从多个 Kafka 主题消费数据,并将其整合到 ClickHouse 中。

注意事项:

  • Kafka 引擎表的数据流动方式:
    Kafka消费表不能直接作为结果表使用,Kafka消费表只是用来消费Kafka数据,没有真正的存储所有数据。Kafka 引擎表并不像普通的表一样直接存储数据。它仅仅是一个流处理的接口,专门用于从 Kafka 消费数据。这个表本质上是一个 虚拟表,它没有传统意义上的磁盘存储,而是通过实时读取 Kafka 消息流的数据进行操作。因此,你不能直接对 Kafka 引擎表进行查询操作来获取数据,尤其是如果 Kafka 表没有物化视图或者目标表来接收数据时,表本身不会存储数据

  • 数据不持久化:
    Kafka 引擎表会将 Kafka 消费的数据暂时存储在内存中或某种临时的缓存结构中,并没有持久化存储在磁盘上。这使得在查询 Kafka 引擎表时,无法直接查询到你期待的结果,尤其是当数据还没有完全从 Kafka 流入到其他表时,查询可能会没有返回数据。

  • 延迟与批量消费:
    Kafka 引擎表通常是按 批量消费 或者定时从 Kafka 中读取数据的,而不是实时地将每一条消息立即写入 ClickHouse 表。如果没有物化视图的帮助,Kafka 中的数据可能不会被实时写入其他表中,或者它们可能只会在某些条件下(如批量写入或时间窗口)才会被消费和同步。

基本语法:

Kafka引擎表:

CREATE TABLE external_table_name
(column1 DataType,column2 DataType,...
)
ENGINE = Kafka('kafka_broker_list', 'kafka_topic_list', 'kafka_group_name', 'kafka_format')
  • 必要参数:
    • kafka_broker_list:以逗号分隔的 brokers 列表 (localhost:9092)。
    • kafka_topic_list: topic 列表 (my_topic)。
    • kafka_group_name:Kafka 消费组名称 (group1)。如果不希望消息在集群中重复,请在每个分片中使用相同的组名。
    • kafka_format:消息体格式。使用与 SQL 部分的 FORMAT 函数相同表示方法,例如 JSONEachRow、CSV等
  • 可选参数:
    • kafka_row_delimiter:每个消息体(记录)之间的分隔符。
    • kafka_schema:如果解析格式需要一个 schema 时,此参数必填
    • kafka_num_consumers:单个表的消费者数量。默认值是:1,如果一个消费者的吞吐量不足,则指定更多的消费者。消费者的总数不应该超过 topic 中分区的数量,因为每个分区只能分配一个消费者。

数据表:

CREATE TABLE external_data_table_name
(column1 DataType,column2 DataType,...
)
ENGINE = MergeTree

物化视图,用于同步数据

CREATE MATERIALIZED VIEW test_mv TO external_data_table_name AS
SELECTcolumn1,column2,...
FROMexternal_table_name;

使用示例:

Kafka引擎表:

CREATE TABLE test_Kafka (id Int64,name String,log Decimal(10, 6),lat Decimal(10, 6),crt_time DateTime
) ENGINE = Kafka('127.0.0.1:9092', 'test_clickhouse_topic', 'jhdsjkhdjk', 'JSONEachRow');

数据表:

CREATE TABLE test_Kafka_data (id Int64,name String,log Decimal(10, 6),lat Decimal(10, 6),crt_time DateTime
) ENGINE = MergeTree
ORDER BYid;

物化视图:

CREATE MATERIALIZED VIEW test_Kafka_mv TO test_Kafka_data AS
SELECTid,name,log,lat,crt_time
FROMtest_Kafka;

RabbitMQ引擎

RabbitMQ 引擎 允许 ClickHouse 直接订阅 RabbitMQ 消息队列,实时消费队列中的消息,并将消息存储到 ClickHouse 的表中。通过这种方式,ClickHouse 可以作为一个高效的数据接收端来处理来自 RabbitMQ 的事件流,特别适用于需要实时处理大规模事件数据的场景。

使用场景:

  • 实时数据流处理:从 RabbitMQ 中获取实时产生的事件数据,将其实时写入 ClickHouse 数据库进行分析和存储。
  • 日志处理和分析:接收 RabbitMQ 中的日志事件,执行数据清洗、转换,然后存入 ClickHouse 以便于进行高效的日志分析。
  • 事件驱动架构:用于基于事件触发的架构,ClickHouse 可以订阅 RabbitMQ 事件队列,实时存储消息内容并进行后续分析。

支持功能:

  • 实时消费数据:
    RabbitMQ 引擎表本质上是一个消费引擎,ClickHouse 会持续从指定的 RabbitMQ 队列中拉取消息,并将其存储到目标表中。
  • 灵活的数据处理:
    RabbitMQ 引擎能够处理不同类型的数据流,尤其是当数据结构发生变化时,可以通过 ClickHouse 的表结构定义来适应 RabbitMQ 消息的格式。
  • 高吞吐量:
    ClickHouse 的高性能特性使得它能够在实时处理流数据时保持较高的吞吐量,适合大规模事件处理和分析。

注意事项:

  • RabbitMQ 引擎表不存储数据
    RabbitMQ 引擎表只是一个连接到 RabbitMQ 队列的“虚拟”表,它会在每次查询时从消息队列拉取数据。它不像传统表那样持久化数据,而是作为一个消费端。数据流入该表后,通常会通过物化视图流转到其他存储表。由于其工作机制,它本身并没有存储历史数据,因此不能直接进行查询。

  • 消息消费过程
    当你创建一个 RabbitMQ 引擎表时,ClickHouse 会持续从指定的 RabbitMQ 队列中拉取消息并将其传递到目标表中。每个查询触发时,它只会拉取尚未消费的消息,而消息一旦被消费并存储在目标表中,它就不再出现在 RabbitMQ 引擎表中。因此,你不能像查询普通表那样直接查询 RabbitMQ 引擎表,它并不持有可查询的历史数据。

  • 高吞吐量和实时性
    RabbitMQ 引擎表的设计是为了处理高吞吐量的流式数据,其目的是在数据流入系统时尽快地消费并存储。因此,它的结构是针对消息流而非历史查询优化的。如果你需要历史数据查询或更复杂的数据分析,应该依赖于已经将数据持久化到 ClickHouse 常规表中的物化视图
    为了能够查询 RabbitMQ 消费的消息数据,通常需要设置一个物化视图。物化视图会将从 RabbitMQ 引擎表中消费到的数据写入到一个持久化的 ClickHouse 表中。因此,查询 RabbitMQ 数据的正确方式是查询物化视图所同步的数据,而不是直接查询 RabbitMQ 引擎表。

基本语法:

RabbitMQ引擎表:

CREATE TABLE external_table_name
(column1 DataType,column2 DataType,...
) ENGINE = RabbitMQ
SETTINGSrabbitmq_host = 'localhost',rabbitmq_port = 5672,rabbitmq_user = 'guest',rabbitmq_password = 'guest',rabbitmq_queue = 'queue_name',rabbitmq_exchange = 'exchange_name',rabbitmq_routing_key = 'routing_key';
  • 必要参数:
    • rabbitmq_host_port:主机名:端口号 (比如, localhost:5672)
    • rabbitmq_exchange_name:RabbitMQ exchange 名称
    • rabbitmq_format:消息格式. 使用与SQLFORMAT函数相同的标记,如JSONEachRow。 更多信息,请参阅 Formats 部分
  • 可选参数:
    • rabbitmq_exchange_type:RabbitMQ exchange 的类型: direct, fanout, topic, headers, consistent_hash. 默认是: fanout
    • rabbitmq_routing_key_list:一个以逗号分隔的路由键列表
    • rabbitmq_row_delimiter:用于消息结束的分隔符
    • rabbitmq_schema:如果格式需要模式定义,必须使用该参数。比如, Cap’n Proto 需要模式文件的路径以及根 schema.capnp:Message 对象的名称
    • rabbitmq_num_consumers:每个表的消费者数量。默认:1。如果一个消费者的吞吐量不够,可以指定更多的消费者
    • rabbitmq_num_queues:队列的总数。默认值: 1. 增加这个数字可以显著提高性能
    • rabbitmq_queue_base - 指定一个队列名称的提示。这个设置的使用情况如下
    • rabbitmq_deadletter_exchange:为dead letter exchange指定名称。你可以用这个 exchange 的名称创建另一个表,并在消息被重新发布到 dead letter exchange 的情况下收集它们。默认情况下,没有指定 dead letter exchange。Specify name for a dead letter exchange
    • rabbitmq_persistent:如果设置为 1 (true), 在插入查询中交付模式将被设置为 2 (将消息标记为 ‘persistent’). 默认是: 0
    • rabbitmq_skip_broken_messages:RabbitMQ 消息解析器对每块模式不兼容消息的容忍度。默认值:0. 如果rabbitmq_skip_broken_messages = N,那么引擎将跳过 N 个无法解析的 RabbitMQ 消息(一条消息等于一行数据)
    • rabbitmq_max_block_size
    • rabbitmq_flush_interval_ms

ClickHouse 配置文件添加RabbitMQ 服务器配置(/etc/clickhouse-server/config.xml):

  • 必要配置:

     <rabbitmq><username>root</username><password>clickhouse</password></rabbitmq>
    
  • 可选配置:

     <rabbitmq><vhost>clickhouse</vhost></rabbitmq>
    

数据表:

CREATE TABLE external_data_table_name
(column1 DataType,column2 DataType,...
)
ENGINE = MergeTree

物化视图,用于同步数据

CREATE MATERIALIZED VIEW test_mv TO external_data_table_name AS
SELECTcolumn1,column2,...
FROMexternal_table_name;

使用示例:

RabbitMQ引擎表:

CREATE TABLE test_RabbitMQ (id Int64,name String,log Decimal(10, 6),lat Decimal(10, 6),crt_time DateTime
) ENGINE = RabbitMQ
SETTINGSrabbitmq_host_port = '127.0.0.1:5672',rabbitmq_exchange_name = 'exchange_fanout_fund_sub',rabbitmq_routing_key_list = 'topic.*',rabbitmq_format = 'JSONEachRow';

配置文件(/etc/clickhouse-server/config.xml):

 <rabbitmq><username>root</username><password>clickhouse</password></rabbitmq>

数据表:

CREATE TABLE test_RabbitMQ_data (id Int64,name String,log Decimal(10, 6),lat Decimal(10, 6),crt_time DateTime
) ENGINE = MergeTree
ORDER BYid;

物化视图:

CREATE MATERIALIZED VIEW test_RabbitMQ_mv TO test_RabbitMQ_data AS
SELECTid,name,log,lat,crt_time
FROMtest_RabbitMQ;

总结:

  • RabbitMQ 引擎表 设计为一个 流式消费 表,它不能直接用于查询,因为它并不持久化数据。
  • 查询 RabbitMQ 数据时,通常需要通过 物化视图 将数据同步到一个常规的 ClickHouse 表中。
  • 如果你直接查询 RabbitMQ 引擎表,通常会发现没有数据,因为这些数据已经被消费并传递到目标表中。

File引擎

File 引擎是一种特殊的表引擎,用于从本地或外部文件系统读取数据或将数据写入文件。它并不是一个传统的数据库表引擎,而是用于从文件中直接加载数据或者将查询结果导出到文件。File 引擎支持多种格式,如 CSV、TSV、JSON、Parquet 等,适用于快速的数据导入、导出和批量处理场景。

使用场景:

  • 数据导入/导出:将本地或外部文件的数据导入到 ClickHouse,或者将 ClickHouse 表中的数据导出到文件中。
  • 数据交换:与其他系统共享数据。通过将数据导出为标准文件格式(如 CSV、JSON 或 Parquet),可以方便地与其他数据处理工具进行交互。
  • 数据迁移:在不同的数据库之间迁移数据时,可以将数据导出为标准的文件格式,然后导入到目标数据库。
  • 临时存储:在处理大数据集时,可以使用 File 引擎暂时存储计算结果,以便后续使用或分析。

注意事项:

  • 性能:使用 File 引擎时,读取和写入速度通常较慢,因为它依赖于文件 I/O 操作。对于大规模数据处理,建议使用专门的存储引擎,如 MergeTree 系列。
  • 数据一致性:由于数据存储在外部文件中,ClickHouse 不会保证文件的完整性和一致性。文件可能会在处理中被修改或删除,这会导致查询结果不一致。
  • 支持的文件格式:不同的文件格式有不同的使用场景,选择合适的文件格式对于性能和存储效率非常重要。例如,对于大数据量的处理,Parquet 或 Avro 格式通常比 CSV 更高效。
  • 路径问题:在使用 File 引擎时,确保文件路径是正确的,且 ClickHouse 有权限读取或写入该文件。

常见文件格式:

  • CSV (CSV,逗号分隔值)
  • TabSeparated (TSV,制表符分隔值)
  • TSVWithNames(带列名的 TSV)
  • JSONEachRow(JSON,每行一个 JSON 对象)
  • Parquet(列式存储格式,适用于大数据处理)
  • Avro(二进制格式,常用于数据流处理)
  • Protobuf(二进制序列化格式)

基本语法:

CREATE TABLE table_name
(column1 DataType1,column2 DataType2,...
)
ENGINE = File(file_format, 'file_path');
  • file_format:文件格式
  • file_path:文件路径

使用示例:

  1. CSV格式

    CREATE TABLE test_File_CSV (id Int64,name String,log Decimal(10, 6),lat Decimal(10, 6),crt_time DateTime
    ) ENGINE = File('CSV','/var/lib/clickhouse/user_files/data1.csv');
    

    data1.csv内容

    1,haha,1.0,2.0,2024-02-02 00:00:00
    1,haha,1.0,2.0,2024-02-02 00:00:00
    
  2. JSONEachRow格式

    CREATE TABLE test_File_JSONEachRow (id Int64,name String,log Decimal(10, 6),lat Decimal(10, 6),crt_time DateTime
    ) ENGINE = File('JSONEachRow','/var/lib/clickhouse/user_files/data2.JSONEachRow');
    

    data2.JSONEachRow内容

    {"id":1,"name":"John Doe","log":40.712776,"lat":74.005974,"crt_time":"2024-11-28 07:21:38"}
    {"id":1,"name":"John Doe","log":40.712776,"lat":74.005974,"crt_time":"2024-11-28 07:21:38"}
    {"id":1,"name":"John Doe","log":40.712776,"lat":74.005974,"crt_time":"2024-11-28 07:21:38"}
    {"id":1,"name":"John Doe","log":40.712776,"lat":74.005974,"crt_time":"2024-11-28 07:21:38"}
    

总结:

  • ClickHouse 的 File 引擎是一种非常灵活的工具,适用于从文件中读取数据或将数据导出为不同格式的文件。它支持多种常见的数据格式,并且适用于大多数批量数据处理和数据交换的场景。然而,由于它是基于文件的存储,使用时需要注意性能、文件一致性和格式选择等问题。

URL引擎

URL 引擎是用于从指定的 URL 地址加载数据的引擎。它通常用于处理从外部 Web 服务或者远程文件系统(例如 HTTP 或 FTP 服务器)获取的数据。URL 引擎可以让 ClickHouse直接从指定的 URL 读取数据,并将其插入到指定的表中进行处理和分析。

使用场景:

  • 从外部 HTTP/FTP 服务器加载数据:适用于从外部服务器拉取数据进行实时分析。例如,从一个 Web 服务接口获取实时 JSON 数据,或者从 FTP 服务器上获取 CSV 文件。
  • 异步数据加载:在某些场景下,ClickHouse 可以通过 URL 引擎异步地从外部 URL 加载数据,以便在分析过程中动态更新数据。
  • 集成第三方服务数据:ClickHouse 的 URL 引擎非常适合用来集成外部的第三方数据源,例如从外部提供的数据 API 或者 Web 服务中加载数据。

支持功能:

  • 支持的协议:HTTP、HTTPS、FTP、SFTP 等。
  • 支持的格式:常见的结构化数据格式,如 CSV、TSV、JSON、TabSeparated、JSONEachRow 等。

注意事项:

  • 网络延迟:因为 URL 引擎从远程服务器加载数据,网络延迟可能会影响数据的加载速度。如果 URL 地址响应缓慢,可能会导致数据加载过程变慢。
  • 并发限制:从外部服务器加载大量数据时,可能会受到服务器并发请求的限制。需要确保远程服务器支持高并发连接。
  • 数据量和资源消耗:从远程服务器加载大量数据时,ClickHouse 可能会占用较多的内存和网络带宽。应确保服务器的资源足够支持大规模数据加载。
  • 缓存:ClickHouse 不会缓存 URL 引擎加载的数据。每次查询都会从指定的 URL 获取最新的数据。
  • 权限问题:如果你通过 HTTP/FTP 等协议加载数据时,确保 URL 可公开访问或提供了适当的认证信息。ClickHouse 本身不处理 URL 访问的认证。
  • 错误处理:如果 URL 指定的资源不可用或格式不正确,ClickHouse 会返回错误,提示无法加载数据。

常见文件格式:

  • CSV (CSV,逗号分隔值)
  • TabSeparated (TSV,制表符分隔值)
  • TSVWithNames(带列名的 TSV)
  • JSONEachRow(JSON,每行一个 JSON 对象)
  • Parquet(列式存储格式,适用于大数据处理)
  • Avro(二进制格式,常用于数据流处理)
  • Protobuf(二进制序列化格式)

基本语法:

CREATE TABLE table_name
(column1 DataType,column2 DataType,...
)
ENGINE = URL('URL', file_format);
  • file_format:文件格式
  • URL:文件URL

使用示例:

  1. CSV格式

    CREATE TABLE test_URL_CSV (id Int64,name String,log Decimal(10, 6),lat Decimal(10, 6),crt_time DateTime
    ) ENGINE = URL('http://127.0.0.1:9002/file/6749543efc3566d2e46b27b0.csv','CSV');
    

    6749543efc3566d2e46b27b0.csv内容

    1,haha,1.0,2.0,2024-02-02 00:00:00
    1,haha,1.0,2.0,2024-02-02 00:00:00
    
  2. JSONEachRow格式

    CREATE TABLE test_URL_JSONEachRow (id Int64,name String,log Decimal(10, 6),lat Decimal(10, 6),crt_time DateTime
    ) ENGINE = URL('http:///127.0.0.1:9002/file/67495527fc3566d2e46b27b1.JSONEachRow','JSONEachRow');
    

    67495527fc3566d2e46b27b1.JSONEachRow内容

    {"id":1,"name":"John Doe","log":40.712776,"lat":74.005974,"crt_time":"2024-11-28 07:21:38"}
    {"id":1,"name":"John Doe","log":40.712776,"lat":74.005974,"crt_time":"2024-11-28 07:21:38"}
    {"id":1,"name":"John Doe","log":40.712776,"lat":74.005974,"crt_time":"2024-11-28 07:21:38"}
    {"id":1,"name":"John Doe","log":40.712776,"lat":74.005974,"crt_time":"2024-11-28 07:21:38"}
    

HDFS引擎

HDFS 引擎允许从 Hadoop 分布式文件系统(HDFS) 中读取和写入数据。HDFS 是一个大数据存储解决方案,通常用于存储大量的结构化或非结构化数据,广泛应用于大数据处理和分析平台。ClickHouse 的 HDFS 引擎为用户提供了与 HDFS 集成的能力,使得在 ClickHouse 中处理和分析存储在 HDFS 上的数据变得简单和高效。

HDFS 引擎允许 ClickHouse 直接从 HDFS 中读取数据,进行分析和计算。它不仅支持将数据写入 HDFS 目录,还能从 HDFS 中读取不同格式的数据进行查询。通过 HDFS 引擎,ClickHouse 可以轻松与 Hadoop 生态系统中的其他组件(如 Hive、Spark 等)集成,并高效地处理大规模数据。

使用场景:

  • 大数据集成:将 ClickHouse 作为数据仓库与 Hadoop 大数据生态系统中的其他组件(如 Spark、Hive)结合,处理和分析存储在 HDFS 中的海量数据。
  • 日志和事件数据存储:许多大数据平台将日志、传感器数据、监控数据等存储在 HDFS 上,ClickHouse 的 HDFS 引擎可以方便地读取和分析这些数据。
  • 分布式文件存储:当数据规模庞大且分布在多个节点上时,HDFS 提供了一个可靠的存储解决方案,而 ClickHouse 的 HDFS 引擎使得查询这些数据成为可能。

支持功能:

  • 数据压缩:HDFS 支持多种压缩算法,如 Gzip、Snappy 等。在读取压缩文件时,ClickHouse 会自动处理这些压缩文件格式。
  • 分布式读取:ClickHouse 可以并行读取 HDFS 上的数据,从而利用分布式系统的优势加速查询和分析。
  • 支持多种格式:HDFS 引擎支持多种存储格式,包括但不限于 CSV、Parquet、ORC 和 JSON 等。用户可以根据数据规模、查询需求和性能考虑选择合适的格式。

注意事项:

  • 网络带宽和延迟:HDFS 引擎的性能可能会受到网络带宽和延迟的影响,特别是在跨数据中心或者跨网络访问 HDFS 时。要优化性能,尽量确保 HDFS 集群的节点和 ClickHouse 实例之间的网络连接良好。
  • 数据量:读取大量数据时,可能会遇到性能瓶颈。ClickHouse 提供了分布式表和其他优化措施(如分区)来提高大数据量处理的效率。
  • 存储格式:不同的存储格式(如 Parquet 或 ORC)对于大数据集的读取性能有显著影响,列式存储格式通常比行式存储格式(如 CSV 或 JSON)更加高效。

基本语法:

CREATE TABLE table_name
(column1 DataType,column2 DataType,...
)
ENGINE = HDFS('path', format);
  • path:
    HDFS 引擎通过一个 HDFS URI 路径来访问文件。该路径包括 HDFS 的协议(hdfs://)以及实际存储数据的路径。
    hdfs://<namenode_host>:/path/to/directory:HDFS 的地址可以是 hdfs://namenode:8020/ 这样的格式。
  • format:
    • ClickHouse 支持多种数据格式的读取和写入,包括但不限于:
    • CSV:逗号分隔的文本格式。
    • TSV:制表符分隔的文本格式。
    • JSON:JSON 格式。
    • Parquet:列式存储格式,适合大规模数据处理。
    • ORC:另一种列式存储格式,适合大规模数据。




参考文章:Clickhouse中文档

相关文章:

Clickhouse 外部存储引擎

文章目录 外部存储引擎分类MySQL引擎PostgreSQL引擎MongoDB引擎JDBC引擎ODBC引擎Kafka引擎RabbitMQ引擎File引擎URL引擎HDFS引擎 外部存储引擎分类 引擎类型描述特点MySQL从 MySQL 数据库中读取数据用于与 MySQL 数据库共享数据&#xff0c;支持读取 MySQL 表中的数据 支持 SQ…...

eclipse怎么配置jdk路径?

在Eclipse中配置JDK路径是一个简单的步骤&#xff0c;以下是配置JDK路径的步骤&#xff1a; 打开Eclipse&#xff1a;启动Eclipse IDE。 访问首选项&#xff1a; 在Eclipse的菜单栏中&#xff0c;选择 Window > Preferences&#xff08;对于Mac OS X用户&#xff0c;选择 E…...

【前端】JavaScript 中的创建对象模式要点

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;对象属性值中的引号规则&#x1f4af;对象属性换行与尾随逗号的使用&#x1f4af;工厂模式&#xff1a;灵活高效的对象创建&#x1f4af;自定义构造函数&#xff1a;通过…...

GWAS分析先做后学

大家好&#xff0c;我是邓飞。 GWAS分析是生物信息和统计学的交叉学科&#xff0c;上可以学习编程&#xff0c;下可以学习统计。对于Linux系统&#xff0c;R语言&#xff0c;作图&#xff0c;统计学&#xff0c;机器学习等方向&#xff0c;都是一个极好的入门项目。生物信息如…...

【系统设计】高可用之缓存基础

缓存的缘起 使用缓存的主要原因包括提高系统性能、降低数据库负载、提升用户体验和保证系统可用性。‌ 在计算机体系结构中&#xff0c;由于处理器和存储器的处理时间不匹配&#xff0c;在处理器和一个较大较慢的设备之间插入一个更小更快的存储设备&#xff08;如高速缓存&a…...

《Java核心技术I》volatile字段

volatile字段 有多处理器的计算机能够暂时在寄存器或本地内存缓存中保存内存值&#xff0c;其结果是&#xff0c;运行在不同处理器上的线程可能看到同一个内存位置上有不同的值。编译器可以改变指令执行的顺序以使吞吐量更大化&#xff0c;编译器不会选择可能改变代码语义的顺…...

2024运维故障记 | 12/2 网易云音乐崩了

#运维故障记# 前两天看到网易云音乐崩了的新闻&#xff0c;回想了一下&#xff0c;今年从网易云音乐到支付宝、还有微软&#xff0c;近期就发生了好几起运维届的故障。 今年来不及计数了&#xff0c;先做个记录。 明年看看运维届的大故障会发生多少&#xff0c;什么原因&…...

架构设计读后——微服务

1 微服务历史 2005年&#xff1a;Dr. Peter Rodgers提出"Micro-Web-Services"概念2011年&#xff1a;一个软件架构工作组使用"microservice"来描述一中架构模式2012年&#xff1b;这个工作组正式使用"microservice"来代表这个架构2012年&#x…...

软考高级架构-9.4.4-双机热备技术 与 服务器集群技术

一、双机热备 1、特点&#xff1a; 软硬件结合&#xff1a;系统由两台服务器&#xff08;主机和备机&#xff09;、一个共享存储&#xff08;通常为磁盘阵列柜&#xff09;、以及双机热备软件&#xff08;提供心跳检测、故障转移和资源管理功能的核心软件&#xff09;组成。 …...

聊聊前端工程化

深度解析前端工程化 ​ 近年来&#xff0c;随着前端技术的快速迭代和项目复杂度的增加&#xff0c;前端开发已经从简单的页面搭建演变为专业的工程化体系。前端工程化通过工具链、标准化和流程化手段&#xff0c;不仅提高了开发效率&#xff0c;也大幅提升了项目的可维护性和协…...

“放弃Redis Desktop Manager使用Redis Insight”:日常使用教程(Redis可视化工具)

文章目录 更新Redis Insight连接页面基础解释自动更新key汉化暂时没有找到方法&#xff0c; Redis Desktop Manager在连接上右键在数据库上右键在key上右键1、添加连接2、key过期时间 参考文章 更新 (TωT)&#xff89;~~~ β&#xff59;ё β&#xff59;ё~ 现在在维护另一…...

mmdection配置-yolo转coco

基础配置看我的mmsegmentation。 也可以参考b站 &#xff1a;https://www.bilibili.com/video/BV1xA4m1c7H8/?vd_source701421543dabde010814d3f9ea6917f6#reply248829735200 这里面最大的坑就是配置coco数据集。我一般是用yolo&#xff0c;这个yolo转coco格式很难搞定&#…...

聚合支付系统/官方个人免签系统/三方支付系统稳定安全高并发 附教程

聚合支付系统/官方个人免签系统/三方支付系统稳定安全高并发 附教程 系统采用FastAdmin框架独立全新开发&#xff0c;安全稳定,系统支持代理、商户、码商等业务逻辑。 针对最近一些JD&#xff0c;TB等业务定制&#xff0c;子账号业务逻辑API 非常详细&#xff0c;方便内置…...

力扣67. 二进制求和

给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 示例 1&#xff1a; 输入:a "11", b "1" 输出&#xff1a;"100" 示例 2&#xff1a; 输入&#xff1a;a "1010", b "1011" 输出&#…...

网络安全中的 SOC 是什么?

当今世界&#xff0c;网络威胁日益增多&#xff0c;确保网络安全已成为各种规模企业的首要任务。网络安全讨论中经常出现的一个术语是 SOC&#xff0c;即安全运营中心的缩写。但网络安全中的 SOC 是什么呢&#xff1f; SOC在防御网络威胁、管理安全事件和全天候监控系统方面发…...

16、鸿蒙学习——Visibility与(if...else)该如何选择

在鸿蒙中我们如果要控制一个组件的显示与隐藏可以设置组件的Visibility属性&#xff0c;也可使用&#xff08;if...else&#xff09;条件控制&#xff0c;具体我们该选择哪个&#xff1f;二者有什么区别呢&#xff1f; 1、Visibility 名称描述Hidden隐藏&#xff0c;但参与布局…...

PH热榜 | 2024-12-05

1. Oopsie 标语&#xff1a;用AI和会话回放调试Flutter和React Native应用 介绍&#xff1a;Zipy推出的Oopsie是一款你唯一需要的AI赋能移动端调试工具&#xff0c;它能提供▶️会话回放、&#x1f916;错误监控、&#x1f4a1;AI生成的概要分析&#xff0c;以及&#x1f525…...

Qt Chart 模块化封装曲线图

一 版本说明 二 完成示例 此文章包含:曲线轴设置,曲线切换,单条曲线显示,坐标轴。。。 三 曲线图UI创建 在UI界面拖放一个QWidget,然后在 Widget里面放一个 graphicsView 四 代码介绍 1 头文件 #include <QString> #include <QTimer> #include <QMessa…...

【AI系统】MobileFormer

MobileFormer 在本文中&#xff0c;将介绍一种新的网络-MobileFormer&#xff0c;它实现了 Transformer 全局特征与 CNN 局部特征的融合&#xff0c;在较低的成本内&#xff0c;创造一个高效的网络。通过本节&#xff0c;让大家去了解如何将 CNN 与 Transformer 更好的结合起来…...

python数据分析之爬虫基础:解析

目录 1、xpath 1.1、xpath的安装以及lxml的安装 1.2、xpath的基本使用 1.3、xpath基本语法 2、JsonPath 2.1、jsonpath的安装 2.2、jsonpath的使用 2.3、jsonpath的基础语法 3、BeautifulSoup 3.1、bs4安装及创建 3.2、beautifulsoup的使用 3.3、beautifulsoup基本语…...

uniapp中导入uview或者uview plus

关于SCSS uview-plus依赖SCSS&#xff0c;您必须要安装此插件&#xff0c;否则无法正常运行。 如果您的项目是由HBuilder X创建的&#xff0c;相信已经安装scss插件&#xff0c;如果没有&#xff0c;请在HX菜单的 工具->插件安装中找到"scss/sass编译"插件进行安…...

【LeetCode】122.买卖股票的最佳时机II

文章目录 题目链接&#xff1a;题目描述&#xff1a;解题思路一&#xff08;贪心算法&#xff09;&#xff1a;解体思路二&#xff08;动态规划&#xff09;&#xff1a; 题目链接&#xff1a; 122.买卖股票的最佳时机II 题目描述&#xff1a; 解题思路一&#xff08;贪心算法…...

openGauss开源数据库实战十九

文章目录 任务十九 openGauss DML 语句测试任务目标实施步骤一、准备工作二、INSERT语句三、DELETE语句四、UPDATE语句五、清理工作 任务十九 openGauss DML 语句测试 任务目标 掌握DML语句的用法,包括INSERT语句、DELETE语句和UPDATE语句。 实施步骤 一、准备工作 使用Li…...

恶补英语初级第18天,《询问他人的喜好(上)》

对话 Do you like coffee? Yes, I do. Do you want a cup? Yes, please. Do you want any sugar? Yes, please. Do you want any milk? No, thank you. I don’t like milk in my coffee, I like black coffee. Do you like biscuits? Yes, I do. Do you want one? Yes, …...

centos 报 ping: www.baidu.com: Name or service not known

[rootlocalhost ~]$ ping www.baidu.com ping: www.baidu.com: Name or service not known解决办法&#xff1a; 首先要求检查特定文件&#xff08;/etc/resolv.conf&#xff09;内是否正确配置了 DNS sudo vim /etc/resolv.conf没有正确配置可以添加如下代码&#xff1a; n…...

Python:使用随机森林分类器进行模型评估:ROC 曲线与 AUC 指标计算

前言 这段代码的目标是使用 随机森林分类器&#xff08;Random Forest Classifier&#xff09; 来进行二分类任务&#xff0c;并基于每个数据子集计算 ROC 曲线&#xff08;Receiver Operating Characteristic Curve&#xff09;以及 AUC&#xff08;Area Under Curve&#xf…...

数据库表约束完全指南:提升数据完整性和准确性

数据库表约束完全指南&#xff1a;提升数据完整性和准确性 在数据库设计中&#xff0c;表约束是确保数据完整性和准确性的关键工具。本文将详细介绍各种类型的表约束及其使用方法&#xff0c;包括非空约束、唯一约束、主键约束、外键约束、默认值约束、检查约束以及自动递增约…...

【JavaEE】多线程(6)

一、用户态与内核态 【概念】 用户态是指用户程序运行时的状态&#xff0c;在这种状态下&#xff0c;CPU只能执行用户态下的指令&#xff0c;并且只能访问受限的内存空间 内核态是操作系统内核运行时的状态&#xff0c;内核是计算机系统的核心部分&#xff0c;CPU可以执行所有…...

BERT和RoBERTa;双向表示与单向的简单理解

目录 BERT和RoBERTa大型预训练语言模型 BERT的原理 RoBERTa的原理 举例说明 双向表示与单向的简单理解 除了预训练语言模型,还有什么模型 一、模型类型与结构 二、训练方式与数据 三、应用场景与功能 四、技术特点与优势 BERT和RoBERTa大型预训练语言模型 BERT(Bi…...

Pytorch使用手册-计算机视觉迁移学习教程(专题十三)

在本教程中,你将学习如何使用迁移学习训练一个卷积神经网络进行图像分类。更多关于迁移学习的内容可以参考 CS231n 课程笔记。 引用课程笔记中的内容: 实际上,很少有人从头开始训练一个完整的卷积网络(随机初始化),因为拥有足够大数据集的情况相对罕见。相反,通常会在非…...