登 录
注 册
< 数 据 库
MySQL
ClickHouse
ES
Doris
MongoDB
Redis
其他DB
ClickHouse介绍
单机部署
客户端访问
数据定义
MergeTree引擎
表引擎-外部存储
表引擎-内存类型
表引擎-其他类型
热门推荐>>>
中台架构
中台建设与架构
Hadoop
源码分析-NN启动(三)
HBase
HBased对接Hive
Linux
Nginx高可用
Python
数据导出工具
Flink
3分钟搭建Flink SQL测试环境
Kafka
Kafka对接Flume
深度学习
卷积神经网络
数据结构与算法
选择合适的算法
MySQL
数据备份恢复
计算机系统
信号量同步线程
Hive
Hive调优参数大全
其他框架
Azkaban Flow1.0与2.0
技术成长
最好的职业建议
精选书单
技术成长书单—机器学习
技术资讯
数据在线:计算将成为公共服务
开发工具
IntelliJ IDEA 20年发展回顾(二)
系统工具
Mac命令行工具
虚拟化
内存虚拟化概述
云原生
云原生构建现代化应用
云服务
一文搞懂公有云、私有云...
Java
Spring Boot依赖注入与Runners
Go
Go函数与方法
SQL
SQL模板
安全常识
一文读懂SSO
当前位置:
首页
>>
ClickHouse
>>
表引擎-外部存储
表引擎-外部存储
2020-10-07 19:57:29 星期三 阅读:6189
外部存储表引擎直接从其他的存储系统读取数据,例如直接读取HDFS的文件或者MySQL数据库的表。这些表引擎只负责元数据管理和数据查询,而它们自身通常并不负责数据的写入,`数据文件直接由外部系统提供`。 ####HDFS引擎表 >既负责读文件,又负责写文件 只负责读文件,文件写入工作则由其他外部系统完成 ```mysql # 负责读和写 CREATE TABLE hdfs_table1( id UInt32, code String, name String )ENGINE = HDFS("hdfs://hdp1.nauu.com:8020/clickhouse/hdfs_table1","CSV") # 只负责读文件,文件写入工作则由其他外部系统完成,区别其实就是hdfs uri使用了通配符 CREATE TABLE hdfs_table2( id UInt32, code String, name String ) ENGINE = HDFS("hdfs://hdp1.nauu.com:8020/clickhouse/hdfs_table2/*","CSV") ``` ####MySQL引擎表 MySQL表引擎可以与MySQL数据库中的数据表建立映射,并通过SQL向其发起远程查询,包括SELECT和INSERT 声明方式为 ``` CREATE TABLE mysql_engine_tb (id Int , name String, city String)ENGINE = MySQL("192.168.1.6:3306", "dbname", "tbname", "root", "xxxx"); ``` 不过比较遗憾的是,目前MySQL表引擎不支持任何UPDATE和DELETE操作,如果有数据更新方面的诉求,可以考虑使用CollapsingMergeTree作为视图的表引擎。 ####JDBC引擎表 相对MySQL表引擎而言,JDBC表引擎不仅可以对接MySQL数据库,还能够与PostgreSQL、SQLite和H2数据库对接。但是需要依赖名为clickhouse-jdbc-bridge的查询代理服务。 在使用JDBC表引擎之前,首先需要启动clickhouse-jdbc-bridge代理服务,启动的方式如下: ``` java -jar ./clickhouse-jdbc-bridge-1.0.jar --driver-path /chbase/jdbc-bridge --listen-host ch5.nauu.com ``` 注意:clickhouse-jdbc-bridge-1.0.jar 包需要自行编译 ``` CREATE TABLE t_ds_process_definition ( id Int32, name String )ENGINE = JDBC("jdbc:postgresql://ip:5432/dolphinscheduler?user=test&password=test", "dbname", "tbname") ``` ####Kafka引擎表 声明方式如下(中括号表示可选参数) ``` ENGINE = Kafka() SETTINGS kafka_broker_list = "host:port,... ", kafka_topic_list = "topic1,topic2,...", kafka_group_name = "group_name", kafka_format = "data_format"[,] [kafka_row_delimiter = "delimiter_symbol"] [kafka_schema = ""] [kafka_num_consumers = N] [kafka_skip_broken_messages = N] [kafka_commit_every_batch = N] ``` 使用Kafka表引擎的步骤 1、创建一张Kafka引擎的表A(创建完后查询数据是查不到的) ``` CREATE TABLE A( id UInt32, code String, name String ) ENGINE = Kafka() SETTINGS kafka_broker_list = "hdp1.nauu.com:6667", kafka_topic_list = "sales-queue", kafka_group_name = "chgroup", kafka_format = "JSONEachRow", kafka_skip_broken_messages = 100 ``` 创建一张面向用户的查询表B,这里使用MergeTree引擎表 ``` CREATE TABLE B ( id UInt32, code String, name String ) ENGINE = MergeTree() ORDER BY id ``` 新建一张物化视图,用于将数据从A同步到B ``` CREATE MATERIALIZED VIEW consumer TO B AS SELECT id,code,name FROM A ``` 现在直接查询表B就可以查到数据了 ####Flie表引擎 File表引擎能够直接读取本地文件的数据,通常被作为一种扩充手段来使用。例如:它可以读取由其他系统生成的数据文件,如果外部系统直接修改了文件,则变相达到了数据更新的目的;它可以将ClickHouse数据导出为本地文件;它还可以用于数据格式转换等场景。 ``` CREATE TABLE file_table ( name String, value UInt32 ) ENGINE = File("CSV") ``` 可以发现,在File表引擎的定义参数中,并没有包含文件路径这一项。所以,File表引擎的数据文件只能保存在config.xml配置中由path指定的路径下。 `ch-path>/data/default/test_file_table/data.CSV`